summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/documentation/AddingTable.cxx56
-rw-r--r--writerfilter/documentation/KnownIssues.txt9
-rw-r--r--writerfilter/documentation/TODO13
-rw-r--r--writerfilter/documentation/doxygen/Doxyfile1237
-rw-r--r--writerfilter/documentation/doxygen/images/doctok.pngbin0 -> 7291 bytes
-rw-r--r--writerfilter/documentation/doxygen/images/ooxmlimportchain.pngbin0 -> 22605 bytes
-rw-r--r--writerfilter/documentation/sprms.txt10
-rw-r--r--writerfilter/documentation/tablesInDoc.txt135
-rw-r--r--writerfilter/inc/WriterFilterDllApi.hxx40
-rw-r--r--writerfilter/inc/dmapper/DomainMapper.hxx156
-rw-r--r--writerfilter/inc/doctok/WW8Document.hxx448
-rw-r--r--writerfilter/inc/ooxml/OOXMLDocument.hxx279
-rw-r--r--writerfilter/inc/resourcemodel/Fraction.hxx60
-rw-r--r--writerfilter/inc/resourcemodel/LoggedResources.hxx128
-rw-r--r--writerfilter/inc/resourcemodel/OutputWithDepth.hxx130
-rw-r--r--writerfilter/inc/resourcemodel/Protocol.hxx102
-rw-r--r--writerfilter/inc/resourcemodel/QNameToString.hxx88
-rw-r--r--writerfilter/inc/resourcemodel/ResourceModelHelper.hxx40
-rw-r--r--writerfilter/inc/resourcemodel/SubSequence.hxx351
-rw-r--r--writerfilter/inc/resourcemodel/TableData.hxx426
-rw-r--r--writerfilter/inc/resourcemodel/TableManager.hxx1099
-rw-r--r--writerfilter/inc/resourcemodel/TagLogger.hxx155
-rw-r--r--writerfilter/inc/resourcemodel/WW8ResourceModel.hxx401
-rw-r--r--writerfilter/inc/resourcemodel/XPathLogger.hxx65
-rw-r--r--writerfilter/inc/resourcemodel/exceptions.hxx60
-rw-r--r--writerfilter/inc/resourcemodel/util.hxx50
-rw-r--r--writerfilter/inc/rtftok/RTFInputSource.hxx42
-rw-r--r--writerfilter/inc/rtftok/RTFParseException.hxx42
-rw-r--r--writerfilter/inc/rtftok/RTFScanner.hxx65
-rw-r--r--writerfilter/inc/rtftok/RTFScannerHandler.hxx50
-rw-r--r--writerfilter/inc/writerfilter.mk29
-rw-r--r--writerfilter/prj/build.lst11
-rw-r--r--writerfilter/prj/d.lst8
-rw-r--r--writerfilter/qa/complex/ooxml/LoadDocuments.java51
-rw-r--r--writerfilter/qa/complex/ooxml/makefile.mk90
-rw-r--r--writerfilter/qa/complex/ooxml/testdocuments/Table5CellBorders.docxbin0 -> 10420 bytes
-rw-r--r--writerfilter/qa/complex/ooxml/testdocuments/TableDifferentColumns.docxbin0 -> 10440 bytes
-rw-r--r--writerfilter/qa/complex/ooxml/testdocuments/TablePreferredWidth.docxbin0 -> 10393 bytes
-rw-r--r--writerfilter/qa/complex/ooxml/testdocuments/TableRowProperties.docxbin0 -> 10622 bytes
-rw-r--r--writerfilter/qa/cppunittests/doctok/doctok.job1
-rw-r--r--writerfilter/qa/cppunittests/doctok/export.map7
-rw-r--r--writerfilter/qa/cppunittests/doctok/makefile.mk71
-rw-r--r--writerfilter/qa/cppunittests/doctok/testdoctok.cxx228
-rw-r--r--writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.cxx203
-rw-r--r--writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.hxx90
-rw-r--r--writerfilter/qa/cppunittests/odiapi/FileLoggerImpl.cxx80
-rw-r--r--writerfilter/qa/cppunittests/odiapi/FileLoggerImpl.hxx57
-rw-r--r--writerfilter/qa/cppunittests/odiapi/export.exp1
-rw-r--r--writerfilter/qa/cppunittests/odiapi/export.map34
-rw-r--r--writerfilter/qa/cppunittests/odiapi/makefile.mk76
-rw-r--r--writerfilter/qa/cppunittests/odiapi/testCore.cxx172
-rw-r--r--writerfilter/qa/cppunittests/odiapi/testProperty.cxx682
-rw-r--r--writerfilter/qa/cppunittests/qname/export.map34
-rw-r--r--writerfilter/qa/cppunittests/qname/makefile.mk76
-rw-r--r--writerfilter/qa/cppunittests/qname/testQName.cxx7535
-rw-r--r--writerfilter/qa/cppunittests/sl/export.map34
-rw-r--r--writerfilter/qa/cppunittests/sl/helloworld.odt.flat.xml12
-rw-r--r--writerfilter/qa/cppunittests/sl/makefile.mk73
-rw-r--r--writerfilter/qa/cppunittests/sl/testOD_SL.cxx118
-rw-r--r--writerfilter/qa/cppunittests/xxml/export.map34
-rw-r--r--writerfilter/qa/cppunittests/xxml/makefile.mk75
-rw-r--r--writerfilter/qa/cppunittests/xxml/test.xml2
-rw-r--r--writerfilter/qa/cppunittests/xxml/testXXML.cxx184
-rw-r--r--writerfilter/qa/documents/Bookmark1.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/Bookmark1.docxbin0 -> 10729 bytes
-rw-r--r--writerfilter/qa/documents/CellAlignment.docbin0 -> 26624 bytes
-rw-r--r--writerfilter/qa/documents/Footnote.docbin0 -> 24064 bytes
-rw-r--r--writerfilter/qa/documents/Footnote.docxbin0 -> 11742 bytes
-rw-r--r--writerfilter/qa/documents/HeaderFooter.docbin0 -> 23040 bytes
-rw-r--r--writerfilter/qa/documents/HeaderFooter.docxbin0 -> 12913 bytes
-rw-r--r--writerfilter/qa/documents/IndentedTable.docbin0 -> 27136 bytes
-rw-r--r--writerfilter/qa/documents/IndentedTable1.docxbin0 -> 10667 bytes
-rw-r--r--writerfilter/qa/documents/MergedTable.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/MergedTable.docxbin0 -> 10530 bytes
-rw-r--r--writerfilter/qa/documents/MergedTable_3_3.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/MergedTable_3_3.docxbin0 -> 10431 bytes
-rw-r--r--writerfilter/qa/documents/MultiMergedTable.docxbin0 -> 10641 bytes
-rw-r--r--writerfilter/qa/documents/MultiWrapping1.docxbin0 -> 21123 bytes
-rw-r--r--writerfilter/qa/documents/Paragraph with footnote.docbin0 -> 24064 bytes
-rw-r--r--writerfilter/qa/documents/Paragraph with footnote.docxbin0 -> 13217 bytes
-rw-r--r--writerfilter/qa/documents/Picture1.docxbin0 -> 82050 bytes
-rw-r--r--writerfilter/qa/documents/RedlineTest.docxbin0 -> 10322 bytes
-rw-r--r--writerfilter/qa/documents/RowHeight.docbin0 -> 27648 bytes
-rw-r--r--writerfilter/qa/documents/RowHeight.docxbin0 -> 10504 bytes
-rw-r--r--writerfilter/qa/documents/StandardFontAlbertus.docbin0 -> 24064 bytes
-rw-r--r--writerfilter/qa/documents/Table5CellBorders.docbin0 -> 24064 bytes
-rw-r--r--writerfilter/qa/documents/Table5CellBorders.docxbin0 -> 10420 bytes
-rw-r--r--writerfilter/qa/documents/TableDifferentColumns.docbin0 -> 24064 bytes
-rw-r--r--writerfilter/qa/documents/TableDifferentColumns.docxbin0 -> 10440 bytes
-rw-r--r--writerfilter/qa/documents/TablePreferredWidth.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/TablePreferredWidth.docxbin0 -> 10393 bytes
-rw-r--r--writerfilter/qa/documents/TableRowProperties.docbin0 -> 25600 bytes
-rw-r--r--writerfilter/qa/documents/TableRowProperties.docxbin0 -> 10622 bytes
-rw-r--r--writerfilter/qa/documents/VertAlign1.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/WordOLE.docxbin0 -> 17324 bytes
-rw-r--r--writerfilter/qa/documents/align1.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/bookmark2.docbin0 -> 24576 bytes
-rw-r--r--writerfilter/qa/documents/docx/numbering/num-1.docxbin0 -> 11288 bytes
-rw-r--r--writerfilter/qa/documents/docx/pictures/Word DocumentOffice 2007 Format Sample6.docxbin0 -> 302738 bytes
-rw-r--r--writerfilter/qa/documents/docx/pictures/i97645 New example.docxbin0 -> 102969 bytes
-rw-r--r--writerfilter/qa/documents/docx/pictures/test-image.docxbin0 -> 24026 bytes
-rw-r--r--writerfilter/qa/documents/docx/pictures/test-image1.docxbin0 -> 61174 bytes
-rw-r--r--writerfilter/qa/documents/docx/pictures/test.docxbin0 -> 22007 bytes
-rw-r--r--writerfilter/qa/documents/docx/redlines/test-review-brk.docxbin0 -> 10621 bytes
-rw-r--r--writerfilter/qa/documents/docx/redlines/test-review-para.docxbin0 -> 10682 bytes
-rw-r--r--writerfilter/qa/documents/docx/redlines/test-review-stack.docxbin0 -> 10598 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/Table in B2.docxbin0 -> 10353 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/nested-tables.docxbin0 -> 11079 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/nested-tables2.docxbin0 -> 10521 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/nested-tables3.docxbin0 -> 11482 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/nested-tables4.docxbin0 -> 13956 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/nested-tables5.docxbin0 -> 10761 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/parentinvguid.docxbin0 -> 139481 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/table in A1.docxbin0 -> 10340 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/table-styles.docxbin0 -> 13859 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/test-grid.docxbin0 -> 10978 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/test-paras.docxbin0 -> 13586 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/test-simple.docxbin0 -> 10527 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/two-tables.docxbin0 -> 10619 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/updatejpegprocessing.docxbin0 -> 24439 bytes
-rw-r--r--writerfilter/qa/documents/docx/tables/~$sted-tables3.docxbin0 -> 162 bytes
-rw-r--r--writerfilter/qa/documents/docx/test-page-format.docxbin0 -> 20846 bytes
-rwxr-xr-xwriterfilter/qa/documents/fields.docbin0 -> 34816 bytes
-rwxr-xr-xwriterfilter/qa/documents/fields.docx1
-rw-r--r--writerfilter/qa/documents/multimerge2.docx2
-rw-r--r--writerfilter/qa/documents/runProperties.docbin0 -> 25600 bytes
-rwxr-xr-xwriterfilter/qa/documents/runProperties.docxbin0 -> 11239 bytes
-rw-r--r--writerfilter/qa/documents/table_4_4.docbin0 -> 25600 bytes
-rw-r--r--writerfilter/qa/documents/table_4_4.docxbin0 -> 11131 bytes
-rw-r--r--writerfilter/qa/documents/table_style.docxbin0 -> 12649 bytes
-rw-r--r--writerfilter/source/dmapper/BorderHandler.cxx189
-rw-r--r--writerfilter/source/dmapper/BorderHandler.hxx81
-rw-r--r--writerfilter/source/dmapper/CellColorHandler.cxx237
-rw-r--r--writerfilter/source/dmapper/CellColorHandler.hxx64
-rw-r--r--writerfilter/source/dmapper/CellMarginHandler.cxx122
-rw-r--r--writerfilter/source/dmapper/CellMarginHandler.hxx69
-rw-r--r--writerfilter/source/dmapper/ConversionHelper.cxx691
-rw-r--r--writerfilter/source/dmapper/ConversionHelper.hxx64
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx4885
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.cxx833
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableHandler.hxx103
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableManager.cxx527
-rw-r--r--writerfilter/source/dmapper/DomainMapperTableManager.hxx123
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.cxx3773
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx603
-rw-r--r--writerfilter/source/dmapper/FFData.xml58
-rw-r--r--writerfilter/source/dmapper/FFDataHandler.cxx469
-rw-r--r--writerfilter/source/dmapper/FFDataHandler.hxx163
-rw-r--r--writerfilter/source/dmapper/FieldTypes.hxx299
-rw-r--r--writerfilter/source/dmapper/FontTable.cxx678
-rw-r--r--writerfilter/source/dmapper/FontTable.hxx108
-rw-r--r--writerfilter/source/dmapper/FormControlHelper.cxx309
-rw-r--r--writerfilter/source/dmapper/FormControlHelper.hxx64
-rw-r--r--writerfilter/source/dmapper/GraphicHelpers.cxx233
-rw-r--r--writerfilter/source/dmapper/GraphicHelpers.hxx50
-rw-r--r--writerfilter/source/dmapper/GraphicImport.cxx1859
-rw-r--r--writerfilter/source/dmapper/GraphicImport.hxx132
-rw-r--r--writerfilter/source/dmapper/MeasureHandler.cxx134
-rw-r--r--writerfilter/source/dmapper/MeasureHandler.hxx66
-rw-r--r--writerfilter/source/dmapper/ModelEventListener.cxx96
-rw-r--r--writerfilter/source/dmapper/ModelEventListener.hxx51
-rw-r--r--writerfilter/source/dmapper/NumberingManager.cxx1047
-rw-r--r--writerfilter/source/dmapper/NumberingManager.hxx252
-rw-r--r--writerfilter/source/dmapper/OLEHandler.cxx249
-rw-r--r--writerfilter/source/dmapper/OLEHandler.hxx108
-rw-r--r--writerfilter/source/dmapper/PageBordersHandler.cxx124
-rw-r--r--writerfilter/source/dmapper/PageBordersHandler.hxx57
-rw-r--r--writerfilter/source/dmapper/PropertyIds.cxx349
-rw-r--r--writerfilter/source/dmapper/PropertyIds.hxx303
-rw-r--r--writerfilter/source/dmapper/PropertyMap.cxx1269
-rw-r--r--writerfilter/source/dmapper/PropertyMap.hxx556
-rw-r--r--writerfilter/source/dmapper/PropertyMapHelper.cxx129
-rw-r--r--writerfilter/source/dmapper/PropertyMapHelper.hxx48
-rw-r--r--writerfilter/source/dmapper/SectionColumnHandler.cxx121
-rw-r--r--writerfilter/source/dmapper/SectionColumnHandler.hxx76
-rw-r--r--writerfilter/source/dmapper/SettingsTable.cxx258
-rw-r--r--writerfilter/source/dmapper/SettingsTable.hxx83
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.cxx1360
-rw-r--r--writerfilter/source/dmapper/StyleSheetTable.hxx158
-rw-r--r--writerfilter/source/dmapper/TDefTableHandler.cxx326
-rw-r--r--writerfilter/source/dmapper/TDefTableHandler.hxx87
-rw-r--r--writerfilter/source/dmapper/TablePropertiesHandler.cxx245
-rw-r--r--writerfilter/source/dmapper/TablePropertiesHandler.hxx83
-rw-r--r--writerfilter/source/dmapper/TblStylePrHandler.cxx90
-rw-r--r--writerfilter/source/dmapper/TblStylePrHandler.hxx64
-rw-r--r--writerfilter/source/dmapper/ThemeTable.cxx225
-rw-r--r--writerfilter/source/dmapper/ThemeTable.hxx63
-rw-r--r--writerfilter/source/dmapper/WrapPolygonHandler.cxx216
-rw-r--r--writerfilter/source/dmapper/WrapPolygonHandler.hxx91
-rw-r--r--writerfilter/source/dmapper/dmapperLoggers.cxx39
-rw-r--r--writerfilter/source/dmapper/dmapperLoggers.hxx42
-rw-r--r--writerfilter/source/dmapper/genclass.xsl707
-rw-r--r--writerfilter/source/dmapper/makefile.mk78
-rw-r--r--writerfilter/source/doctok/Dff.cxx518
-rw-r--r--writerfilter/source/doctok/Dff.hxx153
-rw-r--r--writerfilter/source/doctok/DffImpl.cxx518
-rw-r--r--writerfilter/source/doctok/PLCF.hxx195
-rw-r--r--writerfilter/source/doctok/WW8Annotation.cxx37
-rw-r--r--writerfilter/source/doctok/WW8BinTable.hxx88
-rw-r--r--writerfilter/source/doctok/WW8BinTableImpl.cxx106
-rw-r--r--writerfilter/source/doctok/WW8BinTableImpl.hxx98
-rw-r--r--writerfilter/source/doctok/WW8Clx.cxx84
-rw-r--r--writerfilter/source/doctok/WW8Clx.hxx93
-rw-r--r--writerfilter/source/doctok/WW8CpAndFc.cxx130
-rw-r--r--writerfilter/source/doctok/WW8CpAndFc.hxx360
-rw-r--r--writerfilter/source/doctok/WW8DocumentImpl.cxx2366
-rw-r--r--writerfilter/source/doctok/WW8DocumentImpl.hxx848
-rw-r--r--writerfilter/source/doctok/WW8FKP.hxx133
-rw-r--r--writerfilter/source/doctok/WW8FKPImpl.cxx240
-rw-r--r--writerfilter/source/doctok/WW8FKPImpl.hxx214
-rw-r--r--writerfilter/source/doctok/WW8FontTable.cxx113
-rw-r--r--writerfilter/source/doctok/WW8LFOTable.cxx128
-rw-r--r--writerfilter/source/doctok/WW8ListTable.cxx150
-rw-r--r--writerfilter/source/doctok/WW8OutputWithDepth.cxx49
-rw-r--r--writerfilter/source/doctok/WW8OutputWithDepth.hxx53
-rw-r--r--writerfilter/source/doctok/WW8Picture.cxx208
-rw-r--r--writerfilter/source/doctok/WW8PieceTable.hxx175
-rw-r--r--writerfilter/source/doctok/WW8PieceTableImpl.cxx299
-rw-r--r--writerfilter/source/doctok/WW8PieceTableImpl.hxx75
-rw-r--r--writerfilter/source/doctok/WW8PropertySetImpl.cxx432
-rw-r--r--writerfilter/source/doctok/WW8PropertySetImpl.hxx145
-rw-r--r--writerfilter/source/doctok/WW8ResourceModelImpl.cxx500
-rw-r--r--writerfilter/source/doctok/WW8ResourceModelImpl.hxx318
-rw-r--r--writerfilter/source/doctok/WW8StreamImpl.cxx207
-rw-r--r--writerfilter/source/doctok/WW8StreamImpl.hxx65
-rw-r--r--writerfilter/source/doctok/WW8StructBase.cxx199
-rw-r--r--writerfilter/source/doctok/WW8StructBase.hxx316
-rw-r--r--writerfilter/source/doctok/WW8Sttbf.cxx168
-rw-r--r--writerfilter/source/doctok/WW8Sttbf.hxx132
-rw-r--r--writerfilter/source/doctok/WW8StyleSheet.cxx206
-rw-r--r--writerfilter/source/doctok/WW8Table.cxx204
-rw-r--r--writerfilter/source/doctok/WW8Text.cxx76
-rw-r--r--writerfilter/source/doctok/WW8inc.xsl106
-rw-r--r--writerfilter/source/doctok/WW8sprms.xsl66
-rw-r--r--writerfilter/source/doctok/WW8xmi.xsl184
-rw-r--r--writerfilter/source/doctok/XNoteHelper.hxx143
-rw-r--r--writerfilter/source/doctok/XNoteHelperImpl.hxx168
-rw-r--r--writerfilter/source/doctok/analyzer.xsl39
-rwxr-xr-xwriterfilter/source/doctok/cleanupresources5
-rw-r--r--writerfilter/source/doctok/compactxmi.xsl262
-rw-r--r--writerfilter/source/doctok/doctokLoggers.hxx42
-rw-r--r--writerfilter/source/doctok/dopbase.xml91
-rw-r--r--writerfilter/source/doctok/escher.html207
-rw-r--r--writerfilter/source/doctok/escherdoc.xsl145
-rw-r--r--writerfilter/source/doctok/genqnametostr33
-rw-r--r--writerfilter/source/doctok/makefile.mk155
-rw-r--r--writerfilter/source/doctok/qnametostr.xsl41
-rw-r--r--writerfilter/source/doctok/qnametostrfooter2
-rw-r--r--writerfilter/source/doctok/qnametostrheader36
-rwxr-xr-xwriterfilter/source/doctok/replacesprmids517
-rw-r--r--writerfilter/source/doctok/resourceidmapper.xsl125
-rw-r--r--writerfilter/source/doctok/resourceidmapperback.xsl125
-rw-r--r--writerfilter/source/doctok/resourceids.xsl205
-rw-r--r--writerfilter/source/doctok/resources.xmi63712
-rw-r--r--writerfilter/source/doctok/resources.xsl917
-rw-r--r--writerfilter/source/doctok/resourcesimpl.xsl855
-rw-r--r--writerfilter/source/doctok/resourcetools.xsl566
-rw-r--r--writerfilter/source/doctok/sprmcodetostr.xsl39
-rw-r--r--writerfilter/source/doctok/sprmids.xsl82
-rw-r--r--writerfilter/source/doctok/tidyxmi.xsl120
-rw-r--r--writerfilter/source/doctok/xmigen.el126
-rw-r--r--writerfilter/source/doctok/xmigen.xsl577
-rw-r--r--writerfilter/source/doctok/xmistat.xsl37
-rwxr-xr-xwriterfilter/source/doctok/xmitocpp34
-rw-r--r--writerfilter/source/filter/ImportFilter.cxx249
-rw-r--r--writerfilter/source/filter/RtfFilter.cxx146
-rw-r--r--writerfilter/source/filter/RtfFilter.hxx102
-rw-r--r--writerfilter/source/filter/WriterFilter.cxx76
-rw-r--r--writerfilter/source/filter/WriterFilter.hxx104
-rw-r--r--writerfilter/source/filter/WriterFilterDetection.cxx200
-rw-r--r--writerfilter/source/filter/WriterFilterDetection.hxx76
-rw-r--r--writerfilter/source/filter/makefile.mk52
-rw-r--r--writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/wordnetaux.xsdbin0 -> 48598 bytes
-rw-r--r--writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/xsdlib.xsdbin0 -> 7918 bytes
-rw-r--r--writerfilter/source/odiapi/qname/resource/rdfxml.rng453
-rw-r--r--writerfilter/source/odiapi/qname/resource/rng.rng331
-rw-r--r--writerfilter/source/odiapi/qname/resource/rtf.rtfs1385
-rw-r--r--writerfilter/source/ooxml/Handler.cxx348
-rw-r--r--writerfilter/source/ooxml/Handler.hxx145
-rw-r--r--writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx86
-rw-r--r--writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx55
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.cxx410
-rw-r--r--writerfilter/source/ooxml/OOXMLDocumentImpl.hxx116
-rw-r--r--writerfilter/source/ooxml/OOXMLFactory.cxx366
-rw-r--r--writerfilter/source/ooxml/OOXMLFactory.hxx179
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.cxx2319
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.hxx639
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx230
-rw-r--r--writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx117
-rw-r--r--writerfilter/source/ooxml/OOXMLFastHelper.hxx254
-rw-r--r--writerfilter/source/ooxml/OOXMLFastTokenHandler.cxx119
-rw-r--r--writerfilter/source/ooxml/OOXMLFastTokenHandler.hxx65
-rw-r--r--writerfilter/source/ooxml/OOXMLParserState.cxx330
-rw-r--r--writerfilter/source/ooxml/OOXMLParserState.hxx123
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySet.hxx82
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx797
-rw-r--r--writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx289
-rw-r--r--writerfilter/source/ooxml/OOXMLStreamImpl.cxx317
-rw-r--r--writerfilter/source/ooxml/OOXMLStreamImpl.hxx91
-rw-r--r--writerfilter/source/ooxml/README.efforts131
-rw-r--r--writerfilter/source/ooxml/RefAndPointer.hxx119
-rw-r--r--writerfilter/source/ooxml/analyzemodel.xsl104
-rw-r--r--writerfilter/source/ooxml/analyzestage2.xsl32
-rw-r--r--writerfilter/source/ooxml/analyzestage3.xsl40
-rw-r--r--writerfilter/source/ooxml/attrsprm.xsl142
-rw-r--r--writerfilter/source/ooxml/checkmodel.xsl167
-rw-r--r--writerfilter/source/ooxml/dummyannotate.xsl845
-rw-r--r--writerfilter/source/ooxml/effort.xsl46
-rwxr-xr-xwriterfilter/source/ooxml/efforts.sh3
-rw-r--r--writerfilter/source/ooxml/factory.xsl89
-rw-r--r--writerfilter/source/ooxml/factory_ns.xsl164
-rw-r--r--writerfilter/source/ooxml/factory_values.xsl100
-rw-r--r--writerfilter/source/ooxml/factoryimpl.xsl392
-rw-r--r--writerfilter/source/ooxml/factoryimpl_ns.xsl945
-rw-r--r--writerfilter/source/ooxml/factoryimpl_values.xsl98
-rw-r--r--writerfilter/source/ooxml/factoryinc.xsl112
-rw-r--r--writerfilter/source/ooxml/factorytools.xsl345
-rw-r--r--writerfilter/source/ooxml/fasttokens.xsl113
-rw-r--r--writerfilter/source/ooxml/gperffasttokenhandler.xsl96
-rw-r--r--writerfilter/source/ooxml/makefile.mk256
-rw-r--r--writerfilter/source/ooxml/model.xml23471
-rwxr-xr-xwriterfilter/source/ooxml/modelcleanup3
-rw-r--r--writerfilter/source/ooxml/modelcleanup.xsl304
-rw-r--r--writerfilter/source/ooxml/modelpreprocess.xsl225
-rw-r--r--writerfilter/source/ooxml/namespaceids.xsl100
-rw-r--r--writerfilter/source/ooxml/nostatus.xsl20
-rw-r--r--writerfilter/source/ooxml/ooxmlLoggers.hxx41
-rw-r--r--writerfilter/source/ooxml/qnametostr.xsl132
-rw-r--r--writerfilter/source/ooxml/resourceids.xsl105
-rwxr-xr-xwriterfilter/source/ooxml/rngtocxx32
-rw-r--r--writerfilter/source/ooxml/status.sh24
-rw-r--r--writerfilter/source/ooxml/todo.xsl29
-rw-r--r--writerfilter/source/ooxml/tokenxmlfooter1
-rw-r--r--writerfilter/source/ooxml/tokenxmlheader1
-rw-r--r--writerfilter/source/resourcemodel/Fraction.cxx150
-rw-r--r--writerfilter/source/resourcemodel/LoggedResources.cxx322
-rw-r--r--writerfilter/source/resourcemodel/Protocol.cxx218
-rw-r--r--writerfilter/source/resourcemodel/ResourceModelHelper.cxx48
-rw-r--r--writerfilter/source/resourcemodel/TagLogger.cxx489
-rw-r--r--writerfilter/source/resourcemodel/WW8Analyzer.cxx216
-rw-r--r--writerfilter/source/resourcemodel/WW8Analyzer.hxx99
-rw-r--r--writerfilter/source/resourcemodel/XPathLogger.cxx90
-rw-r--r--writerfilter/source/resourcemodel/analyzerfooter4
-rw-r--r--writerfilter/source/resourcemodel/analyzerheader36
-rwxr-xr-xwriterfilter/source/resourcemodel/genqnametostr35
-rw-r--r--writerfilter/source/resourcemodel/makefile.mk207
-rw-r--r--writerfilter/source/resourcemodel/namespace_preprocess.pl50
-rw-r--r--writerfilter/source/resourcemodel/qnametostrfooter24
-rw-r--r--writerfilter/source/resourcemodel/qnametostrheader57
-rw-r--r--writerfilter/source/resourcemodel/resourcemodel.cxx563
-rw-r--r--writerfilter/source/resourcemodel/resourcemodel.hxx110
-rwxr-xr-xwriterfilter/source/resourcemodel/setdebugflags3
-rw-r--r--writerfilter/source/resourcemodel/sprmcodetostrfooter1
-rw-r--r--writerfilter/source/resourcemodel/sprmcodetostrheader50
-rw-r--r--writerfilter/source/resourcemodel/util.cxx427
-rw-r--r--writerfilter/source/rtftok/FlexLexer.h149
-rw-r--r--writerfilter/source/rtftok/RTFParseException.cxx33
-rw-r--r--writerfilter/source/rtftok/RTFScanner.lex333
-rw-r--r--writerfilter/source/rtftok/RTFScanner.skl1537
-rw-r--r--writerfilter/source/rtftok/makefile.mk82
-rw-r--r--writerfilter/unocomponent/component.cxx75
-rw-r--r--writerfilter/unocomponent/debugservices/doctok/DocTokAnalyzeService.cxx293
-rw-r--r--writerfilter/unocomponent/debugservices/doctok/DocTokAnalyzeService.hxx70
-rw-r--r--writerfilter/unocomponent/debugservices/doctok/DocTokTestService.cxx149
-rw-r--r--writerfilter/unocomponent/debugservices/doctok/DocTokTestService.hxx70
-rw-r--r--writerfilter/unocomponent/debugservices/doctok/makefile.mk44
-rw-r--r--writerfilter/unocomponent/debugservices/ooxml/OOXMLAnalyzeService.cxx291
-rw-r--r--writerfilter/unocomponent/debugservices/ooxml/OOXMLAnalyzeService.hxx70
-rw-r--r--writerfilter/unocomponent/debugservices/ooxml/OOXMLTestService.cxx182
-rw-r--r--writerfilter/unocomponent/debugservices/ooxml/OOXMLTestService.hxx70
-rw-r--r--writerfilter/unocomponent/debugservices/ooxml/makefile.mk58
-rw-r--r--writerfilter/unocomponent/debugservices/rtftok/ScannerTestService.cxx455
-rw-r--r--writerfilter/unocomponent/debugservices/rtftok/ScannerTestService.hxx70
-rw-r--r--writerfilter/unocomponent/debugservices/rtftok/XMLScanner.cxx333
-rw-r--r--writerfilter/unocomponent/debugservices/rtftok/XMLScanner.hxx70
-rw-r--r--writerfilter/unocomponent/debugservices/rtftok/makefile.mk45
-rw-r--r--writerfilter/unocomponent/exports.dxp2
-rw-r--r--writerfilter/unocomponent/makefile.mk90
-rw-r--r--writerfilter/util/makefile.mk84
-rw-r--r--writerfilter/util/writerfilter.component42
380 files changed, 169379 insertions, 0 deletions
diff --git a/writerfilter/documentation/AddingTable.cxx b/writerfilter/documentation/AddingTable.cxx
new file mode 100644
index 000000000000..faa898a62350
--- /dev/null
+++ b/writerfilter/documentation/AddingTable.cxx
@@ -0,0 +1,56 @@
+void test()
+{
+ portion = appendPortion("text");
+ tableContext = new TableContext();
+ {
+ tableStack.push(tableContext);
+ portion = appendPortion("A1");
+ tableContext.addPortion(portion);
+ tableContext.endCell();
+ portion = appendPortion("B1");
+ tableContext.addPortion(portion);
+ tableContext.endCell();
+ portion = appendPortion("C1");
+ tableContext.addPortion(portion);
+ tableContext.endCell();
+ tableContext.endRow(rowProperties);
+ portion = appendPortion("A2");
+ tableContext.addPortion(portion);
+ tableContext.endCell();
+ tableContext = new TableContext();
+ {
+ tableStack.push(tableContext);
+ portion = appendPortion("B2A1");
+ tableContext.addPortion(portion);
+ tableContext.endCell();
+ portion = appendPortion("B2B1");
+ tableContext.addPortion(portion);
+ tableContext.endCell();
+ tableContext.endRow(rowProperties);
+ portion = appendPortion("B2A2");
+ tableContext.addPortion(portion);
+ tableContext.endCell();
+ portion = appendPortion("B2B2");
+ tableContext.addPortion(portion);
+ tableContext.endCell();
+ tableContext.endRow(rowProperties);
+ }
+ portion = createTable(tableContext);
+ tableContext = tableStack.pop();
+ tableContext.addPortion(portion);
+ portion = appendPortion("B2");
+ tableContext.addPortion(portion);
+ tableContext.endCell();
+ portion = appendPortion("C2");
+ tableContext.addPortion(portion);
+ tableContext.endCell();
+ tableContext.endRow(rowProperties);
+ }
+ portion = createTable(tableContext);
+ portion = appendPortion("text");
+}
+
+/*
+ tableContext.endCell:
+ merge text ranges of portions to one and add this range to ranges of row.
+ */
diff --git a/writerfilter/documentation/KnownIssues.txt b/writerfilter/documentation/KnownIssues.txt
new file mode 100644
index 000000000000..0759b6014a79
--- /dev/null
+++ b/writerfilter/documentation/KnownIssues.txt
@@ -0,0 +1,9 @@
+- foonotes/endnotes: font index cannot be applied to Writer's footnote symbol
+in the footnote area
+- border types: width of border lines are changed to fit Writer's defaults,
+triple borders unsupported
+- there are no unlocked (writeable) sections within a read only document in
+Writer
+- multiple fields are either unsupported or drastically converted (see
+DomainMapper_Impl.cxx)
+- borders cannot be applied to whole document (from sections)
diff --git a/writerfilter/documentation/TODO b/writerfilter/documentation/TODO
new file mode 100644
index 000000000000..2f85ab6a24d2
--- /dev/null
+++ b/writerfilter/documentation/TODO
@@ -0,0 +1,13 @@
+Import
+
+- Change Tracking
+- Tables
+ - attributes
+ - merged cells
+- Shapes
+ - Shapes generated by Word
+ - Shapes generated by PowerPoint and imported via clipboard
+- Pictures
+- OLE objects
+- Sections
+- Fields
diff --git a/writerfilter/documentation/doxygen/Doxyfile b/writerfilter/documentation/doxygen/Doxyfile
new file mode 100644
index 000000000000..8768cad4a20f
--- /dev/null
+++ b/writerfilter/documentation/doxygen/Doxyfile
@@ -0,0 +1,1237 @@
+# Doxyfile 1.4.6
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = writerfilter
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER = $(WORKSTAMP)
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY =
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish,
+# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese,
+# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish,
+# Swedish, and Ukrainian.
+
+OUTPUT_LANGUAGE = English
+
+# This tag can be used to specify the encoding used in the generated output.
+# The encoding is not always determined by the language that is chosen,
+# but also whether or not the output is meant for Windows or non-Windows users.
+# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES
+# forces the Windows encoding (this is the default for the Windows binary),
+# whereas setting the tag to NO uses a Unix-style encoding (the default for
+# all platforms other than Windows).
+
+USE_WINDOWS_ENCODING = NO
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like the Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.
+
+JAVADOC_AUTOBRIEF = YES
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the DETAILS_AT_TOP tag is set to YES then Doxygen
+# will output the detailed description near the top, like JavaDoc.
+# If set to NO, the detailed description appears after the member
+# documentation.
+
+DETAILS_AT_TOP = YES
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for Java.
+# For instance, namespaces will be presented as packages, qualified scopes
+# will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to
+# include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = YES
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = YES
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from the
+# version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = ../../inc ../../source
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
+
+FILE_PATTERNS = *.cxx *.hxx *.java
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+EXCLUDE = CVS
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH = images
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output. If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES (the default)
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = YES
+
+# If the REFERENCES_RELATION tag is set to YES (the default)
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
+# generated containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
+# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
+# probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = NO
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = NO
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader. This is useful
+# if you want to understand what is going on. On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH = $(SOLARINC)
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = YES
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = YES
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
+# generate a call dependency graph for every global function or class method.
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_WIDTH = 512
+
+# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height
+# (in pixels) of the graphs generated by dot. If a graph becomes larger than
+# this value, doxygen will try to truncate the graph, so that it fits within
+# the specified constraint. Beware that most browsers cannot cope with very
+# large images.
+
+MAX_DOT_GRAPH_HEIGHT = 1024
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that a graph may be further truncated if the graph's
+# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH
+# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default),
+# the graph is not depth-constrained.
+
+MAX_DOT_GRAPH_DEPTH = 4
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, which results in a white background.
+# Warning: Depending on the platform used, enabling this option may lead to
+# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
+# read).
+
+DOT_TRANSPARENT = YES
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = YES
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+
+# The SEARCHENGINE tag specifies whether or not a search engine should be
+# used. If set to NO the values of all tags below this one will be ignored.
+
+SEARCHENGINE = NO
diff --git a/writerfilter/documentation/doxygen/images/doctok.png b/writerfilter/documentation/doxygen/images/doctok.png
new file mode 100644
index 000000000000..15adb9670109
--- /dev/null
+++ b/writerfilter/documentation/doxygen/images/doctok.png
Binary files differ
diff --git a/writerfilter/documentation/doxygen/images/ooxmlimportchain.png b/writerfilter/documentation/doxygen/images/ooxmlimportchain.png
new file mode 100644
index 000000000000..509f1cab5b90
--- /dev/null
+++ b/writerfilter/documentation/doxygen/images/ooxmlimportchain.png
Binary files differ
diff --git a/writerfilter/documentation/sprms.txt b/writerfilter/documentation/sprms.txt
new file mode 100644
index 000000000000..ccb50df7cbf6
--- /dev/null
+++ b/writerfilter/documentation/sprms.txt
@@ -0,0 +1,10 @@
+0x2461: extra alignment:
+
+ 4: distributed
+ 8: justify low
+ 5: justify middle
+ 7: justify high
+ 9: Thai Distribute
+
+
+ \ No newline at end of file
diff --git a/writerfilter/documentation/tablesInDoc.txt b/writerfilter/documentation/tablesInDoc.txt
new file mode 100644
index 000000000000..629e68d75590
--- /dev/null
+++ b/writerfilter/documentation/tablesInDoc.txt
@@ -0,0 +1,135 @@
+All paragraphs in tables:
+
+ sprms:
+ 0x2416 (sprmPFInTable) indicates a paragraph is in a table
+ 0x6649 (sprmPTableDepth) demarks the nesting depth of the paragraph
+
+paragraph at nesting depth 1:
+
+ end of cell: 0x7
+ end of row: 0x7 + sprm 0x2417(sprmFTtp)
+
+ the end of a row has its own 0x7
+
+paragraphs at nesting depth > 1;
+
+ end of cell: 0xd + sprm 0x244b(sprmPCell)
+ end of row 0xd + sprm 0x244b(sprmPCell) + sprm 0x244c(sprmPRow)
+
+ the end of a row has its own 0xd
+
+Algorithm to detect table structure:
+
+Datastructures:
+
+RowData<Handle>:
+ int getCellCount()
+ // return number of cells in row
+ Handle getStart(i)
+ // get handle for start of cell i
+ Handle getEnd(i)
+ // get handle for end off cell i
+ Properties getProperties()
+ // return properties of row
+
+TableData<Handle>:
+ void addCell(Handle start, Handle end)
+ // insert cell starting at start and ending at end into the
+ // current row
+ void endRow(properties)
+ // end current row and save properties for that row, begin new row
+ int getRowCount
+ // return number of rows in table
+ RowData<Handle> getRow(i)
+ // get data for row i
+
+prevTableDepth
+ depth in table hierarchy of previous paragraph
+
+curTableDepth
+ depth in table hierarchy of current paragraph
+
+bInCell
+ true if current paragraph is in a cell
+
+bEndCell
+ true if current paragraph if the last paragraph of a cell
+
+bEndRow
+ true if current paragraph is the end of a row
+
+paragraphHandle
+ handle for current paragraph
+
+initial:
+ create stack of TableData<Handle>
+
+final:
+ handle remaining TableData<Handle> on stack
+
+creating StreamHandler:
+ push new TableData<Handle> on stack
+
+destroying StreamHandler:
+ handle TableData<Handle> on top of stack
+ pop TableData<Handle> from stack
+
+StreamHandler::substream:
+ push new TableData<Handle> on stack
+ handle TableData<Handle> on top of stack
+ pop TableData<Handle> from stack
+
+starting paragraph group:
+ paragraphHandle = currentHandle;
+ bInCell = false;
+ bCellEnd = false;
+ bRowEnd = false;
+
+ending paragraph group:
+ difference = curTableDepth - prevTableDepth
+
+ if (difference > 0)
+ push difference new TableData<Handle> onto stack
+ else if (difference < 0)
+ {
+ repeat difference times
+ {
+ handle top of stack
+ pop stack
+ }
+ }
+ precTableDepth = curTableDepth
+
+ if (bInCell)
+ {
+ if (handleStart is null)
+ handleStart = paragraphHandle;
+
+ if (bCellEnd)
+ {
+ stack.top().addCell(handleStart, paragraphHandle);
+ clear handleStart
+ }
+
+ if (bRowEnd)
+ {
+ stack.top().endRow(properties)
+ }
+
+
+in StreamHandler::props:
+ save properties
+
+PropertiesHandler::sprm:
+ sprm 0x6649:
+ save value in curTableDepth
+ sprm 0x2416:
+ bInCell = true
+ sprm 0x244b:
+ bCellEnd = true
+ sprm 0x2417:
+ bRowEnd = true
+
+text:
+ 0x7:
+ bCellEnd = true
diff --git a/writerfilter/inc/WriterFilterDllApi.hxx b/writerfilter/inc/WriterFilterDllApi.hxx
new file mode 100644
index 000000000000..dff806017c8a
--- /dev/null
+++ b/writerfilter/inc/WriterFilterDllApi.hxx
@@ -0,0 +1,40 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WRITERFILTERDLLAPI_H
+#define INCLUDED_WRITERFILTERDLLAPI_H
+
+#include "sal/types.h"
+
+#if defined(WRITERFILTER_DLLIMPLEMENTATION)
+#define WRITERFILTER_DLLPUBLIC SAL_DLLPUBLIC_EXPORT
+#else
+#define WRITERFILTER_DLLPUBLIC SAL_DLLPUBLIC_IMPORT
+#endif
+#define WRITERFILTER_DLLPRIVATE SAL_DLLPRIVATE
+
+#endif /* INCLUDED_WRITERFILTERDLLAPI_H */
diff --git a/writerfilter/inc/dmapper/DomainMapper.hxx b/writerfilter/inc/dmapper/DomainMapper.hxx
new file mode 100644
index 000000000000..d7f6c005a5c4
--- /dev/null
+++ b/writerfilter/inc/dmapper/DomainMapper.hxx
@@ -0,0 +1,156 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_DOMAINMAPPER_HXX
+#define INCLUDED_DOMAINMAPPER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/text/FontEmphasis.hpp>
+#include <com/sun/star/style/TabAlign.hpp>
+
+#include <map>
+#include <vector>
+
+namespace com{ namespace sun {namespace star{
+ namespace beans{
+ struct PropertyValue;
+ }
+ namespace io{
+ class XInputStream;
+ }
+ namespace uno{
+ class XComponentContext;
+ }
+ namespace lang{
+ class XMultiServiceFactory;
+ }
+ namespace text{
+ class XTextRange;
+ }
+}}}
+
+typedef std::vector< com::sun::star::beans::PropertyValue > PropertyValueVector_t;
+
+namespace writerfilter {
+namespace dmapper
+{
+
+class PropertyMap;
+class DomainMapper_Impl;
+class ListsManager;
+class StyleSheetTable;
+
+// different context types require different sprm handling (e.g. names)
+enum SprmType
+{
+ SPRM_DEFAULT,
+ SPRM_LIST
+};
+enum SourceDocumentType
+{
+ DOCUMENT_DOC,
+ DOCUMENT_OOXML,
+ DOCUMENT_RTF
+};
+class WRITERFILTER_DLLPUBLIC DomainMapper : public LoggedProperties, public LoggedTable,
+ public BinaryObj, public LoggedStream
+{
+ DomainMapper_Impl *m_pImpl;
+
+public:
+ DomainMapper(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& xContext,
+ ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > xInputStream,
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > xModel,
+ SourceDocumentType eDocumentType );
+ virtual ~DomainMapper();
+
+ // Stream
+ virtual void markLastParagraphInSection();
+
+ // BinaryObj
+ virtual void data(const sal_uInt8* buf, size_t len,
+ writerfilter::Reference<Properties>::Pointer_t ref);
+
+ void sprmWithProps( Sprm& sprm, ::boost::shared_ptr<PropertyMap> pContext, SprmType = SPRM_DEFAULT );
+
+ void PushStyleSheetProperties( ::boost::shared_ptr<PropertyMap> pStyleProperties, bool bAffectTableMngr = false );
+ void PopStyleSheetProperties( bool bAffectTableMngr = false );
+
+ void PushListProperties( ::boost::shared_ptr<PropertyMap> pListProperties );
+ void PopListProperties();
+
+ bool IsOOXMLImport() const;
+ ::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory > GetTextFactory() const;
+ void AddListIDToLFOTable( sal_Int32 nAbstractNumId );
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > GetCurrentTextRange();
+
+ ::rtl::OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties );
+ boost::shared_ptr< ListsManager > GetListTable( );
+ boost::shared_ptr< StyleSheetTable > GetStyleSheetTable( );
+
+private:
+ // Stream
+ virtual void lcl_startSectionGroup();
+ virtual void lcl_endSectionGroup();
+ virtual void lcl_startParagraphGroup();
+ virtual void lcl_endParagraphGroup();
+ virtual void lcl_startCharacterGroup();
+ virtual void lcl_endCharacterGroup();
+ virtual void lcl_startShape( ::com::sun::star::uno::Reference< com::sun::star::drawing::XShape > xShape );
+ virtual void lcl_endShape( );
+
+ virtual void lcl_text(const sal_uInt8 * data, size_t len);
+ virtual void lcl_utext(const sal_uInt8 * data, size_t len);
+ virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref);
+ virtual void lcl_table(Id name,
+ writerfilter::Reference<Table>::Pointer_t ref);
+ virtual void lcl_substream(Id name,
+ ::writerfilter::Reference<Stream>::Pointer_t ref);
+ virtual void lcl_info(const string & info);
+
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+ // Table
+ virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ void handleUnderlineType(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext);
+ void handleParaJustification(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext, const bool bExchangeLeftRight);
+ bool getColorFromIndex(const sal_Int32 nIndex, sal_Int32 &nColor);
+ sal_Int16 getEmphasisValue(const sal_Int32 nIntValue);
+ 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);
+ sal_Int32 mnBackgroundColor;
+ bool mbIsHighlightSet;
+};
+
+} // namespace dmapper
+} // namespace writerfilter
+#endif //
diff --git a/writerfilter/inc/doctok/WW8Document.hxx b/writerfilter/inc/doctok/WW8Document.hxx
new file mode 100644
index 000000000000..e3915c628761
--- /dev/null
+++ b/writerfilter/inc/doctok/WW8Document.hxx
@@ -0,0 +1,448 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_DOCUMENT_HXX
+#define INCLUDED_WW8_DOCUMENT_HXX
+
+#include <boost/shared_ptr.hpp>
+#include <sal/types.h>
+#include <com/sun/star/uno/Reference.hxx>
+#include <resourcemodel/SubSequence.hxx>
+#include <com/sun/star/io/XInputStream.hpp>
+#ifndef _COM_SUN_STAR_UNO_XCOMPONENTCONTEX_HPP_
+#include <com/sun/star/uno/XComponentContext.hpp>
+#endif
+
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_HXX
+#include <resourcemodel/WW8ResourceModel.hxx>
+#endif
+#include <resourcemodel/OutputWithDepth.hxx>
+
+#include <WriterFilterDllApi.hxx>
+
+namespace writerfilter {
+namespace doctok {
+
+using namespace ::com::sun::star;
+
+/**
+ A stream containing a WW8 document.
+
+ The content of the stream is a sequence of unsigned bytes. The
+ stream consists of substreams that are identified by string
+ identifiers.
+*/
+class WRITERFILTER_DLLPUBLIC WW8Stream
+{
+public:
+ /**
+ Pointer to a WW8Stream.
+ */
+ typedef boost::shared_ptr<WW8Stream> Pointer_t;
+
+ /**
+ Type for the content of the stream
+ */
+ typedef SubSequence<sal_uInt8> Sequence;
+
+ virtual ~WW8Stream();
+
+ /**
+ Returns pointer to a substream.
+
+ @param rSid identifier of substream to return
+
+ @return the substream
+ */
+ virtual Pointer_t getSubStream(const ::rtl::OUString & rSid) = 0;
+
+ /**
+ Return a continious part of the stream.
+
+ @param nOffset offset in the stream where the part starts
+ @param nCount length of the part (number of bytes)
+
+ @return sequence of unsigned bytes
+ */
+ virtual Sequence get(sal_uInt32 nOffset, sal_uInt32 nCount)
+ const = 0;
+
+ // Returns the names of substreams contained in the stream
+ virtual string getSubStreamNames() const = 0;
+
+ virtual uno::Sequence<rtl::OUString> getSubStreamUNames() const = 0;
+
+ /**
+ Dumps content of stream to output.
+
+ @param o the target output
+ */
+ virtual void dump(OutputWithDepth<string> & o) const = 0;
+
+ //virtual bool put(sal_uInt32 nOffset, const Sequence & rSeq) = 0;
+};
+
+/**
+ A property.
+
+*/
+class WRITERFILTER_DLLPUBLIC WW8Property
+{
+public:
+ /**
+ Ponter to a property.
+ */
+ typedef boost::shared_ptr<WW8Property> Pointer_t;
+
+ virtual ~WW8Property();
+
+ virtual sal_uInt32 getId() const = 0;
+ virtual sal_uInt32 getParam() const = 0;
+ virtual WW8Stream::Sequence getParams() const = 0;
+
+ virtual string toString() const = 0;
+
+ /**
+ Dumps this object to an output.
+
+ */
+ virtual void dump(OutputWithDepth<string> & o) const = 0;
+};
+
+/**
+ An iterator for traversal of a set of properties.
+
+ Sample code for use of iterator:
+
+ \code
+ Return_t function(WW8PropertySet::tPointer pSet)
+ {
+ do_something;
+
+ WW8PropertySetIterator::tPointer pIt = pSet->begin();
+ WW8PropertySetIterator::tPointer pItEnd = pSet->end();
+
+ while ((*pIt) != (*pItEnd))
+ {
+ do_something();
+
+ ++(*pIt);
+ }
+
+ do_something;
+ }
+ \endcode
+*/
+class WRITERFILTER_DLLPUBLIC WW8PropertySetIterator
+{
+public:
+ typedef boost::shared_ptr<WW8PropertySetIterator> Pointer_t;
+
+ virtual ~WW8PropertySetIterator();
+
+ /**
+ Advance iterator to the next property.
+ */
+ virtual WW8PropertySetIterator & operator++() = 0;
+
+ /**
+ Returns a pointer to the property the iterator references.
+ */
+ virtual WW8Property::Pointer_t get() const = 0;
+
+ /**
+ Checks if the iterator is equal to another one.
+ */
+ virtual bool equal(const WW8PropertySetIterator & rIt) const = 0;
+
+ /**
+ Returns string representation of iterator.
+ */
+ virtual string toString() const = 0;
+};
+
+/**
+ Checks if two property set iterators are not equal.
+*/
+bool operator != (const WW8PropertySetIterator & rA,
+ const WW8PropertySetIterator & rB);
+
+/**
+ A set of properties.
+*/
+class WRITERFILTER_DLLPUBLIC WW8PropertySet
+{
+public:
+ typedef boost::shared_ptr<WW8PropertySet> Pointer_t;
+
+ virtual ~WW8PropertySet();
+
+ /**
+ Returns iterator to the start of the set.
+ */
+ virtual WW8PropertySetIterator::Pointer_t begin() = 0;
+
+ /**
+ Returns iterator to the end of the set.
+ */
+ virtual WW8PropertySetIterator::Pointer_t end() = 0;
+
+ /**
+ Dumps property set to output stream.
+
+ @param o output stream to dump property set to
+ */
+ virtual void dump(OutputWithDepth<string> & o) const = 0;
+
+ /**
+ Iterate through property set and for each element dump a dot
+ output stream.
+
+ @param o output stream to dump dots to
+ */
+ virtual void dots(ostream & o) = 0;
+
+ virtual bool isPap() const = 0;
+ virtual sal_uInt32 get_istd() const = 0;
+
+ /**
+ Insert another property set into this property set.
+
+ @param pSet the set to insert
+ */
+ virtual void insert(const WW8PropertySet::Pointer_t pSet) = 0;
+};
+
+enum PropertyType {
+ /** Auxiliary type for character positions defined in piece table */
+ PROP_DOC,
+
+ /** properties are section properies */
+ PROP_SEC,
+
+ /** properties are paragraph properties */
+ PROP_PAP,
+
+ /** properties are character properties */
+ PROP_CHP,
+
+ /** a footnote reference */
+ PROP_FOOTNOTE,
+
+ /** an endnote reference */
+ PROP_ENDNOTE,
+
+ /** an annotaion reference */
+ PROP_ANNOTATION,
+
+ /** the start of a bookmark */
+ PROP_BOOKMARKSTART,
+
+ /** the end of a bookmark */
+ PROP_BOOKMARKEND,
+
+ /** a field character (start, separator or end) */
+ PROP_FLD,
+
+ /** a shape character */
+ PROP_SHP,
+
+ /** a break character */
+ PROP_BRK
+};
+
+/**
+ An iterator for traversal of the character positions of a Word
+ document.
+
+ The use of the iterator is analogous to WW8PropertySetIterator.
+*/
+class WRITERFILTER_DLLPUBLIC WW8DocumentIterator
+{
+public:
+ typedef boost::shared_ptr<WW8DocumentIterator> Pointer_t;
+
+ virtual ~WW8DocumentIterator();
+
+ /**
+ Advance iterator to next character position of the document.
+ */
+ virtual WW8DocumentIterator & operator++() = 0;
+
+ /**
+ Recedes iterator to previous character postion of the document.
+ */
+ virtual WW8DocumentIterator & operator--() = 0;
+
+ /**
+ Returns properties set at the character position the iterator
+ points to.
+
+ @return pointer to set of properties
+ */
+ virtual writerfilter::Reference<Properties>::Pointer_t getProperties()
+ const = 0;
+
+ virtual writerfilter::Reference<Stream>::Pointer_t getSubDocument()
+ const = 0;
+
+ /**
+ Returns text run at the character position the iterator points
+ to.
+ */
+ virtual WW8Stream::Sequence getText() = 0;
+
+ /**
+ Return pointer to the shape at character position the iterator
+ is pointing to.
+ */
+ virtual writerfilter::Reference<Properties>::Pointer_t getShape() const = 0;
+
+ /**
+ Checks if the characters of the entity the iterator points to
+ are complex.
+
+ Complex characters in a Word document are byte size
+ characters. Non-complex characters are word size characters.
+
+ @retval true The characters are complex.
+ @retval false The characters are non-complex.
+ */
+ virtual bool isComplex() const = 0;
+
+ /**
+ Returns the property type of the entity the iterator points to.
+ */
+ virtual PropertyType getPropertyType() const = 0;
+
+ /**
+ Checks is the iterator is equal to another one.
+
+ @param rIt iterator to check against
+
+ @retval true the iterators are equal
+ @retval false else
+ */
+ virtual bool equal(const WW8DocumentIterator & rIt) const = 0;
+
+ /**
+ Returns string representation of the iterator.
+ */
+ virtual string toString() const = 0;
+
+ /**
+ Dumps the iterator to an output stream.
+
+ @param o the output stream to dump the iterator to
+ */
+ virtual void dump(ostream & o) const = 0;
+};
+
+/**
+ Checks if two document iterators are equal.
+
+ @param rA first iterator
+ @param rB second iterator
+
+ @retval true the document iterators are equal
+ @retval false else
+ */
+bool operator == (const WW8DocumentIterator & rA,
+ const WW8DocumentIterator & rB);
+
+class WRITERFILTER_DLLPUBLIC SubDocumentId
+{
+public:
+ enum eType { FOOTNOTES, HEADERS, FOOTERS };
+
+private:
+ eType mnType;
+ sal_uInt8 mnIndex;
+
+public:
+ SubDocumentId(eType nType, sal_uInt8 nIndex)
+ : mnType(nType), mnIndex(nIndex)
+ {
+ }
+
+ eType getType() const { return mnType; }
+ sal_uInt8 getIndex() const { return mnIndex; }
+};
+
+/**
+ A Word 8 document.
+*/
+class WRITERFILTER_DLLPUBLIC WW8Document :
+ public writerfilter::Reference<Stream>
+{
+public:
+ typedef boost::shared_ptr<WW8Document> Pointer_t;
+
+ virtual ~WW8Document();
+
+ /**
+ Get a subdocument.
+
+ A subdocument can be
+
+ - a header
+ - a footer
+ - a footnode
+
+ @param nId identifier of the subdocumen
+ */
+ virtual Pointer_t getSubDocument(SubDocumentId nId) = 0;
+
+ /**
+ Returns iterator to beginning of document.
+ */
+ virtual WW8DocumentIterator::Pointer_t begin() = 0;
+
+ /**
+ Returns iterator to end of document.
+ */
+ virtual WW8DocumentIterator::Pointer_t end() = 0;
+};
+
+class WRITERFILTER_DLLPUBLIC WW8DocumentFactory
+{
+public:
+ static WW8Stream::Pointer_t
+ createStream(uno::Reference<uno::XComponentContext> rContext,
+ uno::Reference<io::XInputStream> rStream);
+
+ static WW8Document *
+ createDocument(WW8Stream::Pointer_t rpStream);
+};
+
+void sprmidsToXML(::std::iostream & out);
+
+void doctokidsToXML(::std::iostream & out);
+
+}}
+
+#endif // INCLUDED_WW8_DOCUMENT_HXX
diff --git a/writerfilter/inc/ooxml/OOXMLDocument.hxx b/writerfilter/inc/ooxml/OOXMLDocument.hxx
new file mode 100644
index 000000000000..cb5991c00929
--- /dev/null
+++ b/writerfilter/inc/ooxml/OOXMLDocument.hxx
@@ -0,0 +1,279 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OOXML_DOCUMENT_HXX
+#define INCLUDED_OOXML_DOCUMENT_HXX
+
+#include <sal/types.h>
+#include <com/sun/star/uno/Reference.hxx>
+#include <com/sun/star/io/XInputStream.hpp>
+#ifndef _COM_SUN_STAR_UNO_XCOMPONENTCONTEX_HPP_
+#include <com/sun/star/uno/XComponentContext.hpp>
+#endif
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_HXX
+#include <resourcemodel/WW8ResourceModel.hxx>
+#endif
+#ifndef _COM_SUN_STAR_XML_SAX_XPARSER_HOO_
+#include <com/sun/star/xml/sax/XParser.hpp>
+#endif
+#include <com/sun/star/xml/sax/XFastParser.hpp>
+#include <com/sun/star/xml/sax/XFastTokenHandler.hpp>
+#include <com/sun/star/frame/XModel.hpp>
+#include <com/sun/star/drawing/XDrawPage.hpp>
+
+/**
+ @file OOXMLDocument.hxx
+
+ <h1>Import of OOXML WordprocessingML Documents</h1>
+
+ The following picture shows the classes involved in importing OOXML
+ WordprocessingML documents.
+
+ @image html ooxmlimportchain.png
+
+ The DOCX consists of parts. Each part is an XML document. The
+ OOXMLDocument opens the DOCX and creates a SAX parser for the part
+ containing the main document content. The OOXMLDocument creates a
+ SAX handler, too. This handler is set as the handler for the events
+ created by the parser. Finally the OOXMLDocument initiates the
+ parsing process.
+
+ The SAX handler hosts a stack of contexts. Each context is an
+ instance of a class derived from OOXMLContext. There is a context
+ class for each <define> in the model.xml.
+
+ For a detailed information about how the contexts are handled see
+ the documentation for OOXMLContext.
+
+ The contexts know how to convert an element in OOXML to the
+ intermediate format that the domain mapper understands. They
+ enumerate the according entity in OOXML by sending the according
+ events to the domain mapper.
+
+ The domain mapper knows how to convert the intermediate format to
+ API calls. It takes the events sent by the contexts and uses the
+ core API to insert the according elements to the core.
+ */
+
+namespace writerfilter {
+namespace ooxml
+{
+
+using namespace com::sun::star;
+
+class WRITERFILTER_DLLPUBLIC OOXMLStream
+{
+public:
+ enum StreamType_t { UNKNOWN, DOCUMENT, STYLES, FONTTABLE, NUMBERING,
+ FOOTNOTES, ENDNOTES, COMMENTS, THEME, SETTINGS };
+ typedef boost::shared_ptr<OOXMLStream> Pointer_t;
+
+ virtual ~OOXMLStream() {}
+
+ /**
+ Returns parser for this stream.
+ */
+ virtual uno::Reference<xml::sax::XParser> getParser() = 0;
+
+ /**
+ Returns fast parser for this stream.
+ */
+ virtual uno::Reference<xml::sax::XFastParser> getFastParser() = 0;
+
+ virtual uno::Reference<io::XInputStream> getDocumentStream() = 0;
+
+ virtual uno::Reference<io::XInputStream> getStorageStream() = 0;
+
+ /**
+ Returns component context for this stream.
+ */
+ virtual uno::Reference<uno::XComponentContext> getContext() = 0;
+
+ /**
+ Returns target URL from relationships for a given id.
+
+ @param rId the id to look for
+
+ @return the URL found or an empty string
+ */
+ virtual ::rtl::OUString getTargetForId(const ::rtl::OUString & rId) = 0;
+
+ virtual const ::rtl::OUString & getTarget() const = 0;
+
+ virtual uno::Reference<xml::sax::XFastTokenHandler>
+ getFastTokenHandler(uno::Reference<uno::XComponentContext> rContext) = 0;
+
+};
+
+class WRITERFILTER_DLLPUBLIC OOXMLDocument : public writerfilter::Reference<Stream>
+{
+public:
+ /**
+ Pointer to this stream.
+ */
+ typedef boost::shared_ptr<OOXMLDocument> Pointer_t;
+
+ virtual ~OOXMLDocument() {}
+
+ /**
+ Resolves this document to a stream handler.
+
+ @param rStream stream handler to resolve this document to
+ */
+ virtual void resolve(Stream & rStream) = 0;
+
+ /**
+ Returns string representation of the type of this reference.
+
+ DEBUGGING PURPOSE ONLY.
+ */
+ virtual string getType() const = 0;
+
+ /**
+ Resolves a footnote to a stream handler.
+
+ A footnote is resolved if either the note type or
+ note id matches.
+
+ @param rStream stream handler to resolve to
+ @param rNoteType type of footnote to resolve
+ @param rNoteId id of the footnote to resolve
+ */
+ virtual void resolveFootnote(Stream & rStream,
+ const Id & rNoteType,
+ const rtl::OUString & rNoteId) = 0;
+ /**
+ Resolves an endnote to a stream handler.
+
+ An endnote is resolved if either the note type or
+ note id matches.
+
+ @param rStream stream handler to resolve to
+ @param rNoteType type of footnote to resolve
+ @param rNoteId id of the endnote to resolve
+ */
+ virtual void resolveEndnote(Stream & rStream,
+ const Id & rNoteType,
+ const rtl::OUString & rNoteId) = 0;
+
+ /**
+ Resolves a comment to a stream handler.
+
+ @param rStream stream handler to resolve to
+ @param rComment id of the comment to resolve
+ */
+ virtual void resolveComment(Stream & rStream,
+ const rtl::OUString & rCommentId) = 0;
+
+ /**
+ Resolves a picture to a stream handler.
+
+ @param rStream stream handler to resolve to
+ @param rPictureId id of the picture to resolve
+ */
+ virtual void resolvePicture(Stream & rStream,
+ const rtl::OUString & rPictureId) = 0;
+
+ /**
+ Resolves a header to a stream handler.
+
+ @param rStream stream handler to resolve to
+ @param type type of header to resolve:
+ NS_ooxml::LN_Value_ST_HrdFtr_even header on even page
+ NS_ooxml::LN_Value_ST_HrdFtr_default header on right page
+ NS_ooxml::LN_Value_ST_HrdFtr_first header on first page
+
+ @param rId id of the header
+ */
+ virtual void resolveHeader(Stream & rStream,
+ const sal_Int32 type,
+ const rtl::OUString & rId) = 0;
+
+ /**
+ Resolves a footer to a stream handler.
+
+ @param rStream stream handler to resolve to
+ @param type type of footer to resolve:
+ NS_ooxml::LN_Value_ST_HrdFtr_even header on even page
+ NS_ooxml::LN_Value_ST_HrdFtr_default header on right page
+ NS_ooxml::LN_Value_ST_HrdFtr_first header on first page
+
+ @param rId id of the header
+ */
+ virtual void resolveFooter(Stream & rStream,
+ const sal_Int32 type,
+ const rtl::OUString & rId) = 0;
+
+
+ /**
+ Returns target URL from relationships for a given id.
+
+ @param rId the id to look for
+
+ @return the URL found or an empty string
+ */
+ virtual ::rtl::OUString getTargetForId(const ::rtl::OUString & rId) = 0;
+
+ virtual void setModel(uno::Reference<frame::XModel> xModel) = 0;
+ virtual uno::Reference<frame::XModel> getModel() = 0;
+ virtual void setDrawPage(uno::Reference<drawing::XDrawPage> xDrawPage) = 0;
+ virtual uno::Reference<drawing::XDrawPage> getDrawPage() = 0;
+ virtual uno::Reference<io::XInputStream> getInputStream() = 0;
+ virtual uno::Reference<io::XInputStream> getStorageStream() = 0;
+ virtual uno::Reference<io::XInputStream> getInputStreamForId
+ (const ::rtl::OUString & rId) = 0;
+ virtual void setXNoteId(const rtl::OUString & rId) = 0;
+ virtual const ::rtl::OUString & getXNoteId() const = 0;
+ virtual void setXNoteType(const Id & nId) = 0;
+ virtual const Id & getXNoteType() const = 0;
+ virtual const ::rtl::OUString & getTarget() const = 0;
+};
+
+
+class WRITERFILTER_DLLPUBLIC OOXMLDocumentFactory
+{
+public:
+ static OOXMLStream::Pointer_t
+ createStream(uno::Reference<uno::XComponentContext> rContext,
+ uno::Reference<io::XInputStream> rStream,
+ OOXMLStream::StreamType_t nStreamType = OOXMLStream::DOCUMENT);
+
+ static OOXMLStream::Pointer_t
+ createStream(OOXMLStream::Pointer_t pStream,
+ OOXMLStream::StreamType_t nStreamType = OOXMLStream::DOCUMENT);
+
+ static OOXMLStream::Pointer_t
+ createStream(OOXMLStream::Pointer_t pStream, const rtl::OUString & rId);
+
+ static OOXMLDocument *
+ createDocument(OOXMLStream::Pointer_t pStream);
+
+};
+
+void ooxmlidsToXML(::std::iostream & out);
+
+}}
+#endif // INCLUDED_OOXML_DOCUMENT_HXX
diff --git a/writerfilter/inc/resourcemodel/Fraction.hxx b/writerfilter/inc/resourcemodel/Fraction.hxx
new file mode 100644
index 000000000000..a038d25c98f1
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/Fraction.hxx
@@ -0,0 +1,60 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_FRACTION_HXX
+#define INCLUDED_FRACTION_HXX
+
+#include <sal/types.h>
+
+namespace writerfilter {
+namespace resourcemodel {
+
+class Fraction
+{
+public:
+ explicit Fraction(sal_Int32 nNumerator, sal_Int32 nDenominator = 1);
+ explicit Fraction(const Fraction & a, const Fraction & b);
+ virtual ~Fraction();
+
+ void init(sal_Int32 nNumerator, sal_Int32 nDenominator);
+ void assign(const Fraction & rFraction);
+
+ Fraction inverse() const;
+
+ Fraction operator=(const Fraction & rFraction);
+ Fraction operator+(const Fraction & rFraction) const;
+ Fraction operator-(const Fraction & rFraction) const;
+ Fraction operator*(const Fraction & rFraction) const;
+ Fraction operator/(const Fraction & rFraction) const;
+ operator sal_Int32() const;
+ operator float() const;
+
+private:
+ sal_Int32 mnNumerator;
+ sal_Int32 mnDenominator;
+};
+}}
+#endif // INCLUDED_FRACTION_HXX
diff --git a/writerfilter/inc/resourcemodel/LoggedResources.hxx b/writerfilter/inc/resourcemodel/LoggedResources.hxx
new file mode 100644
index 000000000000..be30c32fd85e
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/LoggedResources.hxx
@@ -0,0 +1,128 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_LOGGED_RESOURCES_HXX
+#define INCLUDED_LOGGED_RESOURCES_HXX
+
+#include "WW8ResourceModel.hxx"
+#include "TagLogger.hxx"
+
+namespace writerfilter
+{
+
+class LoggedResourcesHelper
+{
+public:
+ explicit LoggedResourcesHelper(TagLogger::Pointer_t pLogger, const string & sPrefix);
+ virtual ~LoggedResourcesHelper();
+
+ void startElement(const string & sElement);
+ void endElement(const string & sElement);
+ void chars(const ::rtl::OUString & rChars);
+ void chars(const string & rChars);
+ void attribute(const string & rName, const string & rValue);
+ void attribute(const string & rName, sal_uInt32 nValue);
+
+ void setPrefix(const string & rPrefix);
+
+private:
+ TagLogger::Pointer_t mpLogger;
+ string msPrefix;
+};
+
+class LoggedStream : public Stream
+{
+public:
+ explicit LoggedStream(TagLogger::Pointer_t pLogger, const string & sPrefix);
+ virtual ~LoggedStream();
+
+ void startSectionGroup();
+ void endSectionGroup();
+ void startParagraphGroup();
+ void endParagraphGroup();
+ void startCharacterGroup();
+ void endCharacterGroup();
+ void startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+ void endShape();
+ void text(const sal_uInt8 * data, size_t len);
+ void utext(const sal_uInt8 * data, size_t len);
+ void props(writerfilter::Reference<Properties>::Pointer_t ref);
+ void table(Id name, writerfilter::Reference<Table>::Pointer_t ref);
+ void substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref);
+ void info(const string & info);
+
+protected:
+ virtual void lcl_startSectionGroup() = 0;
+ virtual void lcl_endSectionGroup() = 0;
+ virtual void lcl_startParagraphGroup() = 0;
+ virtual void lcl_endParagraphGroup() = 0;
+ virtual void lcl_startCharacterGroup() = 0;
+ virtual void lcl_endCharacterGroup() = 0;
+ virtual void lcl_startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape ) = 0;
+ virtual void lcl_endShape() = 0;
+ virtual void lcl_text(const sal_uInt8 * data, size_t len) = 0;
+ virtual void lcl_utext(const sal_uInt8 * data, size_t len) = 0;
+ virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref) = 0;
+ virtual void lcl_table(Id name, writerfilter::Reference<Table>::Pointer_t ref) = 0;
+ virtual void lcl_substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref) = 0;
+ virtual void lcl_info(const string & info) = 0;
+
+ LoggedResourcesHelper mHelper;
+};
+
+class LoggedProperties : public Properties
+{
+public:
+ explicit LoggedProperties(TagLogger::Pointer_t pLogger, const string & sPrefix);
+ virtual ~LoggedProperties();
+
+ void attribute(Id name, Value & val);
+ void sprm(Sprm & sprm);
+
+protected:
+ virtual void lcl_attribute(Id name, Value & val) = 0;
+ virtual void lcl_sprm(Sprm & sprm) = 0;
+
+ LoggedResourcesHelper mHelper;
+};
+
+class LoggedTable : public Table
+{
+public:
+ explicit LoggedTable(TagLogger::Pointer_t pLogger, const string & sPrefix);
+ virtual ~LoggedTable();
+
+ void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+protected:
+ virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref) = 0;
+
+ LoggedResourcesHelper mHelper;
+};
+
+}
+#endif // INCLUDED_LOGGED_RESOURCES_HXX
diff --git a/writerfilter/inc/resourcemodel/OutputWithDepth.hxx b/writerfilter/inc/resourcemodel/OutputWithDepth.hxx
new file mode 100644
index 000000000000..b6c4d511ab7c
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/OutputWithDepth.hxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_OUTPUT_WITH_DEPTH
+#define INCLUDED_OUTPUT_WITH_DEPTH
+
+#include <vector>
+#include <iostream>
+
+namespace writerfilter
+{
+
+using namespace ::std;
+
+template <typename T>
+class OutputWithDepth
+{
+ typedef ::std::vector<T> Group_t;
+ Group_t mGroup;
+
+ unsigned int mnCurrentDepth;
+ unsigned int mnGroupDepth;
+
+ T mOpenTag;
+ T mCloseTag;
+
+protected:
+ virtual void output(const T & aItem) const = 0;
+ void outputGroup();
+ void finalize();
+
+public:
+ OutputWithDepth(const T & aOpenTag, const T & aCloseTag);
+ virtual ~OutputWithDepth();
+
+ void openGroup();
+ void closeGroup();
+ void addItem(const T & aItem);
+ void setDepth(unsigned int nDepth);
+};
+
+template <typename T>
+OutputWithDepth<T>::OutputWithDepth(const T & aOpenTag, const T & aEndTag)
+: mOpenTag(aOpenTag), mCloseTag(aEndTag)
+{
+}
+
+template <typename T>
+OutputWithDepth<T>::~OutputWithDepth()
+{
+}
+
+template <typename T>
+void OutputWithDepth<T>::finalize()
+{
+ outputGroup();
+}
+
+template <typename T>
+void OutputWithDepth<T>::openGroup()
+{
+ outputGroup();
+ mnGroupDepth = 0;
+}
+
+template <typename T>
+void OutputWithDepth<T>::closeGroup()
+{
+ if (mnGroupDepth > mnCurrentDepth)
+ for (unsigned int i = 0; i < mnGroupDepth - mnCurrentDepth; ++i)
+ output(mOpenTag);
+ else if (mnGroupDepth < mnCurrentDepth)
+ for (unsigned int i = 0; i < mnCurrentDepth - mnGroupDepth; ++i)
+ output(mCloseTag);
+
+ outputGroup();
+
+ mnCurrentDepth = mnGroupDepth;
+}
+
+template <typename T>
+void OutputWithDepth<T>::addItem(const T & aItem)
+{
+ mGroup.push_back(aItem);
+}
+
+template <typename T>
+void OutputWithDepth<T>::setDepth(unsigned int nDepth)
+{
+ mnGroupDepth = nDepth;
+}
+
+template <typename T>
+void OutputWithDepth<T>::outputGroup()
+{
+ typename Group_t::iterator aItEnd = mGroup.end();
+
+ for (typename Group_t::iterator aIt = mGroup.begin(); aIt != aItEnd; aIt++)
+ {
+ output(*aIt);
+ }
+
+ mGroup.clear();
+}
+}
+#endif // INCLUDED_OUTPUT_WITH_DEPTH
diff --git a/writerfilter/inc/resourcemodel/Protocol.hxx b/writerfilter/inc/resourcemodel/Protocol.hxx
new file mode 100644
index 000000000000..2f4c9f6261ba
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/Protocol.hxx
@@ -0,0 +1,102 @@
+/*************************************************************************
+ *
+ * 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: $
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDE_WRITERFILTER_PROTOCOL_HXX
+#define INCLUDE_WRITERFILTER_PROTOCOL_HXX
+
+#ifdef DEBUG
+
+#include <boost/shared_ptr.hpp>
+#include "WW8ResourceModel.hxx"
+#include "TagLogger.hxx"
+namespace writerfilter
+{
+
+class StreamProtocol : public Stream
+{
+ Stream * m_pStream;
+ TagLogger::Pointer_t m_pTagLogger;
+
+public:
+ typedef boost::shared_ptr<StreamProtocol> Pointer_t;
+
+ StreamProtocol(Stream * pStream, TagLogger::Pointer_t pTagLogger);
+ virtual ~StreamProtocol();
+
+ virtual void startSectionGroup();
+ virtual void endSectionGroup();
+ virtual void startParagraphGroup();
+ virtual void endParagraphGroup();
+ virtual void startCharacterGroup();
+ virtual void endCharacterGroup();
+ virtual void text(const sal_uInt8 * data, size_t len);
+ virtual void utext(const sal_uInt8 * data, size_t len);
+ virtual void props(writerfilter::Reference<Properties>::Pointer_t ref);
+ virtual void table(Id name,
+ writerfilter::Reference<Table>::Pointer_t ref);
+ virtual void substream(Id name,
+ writerfilter::Reference<Stream>::Pointer_t ref);
+ virtual void info(const string & rInfo);
+ virtual void startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+ virtual void endShape();
+};
+
+class PropertiesProtocol : public Properties
+{
+ Properties * m_pProperties;
+ TagLogger::Pointer_t m_pTagLogger;
+
+public:
+ typedef boost::shared_ptr<PropertiesProtocol> Pointer_t;
+
+ PropertiesProtocol(Properties * pProperties, TagLogger::Pointer_t pTagLogger);
+ virtual ~PropertiesProtocol();
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class TableProtocol : public Table
+{
+ Table * m_pTable;
+ TagLogger::Pointer_t m_pTagLogger;
+
+public:
+ typedef boost::shared_ptr<TableProtocol> Pointer_t;
+
+ TableProtocol(Table * pTable, TagLogger::Pointer_t pTagLogger);
+ virtual ~TableProtocol();
+
+ virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+};
+
+}
+
+#endif // DEBUG
+#endif // INCLUDE_WRITERFILTER_PROTOCOL_HXX
diff --git a/writerfilter/inc/resourcemodel/QNameToString.hxx b/writerfilter/inc/resourcemodel/QNameToString.hxx
new file mode 100644
index 000000000000..2c562b74762d
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/QNameToString.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_QNAME_TO_STRING_HXX
+#define INCLUDED_QNAME_TO_STRING_HXX
+
+#include <boost/shared_ptr.hpp>
+#include <map>
+#include <string>
+#include <iostream>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <com/sun/star/beans/XPropertySet.hpp>
+
+namespace writerfilter
+{
+using namespace ::std;
+
+class WRITERFILTER_DLLPUBLIC QNameToString
+{
+ typedef boost::shared_ptr<QNameToString> Pointer_t;
+ typedef map < Id, string > Map;
+
+ static Pointer_t pInstance;
+
+ void init_doctok();
+ void init_ooxml();
+
+ Map mMap;
+
+protected:
+ /**
+ Generated.
+ */
+ QNameToString();
+
+public:
+ static Pointer_t Instance();
+
+ string operator()(Id qName);
+};
+
+class WRITERFILTER_DLLPUBLIC SprmIdToString
+{
+ typedef boost::shared_ptr<SprmIdToString> Pointer_t;
+
+ static Pointer_t pInstance;
+
+ map<sal_uInt32, string> mMap;
+
+protected:
+ /**
+ Generated automatically.
+ */
+ SprmIdToString();
+
+public:
+ static Pointer_t Instance();
+ string operator()(sal_uInt32 nId);
+};
+
+
+
+}
+
+#endif // INCLUDED_QNAME_TO_STRING_HXX
diff --git a/writerfilter/inc/resourcemodel/ResourceModelHelper.hxx b/writerfilter/inc/resourcemodel/ResourceModelHelper.hxx
new file mode 100644
index 000000000000..c1c500545055
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/ResourceModelHelper.hxx
@@ -0,0 +1,40 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_RESOURCE_MODEL_HELPER_HXX
+#define INCLUDED_RESOURCE_MODEL_HELPER_HXX
+
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+namespace writerfilter {
+namespace resourcemodel {
+
+void WRITERFILTER_DLLPUBLIC resolveSprmProps(Properties & rHandler, Sprm & rSprm);
+void WRITERFILTER_DLLPUBLIC resolveAttributeProperties(Properties & rHandler, Value & rValue);
+
+}}
+
+#endif // INCLUDED_RESOURCE_MODEL_HELPER_HXX
diff --git a/writerfilter/inc/resourcemodel/SubSequence.hxx b/writerfilter/inc/resourcemodel/SubSequence.hxx
new file mode 100644
index 000000000000..5f03d6ba94bf
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/SubSequence.hxx
@@ -0,0 +1,351 @@
+/*************************************************************************
+ *
+ * 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_SUB_SEQUENCE_HXX
+#define INCLUDED_SUB_SEQUENCE_HXX
+
+#include <com/sun/star/uno/Sequence.hxx>
+
+#include <boost/shared_ptr.hpp>
+#include <iostream>
+#include <stdio.h>
+#include <ctype.h>
+#include "exceptions.hxx"
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/OutputWithDepth.hxx>
+
+namespace writerfilter {
+using namespace ::std;
+
+template <class T>
+class SubSequence;
+
+template <typename T>
+void dumpLine(OutputWithDepth<string> & o, SubSequence<T> & rSeq,
+ sal_uInt32 nOffset, sal_uInt32 nStep);
+
+template <class T>
+class WRITERFILTER_DLLPUBLIC SubSequence
+{
+ typedef boost::shared_ptr<com::sun::star::uno::Sequence<T> >
+ SequencePointer;
+
+ SequencePointer mpSequence;
+ sal_uInt32 mnOffset;
+ sal_uInt32 mnCount;
+
+public:
+ typedef boost::shared_ptr<SubSequence> Pointer_t;
+
+ SubSequence() : mpSequence(new ::com::sun::star::uno::Sequence<T>()),
+ mnOffset(0), mnCount(0)
+ {
+ }
+
+ SubSequence(SequencePointer pSequence, sal_uInt32 nOffset_,
+ sal_uInt32 nCount_)
+ : mpSequence(pSequence), mnOffset(nOffset_), mnCount(nCount_)
+ {
+ }
+
+ SubSequence(SequencePointer pSequence)
+ : mpSequence(pSequence), mnOffset(0), mnCount(pSequence->getLength())
+ {
+ }
+
+ SubSequence(const SubSequence & rSubSequence, sal_uInt32 nOffset_,
+ sal_uInt32 nCount_)
+ : mpSequence(rSubSequence.mpSequence),
+ mnOffset(rSubSequence.mnOffset + nOffset_),
+ mnCount(nCount_)
+ {
+ }
+
+ SubSequence(const T * pStart, sal_uInt32 nCount_)
+ : mpSequence(new com::sun::star::uno::Sequence<T>(pStart, nCount_)),
+ mnOffset(0), mnCount(nCount_)
+ {
+ }
+
+ SubSequence(sal_Int32 nCount_)
+ : mpSequence(new com::sun::star::uno::Sequence<T>(nCount_)), mnOffset(0),
+ mnCount(nCount_)
+ {
+ }
+
+ ::com::sun::star::uno::Sequence<T> & getSequence()
+ {
+ return *mpSequence;
+ }
+
+ const ::com::sun::star::uno::Sequence<T> & getSequence() const
+ {
+ return *mpSequence;
+ }
+
+ void reset() {
+ mnOffset = 0;
+ mnCount = mpSequence->getLength();
+ }
+
+ sal_uInt32 getOffset() const { return mnOffset; }
+ sal_uInt32 getCount() const { return mnCount; }
+
+ const T & operator[] (sal_uInt32 nIndex) const
+ {
+ if (mnOffset + nIndex >=
+ sal::static_int_cast<sal_uInt32>(mpSequence->getLength()))
+ throw ExceptionOutOfBounds("SubSequence::operator[]");
+
+ return (*mpSequence)[mnOffset + nIndex];
+ }
+
+ void dump(ostream & o) const
+ {
+ {
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer),
+ "<sequence id='%p' offset='%lx' count='%lx'>",
+ mpSequence.get(), mnOffset, mnCount);
+ o << sBuffer << endl;
+ }
+
+ sal_uInt32 n = 0;
+ sal_uInt32 nStep = 16;
+
+ while (n < getCount())
+ {
+ char sBuffer[256];
+
+ o << "<line>";
+
+ snprintf(sBuffer, 255, "%08lx: ", n);
+
+ o << sBuffer;
+
+ for (sal_uInt32 i = 0; i < nStep; i++)
+ {
+ if (n + i < getCount())
+ {
+ snprintf(sBuffer, 255, "%02x ", operator[](n + i));
+ o << sBuffer;
+ }
+ else
+ o << " ";
+
+ if (i % 8 == 7)
+ o << " ";
+ }
+
+ {
+ for (sal_uInt32 i = 0; i < nStep; i++)
+ {
+ if (n + i < getCount())
+ {
+ unsigned char c =
+ static_cast<unsigned char>(operator[](n + i));
+
+ if (c=='&')
+ o << "&amp;";
+ else if (c=='<')
+ o << "&lt;";
+ else if (c=='>')
+ o << "&gt;";
+ else if (c < 128 && isprint(c))
+ o << c;
+ else
+ o << ".";
+ }
+
+ }
+ }
+
+ o << "</line>" << endl;
+
+ n += nStep;
+ }
+
+ o << "</sequence>" << endl;
+ }
+
+ void dump(OutputWithDepth<string> & o)
+ {
+ {
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer),
+ "<sequence id='%p' offset='%" SAL_PRIxUINT32 "' count='%" SAL_PRIxUINT32 "'>",
+ mpSequence.get(), mnOffset, mnCount);
+ o.addItem(sBuffer);
+ }
+
+ sal_uInt32 n = 0;
+ sal_uInt32 nStep = 16;
+
+ try
+ {
+ sal_uInt32 nCount = getCount();
+ while (n < nCount)
+ {
+ sal_uInt32 nBytes = nCount - n;
+
+ if (nBytes > nStep)
+ nBytes = nStep;
+
+ SubSequence<T> aSeq(*this, n, nBytes);
+ dumpLine(o, aSeq, n, nStep);
+
+ n += nBytes;
+ }
+ }
+ catch (...)
+ {
+ o.addItem("<exception/>");
+ }
+
+ o.addItem("</sequence>");
+ }
+
+ string toString() const
+ {
+ sal_uInt32 n = 0;
+ sal_uInt32 nStep = 16;
+
+ string sResult;
+
+ while (n < getCount())
+ {
+ char sBuffer[256];
+
+ snprintf(sBuffer, 255, "<line>%08" SAL_PRIxUINT32 ": ", n);
+
+ sResult += sBuffer;
+
+ for (sal_uInt32 i = 0; i < nStep; i++)
+ {
+ if (n + i < getCount())
+ {
+ snprintf(sBuffer, 255, "%02x ", operator[](n + i));
+ sResult += sBuffer;
+ }
+ else
+ sResult += " ";
+
+ if (i % 8 == 7)
+ sResult += " ";
+ }
+
+ {
+ for (sal_uInt32 i = 0; i < nStep; i++)
+ {
+ if (n + i < getCount())
+ {
+ unsigned char c =
+ static_cast<unsigned char>(operator[](n + i));
+
+ if (c=='&')
+ sResult += "&amp;";
+ else if (c=='<')
+ sResult += "&lt;";
+ else if (c=='>')
+ sResult += "&gt;";
+ else if (c < 128 && isprint(c))
+ sResult += c;
+ else
+ sResult += ".";
+ }
+ }
+ }
+
+ sResult += "</line>\n";
+
+ n += nStep;
+ }
+
+ return sResult;
+ }
+};
+
+template <typename T>
+void dumpLine(OutputWithDepth<string> & o, SubSequence<T> & rSeq,
+ sal_uInt32 nOffset, sal_uInt32 nStep)
+{
+ sal_uInt32 nCount = rSeq.getCount();
+ char sBuffer[256];
+
+ string tmpStr = "<line>";
+
+ snprintf(sBuffer, 255, "%08" SAL_PRIxUINT32 ": ", nOffset);
+
+ tmpStr += sBuffer;
+
+ for (sal_uInt32 i = 0; i < nStep; i++)
+ {
+ if (i < nCount)
+ {
+ snprintf(sBuffer, 255, "%02x ", rSeq[i]);
+ tmpStr += sBuffer;
+ }
+ else
+ tmpStr += " ";
+
+ if (i % 8 == 7)
+ tmpStr += " ";
+ }
+
+ {
+ for (sal_uInt32 i = 0; i < nStep; i++)
+ {
+ if (i < nCount)
+ {
+ unsigned char c =
+ static_cast<unsigned char>(rSeq[i]);
+
+ if (c=='&')
+ tmpStr += "&amp;";
+ else if (c=='<')
+ tmpStr += "&lt;";
+ else if (c=='>')
+ tmpStr += "&gt;";
+ else if (c < 128 && isprint(c))
+ tmpStr += c;
+ else
+ tmpStr += ".";
+ }
+
+ }
+ }
+
+ tmpStr += "</line>";
+
+ o.addItem(tmpStr);
+}
+
+}
+
+#endif // INCLUDED_SUB_SEQUENCE_HXX
diff --git a/writerfilter/inc/resourcemodel/TableData.hxx b/writerfilter/inc/resourcemodel/TableData.hxx
new file mode 100644
index 000000000000..aca4fce71064
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/TableData.hxx
@@ -0,0 +1,426 @@
+/*************************************************************************
+ *
+ * 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_TABLE_DATA
+#define INCLUDED_TABLE_DATA
+
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_HXX
+#include <resourcemodel/WW8ResourceModel.hxx>
+#endif
+
+#include <vector>
+#include <boost/shared_ptr.hpp>
+
+namespace writerfilter
+{
+
+template <typename T, typename PropertiesPointer>
+/**
+ Class containing the data to describe a table cell.
+ */
+class WRITERFILTER_DLLPUBLIC CellData
+{
+ /**
+ Handle to start of cell.
+ */
+ T mStart;
+
+ /**
+ Handle to end of cell.
+ */
+ T mEnd;
+
+ /**
+ Pointer to properties of cell.
+ */
+ PropertiesPointer mpProps;
+
+ bool mbOpen;
+
+public:
+ typedef boost::shared_ptr<CellData> Pointer_t;
+
+ CellData(T start, PropertiesPointer pProps)
+ : mStart(start), mEnd(start), mpProps(pProps), mbOpen(true)
+ {
+ }
+
+ virtual ~CellData() {}
+
+ /**
+ Set the start handle of the cell.
+
+ @param start the start handle of the cell
+ */
+ void setStart(T start) { mStart = start; }
+
+ /**
+ Set the end handle of a cell.
+
+ @param end the end handle of the cell
+ */
+ void setEnd(T end) { mEnd = end; mbOpen = false; }
+
+ /**
+ Set the properties of the cell.
+
+ @param pProps the properties of the cell
+ */
+ void setProperties(PropertiesPointer pProps) { mpProps = pProps; }
+
+ /**
+ Adds properties to the cell.
+
+ @param pProps the properties to add
+ */
+ void insertProperties(PropertiesPointer pProps)
+ {
+ if( mpProps.get() )
+ mpProps->insert(pProps);
+ else
+ mpProps = pProps;
+ }
+
+ /**
+ Return start handle of the cell.
+ */
+ const T & getStart() { return mStart; }
+
+ /**
+ Return end handle of the cell.
+ */
+ const T & getEnd() { return mEnd; }
+
+ /**
+ Return properties of the cell.
+ */
+ PropertiesPointer getProperties() { return mpProps; }
+
+ bool isOpen() const { return mbOpen; }
+};
+
+template <typename T, typename PropertiesPointer>
+/**
+ Class to handle data of a table row.
+ */
+class WRITERFILTER_DLLPUBLIC RowData
+{
+ typedef typename CellData<T, PropertiesPointer>::Pointer_t
+ CellDataPointer_t;
+ typedef ::std::vector<CellDataPointer_t> Cells;
+
+ /**
+ the cell data of the row
+ */
+ Cells mCells;
+
+ /**
+ the properties of the row
+ */
+ mutable PropertiesPointer mpProperties;
+
+public:
+ typedef boost::shared_ptr<RowData <T, PropertiesPointer> > Pointer_t;
+
+ RowData() {}
+
+ RowData(const RowData<T, PropertiesPointer> & rRowData)
+ : mCells(rRowData.mCells), mpProperties(rRowData.mpProperties)
+ {
+ }
+
+ virtual ~RowData() {}
+
+ /**
+ Add a cell to the row.
+
+ @param start the start handle of the cell
+ @param end the end handle of the cell
+ @param pProps the properties of the cell
+ */
+ void addCell(const T & start, PropertiesPointer pProps)
+ {
+ CellDataPointer_t pCellData
+ (new CellData<T, PropertiesPointer>(start, pProps));
+ mCells.push_back(pCellData);
+ }
+
+ void endCell(const T & end)
+ {
+ if (mCells.size() > 0)
+ mCells.back()->setEnd(end);
+ }
+
+ bool isCellOpen() const
+ {
+ return mCells.size() > 0 && mCells.back()->isOpen();
+ }
+
+ /**
+ Add properties to the row.
+
+ @param pProperties the properties to set
+ */
+ void insertProperties(PropertiesPointer pProperties)
+ {
+ if( pProperties.get() )
+ {
+ if( !mpProperties.get() )
+ mpProperties = pProperties;
+ else
+ mpProperties->insert( pProperties );
+ }
+ }
+
+ /**
+ Add properties to a cell of the row.
+
+ @param i index of the cell
+ @param pProps the properties to add
+ */
+ void insertCellProperties(unsigned int i, PropertiesPointer pProps)
+ {
+ mCells[i]->insertProperties(pProps);
+ }
+
+ /**
+ Add properties to the last cell of the row.
+ */
+ void insertCellProperties(PropertiesPointer pProps)
+ {
+ if (! mCells.empty())
+ mCells.back()->insertProperties(pProps);
+ }
+
+ /**
+ Return number of cells in the row.
+ */
+ unsigned int getCellCount()
+ {
+ return mCells.size();
+ }
+
+ /**
+ Return start handle of a cell in the row.
+
+ @param i index of the cell
+ */
+ const T & getCellStart(unsigned int i) const
+ {
+ return mCells[i]->getStart();
+ }
+
+ /**
+ Return end handle of a cell in the row.
+
+ @param i index of the cell
+ */
+ const T & getCellEnd(unsigned int i) const
+ {
+ return mCells[i]->getEnd();
+ }
+
+ /**
+ Return the properties of a cell in the row.
+
+ @param i index of the cell
+ */
+ PropertiesPointer getCellProperties(unsigned int i) const
+ {
+ return mCells[i]->getProperties();
+ }
+
+ /**
+ Return properties of the row.
+ */
+ PropertiesPointer getProperties()
+ {
+ return mpProperties;
+ }
+
+ /**
+ Clear the row data.
+ */
+ void clear()
+ {
+ mCells.clear();
+ mpProperties.reset();
+ }
+};
+
+template <typename T, typename PropertiesPointer>
+/**
+ Class that holds the data of a table.
+ */
+class WRITERFILTER_DLLPUBLIC TableData
+{
+ typedef typename RowData<T, PropertiesPointer>::Pointer_t RowPointer_t;
+ typedef ::std::vector<RowPointer_t> Rows;
+
+ /**
+ the table properties
+ */
+ PropertiesPointer mpTableProps;
+
+ /**
+ the data of the rows of the table
+ */
+ Rows mRows;
+
+ /**
+ pointer to the data of the current row (while building up the table data).
+ */
+ RowPointer_t mpRow;
+
+ /**
+ depth of the current table in a hierarchy of tables
+ */
+ unsigned int mnDepth;
+
+ /**
+ initialize mpRow
+ */
+ void newRow() { mpRow = RowPointer_t(new RowData<T, PropertiesPointer>()); }
+
+public:
+ typedef boost::shared_ptr<TableData <T, PropertiesPointer> > Pointer_t;
+
+ TableData(unsigned int nDepth) : mnDepth(nDepth) { newRow(); }
+ ~TableData() {}
+
+ /**
+ End the current row.
+
+ Sets properties of the current row and pushes the row to the
+ back of the rows currently contained in the table.
+
+ @param pProperties properties of the row to be ended
+ */
+ void endRow(PropertiesPointer pProperties)
+ {
+ mpRow->insertProperties(pProperties);
+ mRows.push_back(mpRow);
+ newRow();
+ }
+
+ /**
+ Add a cell to the current row.
+
+ @param start start handle of the cell
+ @param end end handle of the cell
+ @param pProps properties of the cell
+ */
+ void addCell(const T & start, PropertiesPointer pProps)
+ {
+ mpRow->addCell(start, pProps);
+ }
+
+ /**
+ End the current cell of the current row.
+
+ @parm end end handle of the cell
+ */
+ void endCell(const T & end)
+ {
+ mpRow->endCell(end);
+ }
+
+ /**
+ Return if the current cell of the current row is open.
+ */
+ bool isCellOpen() const
+ {
+ return mpRow->isCellOpen();
+ }
+
+ /**
+ Insert properties to the current cell of the current row.
+
+ @param pProps the properties to add
+ */
+ void insertCellProperties(PropertiesPointer pProps)
+ {
+ mpRow->insertCellProperties(pProps);
+ }
+
+ /**
+ Add properties to a cell of the current row.
+
+ @param i index of the cell
+ @param pProps properties to add
+ */
+ void insertCellProperties(unsigned int i, PropertiesPointer pProps)
+ {
+ mpRow->insertCellProperties(i, pProps);
+ }
+
+ void insertTableProperties( PropertiesPointer pProps )
+ {
+ if ( mpTableProps.get( ) )
+ mpTableProps->insert( pProps );
+ else
+ mpTableProps = pProps;
+ }
+
+ /**
+ Return the table properties.
+ */
+ PropertiesPointer getTableProperties( )
+ {
+ return mpTableProps;
+ }
+
+ /**
+ Return number of rows in the table.
+ */
+ unsigned int getRowCount()
+ {
+ return mRows.size();
+ }
+
+ /**
+ Return depth of table in surrounding table hierarchy.
+ */
+ unsigned int getDepth()
+ {
+ return mnDepth;
+ }
+
+ /**
+ Return row data of a certain row.
+
+ @param i index of the row
+ */
+ const RowPointer_t getRow(unsigned int i) const
+ {
+ return mRows[i];
+ }
+};
+
+}
+
+#endif // INCLUDED_TABLE_DATA
diff --git a/writerfilter/inc/resourcemodel/TableManager.hxx b/writerfilter/inc/resourcemodel/TableManager.hxx
new file mode 100644
index 000000000000..fe43694d25d2
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/TableManager.hxx
@@ -0,0 +1,1099 @@
+/*************************************************************************
+ *
+ * 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_TABLE_MANAGER_HXX
+#define INCLUDED_TABLE_MANAGER_HXX
+
+#ifndef INCLUDED_TABLE_DATA_HXX
+#include <resourcemodel/TableData.hxx>
+#endif
+
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_HXX
+#include <resourcemodel/WW8ResourceModel.hxx>
+#endif
+
+#ifndef INCLUDED_SPRMIDS_HXX
+#include <doctok/sprmids.hxx>
+#endif
+
+#include <boost/shared_ptr.hpp>
+#include <stack>
+#include "util.hxx"
+#include "TagLogger.hxx"
+
+namespace writerfilter
+{
+
+using namespace ::std;
+
+template <typename T, typename PropertiesPointer>
+/**
+ Class to handle events generated by TableManager::resolveCurrentTable
+ */
+class WRITERFILTER_DLLPUBLIC TableDataHandler
+{
+public:
+ typedef boost::shared_ptr<TableDataHandler> Pointer_t;
+
+ /**
+ Handle start of table.
+
+ @param nRows number of rows in the table
+ @param nDepth depth of the table in surrounding table hierarchy
+ @param pProps properties of the table
+ */
+ virtual void startTable(unsigned int nRows, unsigned int nDepth,
+ PropertiesPointer pProps) = 0;
+
+ /**
+ Handle end of table.
+ */
+ virtual void endTable() = 0;
+
+ /**
+ Handle start of row.
+
+ @param nCols number of columns in the table
+ @param pProps properties of the row
+ */
+ virtual void startRow(unsigned int nCols,
+ PropertiesPointer pProps) = 0;
+
+ /**
+ Handle end of row.
+ */
+ virtual void endRow() = 0;
+
+ /**
+ Handle start of cell.
+
+ @param rT start handle of the cell
+ @param pProps properties of the cell
+ */
+ virtual void startCell(const T & rT, PropertiesPointer pProps) = 0;
+
+ /**
+ Handle end of cell.
+
+ @param rT end handle of cell
+ */
+ virtual void endCell(const T & rT) = 0;
+};
+
+template <typename T, typename PropertiesPointer>
+/**
+ The table manager.
+
+ This class gets forwarded events from the tokenizer. It gathers the
+ table data and after ending the table generates events for the
+ table structure. The events have to be handles by a TableDataHandler.
+
+ */
+class TableManager
+{
+#ifdef DEBUG_TABLE
+ TagLogger::Pointer_t mpTableLogger;
+#endif
+
+ class TableManagerState
+ {
+ /**
+ properties at the current point in document
+ */
+ PropertiesPointer mpProps;
+
+ /**
+ properties of the current cell
+ */
+ PropertiesPointer mpCellProps;
+
+ /**
+ properties of the current row
+ */
+ PropertiesPointer mpRowProps;
+
+ /**
+ properties of the current table
+ */
+ stack<PropertiesPointer> mTableProps;
+
+ /**
+ true if at the end of a row
+ */
+ bool mbRowEnd;
+
+ /**
+ true when in a cell
+ */
+ bool mbInCell;
+
+ /**
+ true when at the end of a cell
+ */
+ bool mbCellEnd;
+
+ public:
+ /**
+ Constructor
+ */
+ TableManagerState()
+ : mbRowEnd(false), mbInCell(false), mbCellEnd(false)
+ {
+ }
+
+ virtual ~TableManagerState()
+ {
+ }
+
+ void startLevel()
+ {
+ PropertiesPointer pProps;
+ mTableProps.push(pProps);
+ }
+
+ void endLevel()
+ {
+ mTableProps.pop();
+ }
+
+ /**
+ Reset to initial state at beginning of row.
+ */
+ void resetCellSpecifics()
+ {
+ mbRowEnd = false;
+ mbInCell = false;
+ mbCellEnd = false;
+ }
+
+ void resetProps()
+ {
+ mpProps.reset();
+ }
+
+ void setProps(PropertiesPointer pProps)
+ {
+ mpProps = pProps;
+ }
+
+ PropertiesPointer getProps()
+ {
+ return mpProps;
+ }
+
+ void resetCellProps()
+ {
+ mpCellProps.reset();
+ }
+
+ void setCellProps(PropertiesPointer pProps)
+ {
+ mpCellProps = pProps;
+ }
+
+ PropertiesPointer getCellProps()
+ {
+ return mpCellProps;
+ }
+
+ void resetRowProps()
+ {
+ mpCellProps.reset();
+ }
+
+ void setRowProps(PropertiesPointer pProps)
+ {
+ mpRowProps = pProps;
+ }
+
+ PropertiesPointer getRowProps()
+ {
+ return mpRowProps;
+ }
+
+ void resetTableProps()
+ {
+ if (mTableProps.size() > 0)
+ mTableProps.top().reset();
+ }
+
+ void setTableProps(PropertiesPointer pProps)
+ {
+ if (mTableProps.size() > 0)
+ mTableProps.top() = pProps;
+ }
+
+ PropertiesPointer getTableProps()
+ {
+ PropertiesPointer pResult;
+
+ if (mTableProps.size() > 0)
+ pResult = mTableProps.top();
+
+ return pResult;
+ }
+
+ void setInCell(bool bInCell)
+ {
+ mbInCell = bInCell;
+ }
+
+ bool isInCell() const
+ {
+ return mbInCell;
+ }
+
+ void setCellEnd(bool bCellEnd)
+ {
+ mbCellEnd = bCellEnd;
+ }
+
+ bool isCellEnd() const
+ {
+ return mbCellEnd;
+ }
+
+ void setRowEnd(bool bRowEnd)
+ {
+ mbRowEnd = bRowEnd;
+ }
+
+ bool isRowEnd() const
+ {
+ return mbRowEnd;
+ }
+ };
+
+ /**
+ handle for the current position in document
+ */
+ T mCurHandle;
+
+ TableManagerState mState;
+
+protected:
+ PropertiesPointer getProps()
+ {
+ return mState.getProps();
+ }
+
+ void setProps(PropertiesPointer pProps)
+ {
+ mState.setProps(pProps);
+ }
+
+ void resetProps()
+ {
+ mState.resetProps();
+ }
+
+ PropertiesPointer getCellProps()
+ {
+ return mState.getCellProps();
+ }
+
+ void setCellProps(PropertiesPointer pProps)
+ {
+ mState.setCellProps(pProps);
+ }
+
+ void resetCellProps()
+ {
+ mState.resetCellProps();
+ }
+
+ PropertiesPointer getRowProps()
+ {
+ return mState.getRowProps();
+ }
+
+ void setRowProps(PropertiesPointer pProps)
+ {
+ mState.setRowProps(pProps);
+ }
+
+ void resetRowProps()
+ {
+ mState.resetRowProps();
+ }
+
+ void setInCell(bool bInCell)
+ {
+ mState.setInCell(bInCell);
+ }
+
+ bool isInCell() const
+ {
+ return mState.isInCell();
+ }
+
+ void setCellEnd(bool bCellEnd)
+ {
+ mState.setCellEnd(bCellEnd);
+ }
+
+ bool isCellEnd() const
+ {
+ return mState.isCellEnd();
+ }
+
+ void setRowEnd(bool bRowEnd)
+ {
+ mState.setRowEnd(bRowEnd);
+ }
+
+ bool isRowEnd() const
+ {
+ return mState.isRowEnd();
+ }
+
+ PropertiesPointer getTableProps()
+ {
+ return mState.getTableProps();
+ }
+
+ void setTableProps(PropertiesPointer pProps)
+ {
+ mState.setTableProps(pProps);
+ }
+
+ void resetTableProps()
+ {
+ mState.resetTableProps();
+ }
+
+ T getHandle()
+ {
+ return mCurHandle;
+ }
+
+ void setHandle(const T & rHandle)
+ {
+ mCurHandle = rHandle;
+ }
+
+private:
+ typedef boost::shared_ptr<T> T_p;
+
+ /**
+ depth of the current cell
+ */
+ sal_uInt32 mnTableDepthNew;
+
+ /**
+ depth of the previous cell
+ */
+ sal_uInt32 mnTableDepth;
+
+ /**
+ stack of table data
+
+ for each level of nested tables there is one frame in the stack
+ */
+ stack<typename TableData<T, PropertiesPointer>::Pointer_t > mTableDataStack;
+
+ typedef typename TableDataHandler<T, PropertiesPointer>::Pointer_t TableDataHandlerPointer_t;
+
+ /**
+ handler for resolveCurrentTable
+ */
+ TableDataHandlerPointer_t mpTableDataHandler;
+
+ /**
+ Set flag which indicates the current handle is in a cell.
+ */
+ void inCell();
+
+ /**
+ Set flag which indicate the current handle is at the end of a cell.
+ */
+ void endCell();
+
+ /**
+ Set the table depth of the current cell.
+
+ @param nDepth the cell depth
+ */
+ void cellDepth(sal_uInt32 nDepth);
+
+ /**
+ Set flag indication the current handle is at the end of a row.
+ */
+ void endRow();
+
+ /**
+ Resolve the current table to the TableDataHandler.
+ */
+ void resolveCurrentTable();
+
+ /**
+ Open a cell at current level.
+ */
+
+ void openCell(const T & handle, PropertiesPointer pProps);
+
+ /**
+ Close a cell at current level.
+ */
+ void closeCell(const T & handle);
+
+ /**
+ Ensure a cell is open at the current level.
+ */
+ void ensureOpenCell(PropertiesPointer pProps);
+
+protected:
+
+ /**
+ Return current table depth.
+ */
+ sal_uInt32 getTableDepthNew() { return mnTableDepthNew; }
+
+ /**
+ Action to be carried out at the end of the last paragraph of a
+ cell.
+ */
+ virtual void endOfCellAction();
+
+ /**
+ Action to be carried out at the end of the "table row"
+ paragraph.
+ */
+ virtual void endOfRowAction();
+ /** let the derived class clear their table related data
+ */
+ virtual void clearData();
+
+
+public:
+ TableManager();
+ virtual ~TableManager(){}
+
+ /**
+ Set handler for resolveCurrentTable.
+
+ @param pTableDataHandler the handler
+ */
+ void setHandler(TableDataHandlerPointer_t pTableDataHandler);
+
+ /**
+ Set the current handle.
+
+ @param rHandle the handle
+ */
+ virtual void handle(const T & rHandle);
+
+ /**
+ Start a new table level.
+
+ A new context is pushed onto the table data stack,
+ */
+ virtual void startLevel();
+
+ /**
+ End a table level.
+
+ The current table is resolved and the context is popped from
+ the stack.
+ */
+ virtual void endLevel();
+
+ /**
+ Handle the start of a paragraph group.
+ */
+ virtual void startParagraphGroup();
+
+ /**
+ Handle the end of a paragraph group.
+ */
+ virtual void endParagraphGroup();
+
+ /**
+ Handle an SPRM at curent handle.
+
+ @param rSprm the SPRM
+ */
+ virtual bool sprm(Sprm & rSprm);
+
+ /**
+ Handle properties at current handle.
+
+ @param pProps the properites
+ */
+ virtual void props(PropertiesPointer pProps);
+
+ /**
+ Handle occurance of character 0x7.
+ */
+ virtual void handle0x7();
+
+ /**
+ Handle 8 bit text at current handle.
+
+ @param data array of characters
+ @param len number of characters to handle
+ */
+ virtual void text(const sal_uInt8 * data, size_t len);
+
+ /**
+ Handle 16 bit text at current handle.
+
+ @param data array of characters
+ @param len number of characters to handle
+ */
+ virtual void utext(const sal_uInt8 * data, size_t len);
+
+ /**
+ Handle properties of the current cell.
+
+ @param pProps the properties
+ */
+ virtual void cellProps(PropertiesPointer pProps);
+
+ /**
+ Handle properties of a certain cell in the current row.
+
+ @paran i index of the cell in the current row
+ @param pProps the properties
+ */
+ virtual void cellPropsByCell(unsigned int i, PropertiesPointer pProps);
+
+ /**
+ Handle properties of the current row.
+
+ @param pProps the properties
+ */
+ virtual void insertRowProps(PropertiesPointer pProps);
+
+ /**
+ Handle properties of the current table.
+
+ @param pProps the properties
+ */
+ virtual void insertTableProps(PropertiesPointer pProps);
+
+ /**
+ Return if table manager has detected paragraph to ignore.
+
+ If this function returns true the current paragraph contains
+ only control information, e.g. end of row.
+ */
+ virtual bool isIgnore() const;
+
+
+#ifdef DEBUG_TABLE
+ void setTagLogger(TagLogger::Pointer_t _tagLogger)
+ {
+ mpTableLogger = _tagLogger;
+ }
+#endif
+};
+
+template <typename T, typename PropertiesPointer>
+TableManager<T, PropertiesPointer>::TableManager()
+: mnTableDepthNew(0), mnTableDepth(0)
+{
+ setRowEnd(false);
+ setInCell(false);
+ setCellEnd(false);
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::cellDepth(sal_uInt32 nDepth)
+{
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ {
+ mpTableLogger->startElement("tablemanager.cellDepth");
+ mpTableLogger->attribute("depth", nDepth);
+ mpTableLogger->endElement("tablemanager.cellDepth");
+ }
+#endif
+
+ mnTableDepthNew = nDepth;
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::inCell()
+{
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->element("tablemanager.inCell");
+#endif
+ setInCell(true);
+
+ if (mnTableDepthNew < 1)
+ mnTableDepthNew = 1;
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::endCell()
+{
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->element("tablemanager.endCell");
+#endif
+
+ setCellEnd(true);
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::endRow()
+{
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->element("tablemanager.endRow");
+#endif
+
+ setRowEnd(true);
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::setHandler
+(typename TableDataHandler<T, PropertiesPointer>::Pointer_t pTableDataHandler)
+{
+ mpTableDataHandler = pTableDataHandler;
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::handle(const T & rHandle)
+{
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get())
+ {
+ mpTableLogger->startElement("tablemanager.handle");
+ mpTableLogger->chars(toString(rHandle));
+ mpTableLogger->endElement("tablemanager.handle");
+ }
+#endif
+
+ setHandle(rHandle);
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::startLevel()
+{
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ {
+ typename TableData<T, PropertiesPointer>::Pointer_t pTableData;
+
+ if (mTableDataStack.size() > 0)
+ pTableData = mTableDataStack.top();
+
+ mpTableLogger->startElement("tablemanager.startLevel");
+ mpTableLogger->attribute("level", mTableDataStack.size());
+
+ if (pTableData.get() != NULL)
+ mpTableLogger->attribute("openCell",
+ pTableData->isCellOpen() ? "yes" : "no");
+
+ mpTableLogger->endElement("tablemanager.startLevel");
+ }
+#endif
+
+ typename TableData<T, PropertiesPointer>::Pointer_t pTableData
+ (new TableData<T, PropertiesPointer>(mTableDataStack.size()));
+
+ mTableDataStack.push(pTableData);
+ mState.startLevel();
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::endLevel()
+{
+ if (mpTableDataHandler.get() != NULL)
+ resolveCurrentTable();
+
+ mState.endLevel();
+ mTableDataStack.pop();
+
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ {
+ typename TableData<T, PropertiesPointer>::Pointer_t pTableData;
+
+ if (mTableDataStack.size() > 0)
+ pTableData = mTableDataStack.top();
+
+ mpTableLogger->startElement("tablemanager.endLevel");
+ mpTableLogger->attribute("level", mTableDataStack.size());
+
+ if (pTableData.get() != NULL)
+ mpTableLogger->attribute("openCell",
+ pTableData->isCellOpen() ? "yes" : "no");
+
+ mpTableLogger->endElement("tablemanager.endLevel");
+ }
+#endif
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::startParagraphGroup()
+{
+ mState.resetCellSpecifics();
+ mnTableDepthNew = 0;
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::endParagraphGroup()
+{
+ sal_Int32 nTableDepthDifference = mnTableDepthNew - mnTableDepth;
+
+ PropertiesPointer pEmptyProps;
+
+ while (nTableDepthDifference > 0)
+ {
+ ensureOpenCell(pEmptyProps);
+ startLevel();
+
+ --nTableDepthDifference;
+ }
+ while (nTableDepthDifference < 0)
+ {
+ endLevel();
+
+ ++nTableDepthDifference;
+ }
+
+ mnTableDepth = mnTableDepthNew;
+
+ if (mnTableDepth > 0)
+ {
+ typename TableData<T, PropertiesPointer>::Pointer_t pTableData =
+ mTableDataStack.top();
+
+ if (isRowEnd())
+ {
+ endOfRowAction();
+ pTableData->endRow(getRowProps());
+ resetRowProps();
+ }
+
+ else if (isInCell())
+ {
+ ensureOpenCell(getCellProps());
+
+ if (isCellEnd())
+ {
+ endOfCellAction();
+ closeCell(getHandle());
+ }
+ }
+ resetCellProps();
+ }
+}
+
+template <typename T, typename PropertiesPointer>
+bool TableManager<T, PropertiesPointer>::sprm(Sprm & rSprm)
+{
+ bool bRet = true;
+ switch (rSprm.getId())
+ {
+ case NS_sprm::LN_PTableDepth:
+ {
+ Value::Pointer_t pValue = rSprm.getValue();
+
+ cellDepth(pValue->getInt());
+ }
+ break;
+ case NS_sprm::LN_PFInTable:
+ inCell();
+ break;
+ case NS_sprm::LN_PCell:
+ endCell();
+ break;
+ case NS_sprm::LN_PFTtp:
+ case NS_sprm::LN_PRow:
+ endRow();
+ break;
+ default:
+ bRet = false;
+ }
+ return bRet;
+}
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::props(PropertiesPointer pProps)
+{
+ setProps(pProps);
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::handle0x7()
+{
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->startElement("tablemanager.handle0x7");
+#endif
+
+ if (mnTableDepthNew < 1)
+ mnTableDepthNew = 1;
+
+ if (isInCell())
+ endCell();
+ else
+ endRow();
+
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->endElement("tablemanager.handle0x7");
+#endif
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::text(const sal_uInt8 * data, size_t len)
+{
+ // optimization: cell/row end characters are the last characters in a run
+ if (len > 0)
+ {
+ if (data[len - 1] == 0x7)
+ handle0x7();
+ }
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::utext(const sal_uInt8 * data, size_t len)
+{
+ // optimization: cell/row end characters are the last characters in a run
+
+ if (len > 0)
+ {
+ sal_Unicode nChar = data[(len - 1) * 2] + (data[(len - 1) * 2 + 1] << 8);
+ if (nChar == 0x7)
+ handle0x7();
+ }
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::cellProps(PropertiesPointer pProps)
+{
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->startElement("tablemanager.cellProps");
+#endif
+
+ if(getCellProps().get())
+ getCellProps()->insert( pProps );
+ else
+ setCellProps(pProps);
+
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->endElement("tablemanager.cellProps");
+#endif
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::cellPropsByCell
+(unsigned int i, PropertiesPointer pProps)
+{
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->startElement("tablemanager.cellPropsByCell");
+#endif
+
+ mTableDataStack.top()->insertCellProperties(i, pProps);
+
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->endElement("tablemanager.cellPropsByCell");
+#endif
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::insertRowProps(PropertiesPointer pProps)
+{
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->startElement("tablemanager.insertRowProps");
+#endif
+
+ if( getRowProps().get() )
+ getRowProps()->insert( pProps );
+ else
+ setRowProps(pProps);
+
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->endElement("tablemanager.insertRowProps");
+#endif
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::insertTableProps(PropertiesPointer pProps)
+{
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->startElement("tablemanager.insertTableProps");
+#endif
+
+ if( getTableProps().get() )
+ getTableProps()->insert( pProps );
+ else
+ setTableProps(pProps);
+
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->endElement("tablemanager.insertTableProps");
+#endif
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::resolveCurrentTable()
+{
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->startElement("tablemanager.resolveCurrentTable");
+#endif
+
+ if (mpTableDataHandler.get() != NULL)
+ {
+ typename TableData<T, PropertiesPointer>::Pointer_t
+ pTableData = mTableDataStack.top();
+
+ unsigned int nRows = pTableData->getRowCount();
+
+ mpTableDataHandler->startTable(nRows, pTableData->getDepth(), getTableProps());
+
+ for (unsigned int nRow = 0; nRow < nRows; ++nRow)
+ {
+ typename RowData<T, PropertiesPointer>::Pointer_t pRowData = pTableData->getRow(nRow);
+
+ unsigned int nCells = pRowData->getCellCount();
+
+ mpTableDataHandler->startRow(nCells, pRowData->getProperties());
+
+ for (unsigned int nCell = 0; nCell < nCells; ++nCell)
+ {
+ mpTableDataHandler->startCell
+ (pRowData->getCellStart(nCell),
+ pRowData->getCellProperties(nCell));
+
+ mpTableDataHandler->endCell(pRowData->getCellEnd(nCell));
+ }
+
+ mpTableDataHandler->endRow();
+ }
+
+ mpTableDataHandler->endTable();
+ }
+ resetTableProps();
+ clearData();
+
+#ifdef DEBUG_TABLE
+ if (mpTableLogger.get() != NULL)
+ mpTableLogger->endElement("tablemanager.resolveCurrentTable");
+#endif
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::endOfCellAction()
+{
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::endOfRowAction()
+{
+}
+
+template <typename T, typename PropertiesPointer>
+bool TableManager<T, PropertiesPointer>::isIgnore() const
+{
+ return isRowEnd();
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::clearData()
+{
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::openCell
+(const T & rHandle, PropertiesPointer pProps)
+{
+#ifdef DEBUG_TABLE
+ mpTableLogger->startElement("tablemanager.openCell");
+ mpTableLogger->chars(toString(rHandle));
+ mpTableLogger->endElement("tablemanager.openCell");
+#endif
+
+ if (mTableDataStack.size() > 0)
+ {
+ typename TableData<T, PropertiesPointer>::Pointer_t
+ pTableData = mTableDataStack.top();
+
+ pTableData->addCell(rHandle, pProps);
+ }
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::closeCell
+(const T & rHandle)
+{
+#ifdef DEBUG_TABLE
+ mpTableLogger->startElement("tablemanager.closeCell");
+ mpTableLogger->chars(toString(rHandle));
+ mpTableLogger->endElement("tablemanager.closeCell");
+#endif
+
+ if (mTableDataStack.size() > 0)
+ {
+ typename TableData<T, PropertiesPointer>::Pointer_t
+ pTableData = mTableDataStack.top();
+
+ pTableData->endCell(rHandle);
+ }
+}
+
+template <typename T, typename PropertiesPointer>
+void TableManager<T, PropertiesPointer>::ensureOpenCell(PropertiesPointer pProps)
+{
+#ifdef DEBUG_TABLE
+ mpTableLogger->startElement("tablemanager.ensureOpenCell");
+#endif
+
+ if (mTableDataStack.size() > 0)
+ {
+ typename TableData<T, PropertiesPointer>::Pointer_t
+ pTableData = mTableDataStack.top();
+
+ if (pTableData.get() != NULL)
+ {
+ if (!pTableData->isCellOpen())
+ openCell(getHandle(), pProps);
+ else
+ pTableData->insertCellProperties(pProps);
+ }
+ }
+#ifdef DEBUG_TABLE
+ mpTableLogger->endElement("tablemanager.ensureOpenCell");
+#endif
+}
+
+}
+
+#endif // INCLUDED_TABLE_MANAGER_HXX
diff --git a/writerfilter/inc/resourcemodel/TagLogger.hxx b/writerfilter/inc/resourcemodel/TagLogger.hxx
new file mode 100644
index 000000000000..a2c8290e0c4b
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/TagLogger.hxx
@@ -0,0 +1,155 @@
+/*************************************************************************
+ *
+ * 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_TAG_LOGGER_HXX
+#define INCLUDED_TAG_LOGGER_HXX
+
+#include <rtl/ustring.hxx>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <string>
+#include <vector>
+#include <stack>
+#include <hash_map>
+#include <boost/shared_ptr.hpp>
+#include <iostream>
+
+namespace writerfilter
+{
+ using namespace::std;
+
+ struct XMLAttribute
+ {
+ string mName;
+ string mValue;
+ public:
+ XMLAttribute(string sName, string sValue)
+ : mName(sName), mValue(sValue)
+ {
+ }
+ };
+
+ class WRITERFILTER_DLLPUBLIC XMLTag
+ {
+ public:
+ enum eMode { START, END, COMPLETE };
+ typedef boost::shared_ptr<XMLTag> Pointer_t;
+ static Pointer_t NIL;
+
+ private:
+ string mTag;
+ string mChars;
+
+ typedef vector<XMLAttribute> XMLAttributes_t;
+ XMLAttributes_t mAttrs;
+ typedef vector<XMLTag::Pointer_t> XMLTags_t;
+ XMLTags_t mTags;
+ eMode mMode;
+
+ public:
+ XMLTag(string sTag, eMode mode = COMPLETE) : mTag(sTag), mMode(mode) {}
+
+ 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;
+
+ ostream & output(ostream & o, const string & sIndent = "") const;
+ };
+
+ class WRITERFILTER_DLLPUBLIC TagLogger
+ {
+ public:
+ typedef boost::shared_ptr<TagLogger> Pointer_t;
+
+ private:
+ stack<XMLTag::Pointer_t> mTags;
+ XMLTag::Pointer_t currentTag() const;
+ XMLTag::Pointer_t mpRoot;
+ string mFileName;
+
+ TagLogger();
+
+ public:
+ ~TagLogger();
+
+ 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);
+ void endElement(const string & name);
+ void endDocument();
+
+ ostream & output(ostream & o) const;
+ static void dump(const char * name);
+ };
+
+ class IdToString
+ {
+ public:
+ typedef boost::shared_ptr<IdToString> Pointer_t;
+ virtual string toString(const Id & id) const = 0;
+ };
+
+ class WRITERFILTER_DLLPUBLIC PropertySetToTagHandler : public Properties
+ {
+ XMLTag::Pointer_t mpTag;
+ IdToString::Pointer_t mpIdToString;
+
+ public:
+ PropertySetToTagHandler(IdToString::Pointer_t pIdToString);
+ virtual ~PropertySetToTagHandler();
+
+ XMLTag::Pointer_t getTag() const { return mpTag; }
+
+ void resolve(XMLTag & rTag,
+ writerfilter::Reference<Properties>::Pointer_t props);
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+ };
+
+WRITERFILTER_DLLPUBLIC XMLTag::Pointer_t unoPropertySetToTag(uno::Reference<beans::XPropertySet> rPropSet);
+}
+
+#endif // INCLUDED_TAG_LOGGER_HXX
diff --git a/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx b/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx
new file mode 100644
index 000000000000..1e6d46554c0c
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/WW8ResourceModel.hxx
@@ -0,0 +1,401 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_EVENT_HANDLER_HXX
+#define INCLUDED_WW8_EVENT_HANDLER_HXX
+
+#include <string>
+#include <memory>
+#include <boost/shared_ptr.hpp>
+#include <sal/types.h>
+#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/uno/Any.hxx>
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/OutputWithDepth.hxx>
+/**
+ @file WW8ResourceModel.hxx
+
+ The classes in this file define the interfaces for the resource
+ model of the DocTokenizer:
+
+ @image html doctok.png
+
+ A resource is a set of events that describe an object. A resource
+ is only an abstract concept. It is not instanciated to a class.
+
+ A reference to a resource represents the object that the resource
+ describes. The reference can be resolved thereby generating the
+ events of the resource.
+
+ A handler receives the events generated by resolving a
+ reference. There are several types of handlers each accepting their
+ specific set of events.
+
+ References always have a parameter determining the kind of handler
+ they send the events they generate to. The set of events generated
+ by resolving the reference is a subset of the events received by
+ the handler.
+*/
+
+
+typedef sal_uInt32 Id;
+
+namespace writerfilter {
+using namespace ::com::sun::star;
+using namespace ::std;
+
+/**
+ Reference to an resource that generates events and sends them to a
+ handler.
+
+ The reference can be resolved, i.e. the resource generates its
+ events. The events must be suitable for the handler type given by
+ the template parameter.
+
+ @attention The parameter of the template does not determine the
+ type of the reference's target. It determines the type of the handler!
+
+ Example:
+
+ A Word document can be represented as a stream of events. Event
+ types in a Word document are text, properties, tables, starts and
+ ends of groups. These can be handled by a stream handler (@see
+ Stream). Thus a reference to a Word document is resolved by
+ sending these events to a stream handler.
+*/
+
+template <class T>
+class WRITERFILTER_DLLPUBLIC Reference
+{
+public:
+ /**
+ Pointer to reference
+
+ @attention The ownership of a reference is transfered when
+ the reference is passed.
+ */
+ typedef boost::shared_ptr< Reference<T> > Pointer_t;
+
+ virtual ~Reference() {}
+
+ /**
+ Resolves the reference.
+
+ The events of the references target resource are generated and
+ send to a handler.
+
+ @param rHandler handler which receives the events
+ */
+ virtual void resolve(T & rHandler) = 0;
+
+ /**
+ Returns the type of the reference aka the name of the access class.
+ */
+ virtual string getType() const = 0;
+};
+
+class Value;
+class Sprm;
+
+/**
+ Handler for properties.
+ */
+class WRITERFILTER_DLLPUBLIC Properties
+{
+public:
+ /**
+ Receives an attribute.
+
+ @param name name of the attribute
+ @param val value of the attribute
+ */
+ virtual void attribute(Id name, Value & val) = 0;
+
+ /**
+ Receives a SPRM.
+
+ @param sprm the SPRM received
+ */
+ virtual void sprm(Sprm & sprm) = 0;
+
+};
+
+/**
+ Handler for tables.
+ */
+class WRITERFILTER_DLLPUBLIC Table
+{
+public:
+ typedef boost::shared_ptr<Table> Pointer_t;
+ /**
+ Receives an entry of the table.
+
+ @param pos position of the entry in the table
+ @param ref reference to properties of the entry
+ */
+ virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref) = 0;
+};
+
+/**
+ Handler for binary objects.
+ */
+class WRITERFILTER_DLLPUBLIC BinaryObj
+{
+public:
+ /**
+ Receives binary data of the object.
+
+ @param buf pointer to buffer containing the data
+ @param len size of buffer
+ @param ref reference to properties of binary object
+ */
+ virtual void data(const sal_uInt8* buf, size_t len,
+ writerfilter::Reference<Properties>::Pointer_t ref) = 0;
+};
+
+/**
+ Handler for a stream.
+ */
+class WRITERFILTER_DLLPUBLIC Stream
+{
+public:
+ /**
+ Pointer to this stream.
+ */
+ typedef boost::shared_ptr<Stream> Pointer_t;
+
+ /**
+ Receives start mark for group with the same section properties.
+ */
+ virtual void startSectionGroup() = 0;
+
+ /**
+ Receives end mark for group with the same section properties.
+ */
+ virtual void endSectionGroup() = 0;
+
+ /**
+ Receives start mark for group with the same paragraph properties.
+ */
+ virtual void startParagraphGroup() = 0;
+
+ /**
+ Receives end mark for group with the same paragraph properties.
+ */
+ virtual void endParagraphGroup() = 0;
+
+ virtual void markLastParagraphInSection( ) { };
+
+ /**
+ Receives start mark for group with the same character properties.
+ */
+ virtual void startCharacterGroup() = 0;
+
+ /**
+ Receives end mark for group with the same character properties.
+ */
+ virtual void endCharacterGroup() = 0;
+
+ /**
+ Receives a shape.
+ */
+ virtual void startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape ) = 0;
+
+ virtual void endShape( ) = 0;
+
+ /**
+ Receives 8-bit per character text.
+
+ @param data buffer containing the text
+ @param len number of characters in the text
+ */
+ virtual void text(const sal_uInt8 * data, size_t len) = 0;
+
+ /**
+ Receives 16-bit per character text.
+
+ @param data buffer containing the text
+ @param len number of characters in the text.
+ */
+ virtual void utext(const sal_uInt8 * data, size_t len) = 0;
+
+ /**
+ Receives properties of the current run of text.
+
+ @param ref reference to the properties
+ */
+ virtual void props(writerfilter::Reference<Properties>::Pointer_t ref) = 0;
+
+ /**
+ Receives table.
+
+ @param name name of the table
+ @param ref referecne to the table
+ */
+ virtual void table(Id name,
+ writerfilter::Reference<Table>::Pointer_t ref) = 0;
+
+ /**
+ Receives a substream.
+
+ @param name name of the substream
+ @param ref reference to the substream
+ */
+ virtual void substream(Id name,
+ writerfilter::Reference<Stream>::Pointer_t ref) = 0;
+
+
+ /**
+ Debugging: Receives information about current point in stream.
+
+ @param info the information
+ */
+ virtual void info(const string & info) = 0;
+};
+
+/**
+ A value.
+
+ The methods of this class may throw exceptions if a certain aspect
+ makes no sense for a certain value, e.g. the integer value of a
+ string.
+ */
+class WRITERFILTER_DLLPUBLIC Value
+{
+public:
+ /**
+ Pointer to a value.
+ */
+ typedef auto_ptr<Value> Pointer_t;
+
+ /**
+ Returns integer representation of the value.
+ */
+ virtual int getInt() const = 0;
+
+ /**
+ Returns string representation of the value.
+ */
+ virtual ::rtl::OUString getString() const = 0;
+
+ /**
+ Returns representation of the value as uno::Any.
+ */
+ virtual uno::Any getAny() const = 0;
+
+ /**
+ Returns properties of this value.
+ */
+ virtual writerfilter::Reference<Properties>::Pointer_t getProperties() = 0;
+
+ /**
+ Returns stream of this value.
+ */
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream() = 0;
+
+ /**
+ Returns binary object of this value.
+ */
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary() = 0;
+
+ /**
+ Returns string representation of this value.
+ */
+ virtual string toString() const = 0;
+};
+
+/**
+ An SPRM.
+
+ */
+class WRITERFILTER_DLLPUBLIC Sprm
+{
+public:
+ typedef auto_ptr<Sprm> Pointer_t;
+ enum Kind { UNKNOWN, CHARACTER, PARAGRAPH, TABLE };
+ /**
+ Returns id of the SPRM.
+ */
+ virtual sal_uInt32 getId() const = 0;
+
+ /**
+ Returns value of the SPRM.
+ */
+ virtual Value::Pointer_t getValue() = 0;
+
+ /**
+ Returns reference to binary object contained in the SPRM.
+ */
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary() = 0;
+
+ /**
+ Returns reference to stream associated with the SPRM.
+ */
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream() = 0;
+
+ /**
+ Returns reference to properties contained in the SPRM.
+
+ */
+ virtual writerfilter::Reference<Properties>::Pointer_t getProps() = 0;
+
+ /**
+ Returns the kind of this SPRM.
+ */
+ virtual Kind getKind() = 0;
+
+ /**
+ Returns name of sprm.
+ */
+ virtual string getName() const = 0;
+
+ /**
+ Returns string repesentation of sprm.
+ */
+ virtual string toString() const = 0;
+};
+
+/**
+ Creates handler for a stream.
+*/
+Stream::Pointer_t WRITERFILTER_DLLPUBLIC createStreamHandler();
+
+ void WRITERFILTER_DLLPUBLIC analyzerIds();
+ Stream::Pointer_t WRITERFILTER_DLLPUBLIC createAnalyzer();
+
+ void WRITERFILTER_DLLPUBLIC logger(string prefix, string message);
+
+ void WRITERFILTER_DLLPUBLIC dump(OutputWithDepth<string> & o, const char * name, writerfilter::Reference<Properties>::Pointer_t props);
+ void WRITERFILTER_DLLPUBLIC dump(OutputWithDepth<string> & o, const char * name, sal_uInt32 n);
+ void WRITERFILTER_DLLPUBLIC dump(OutputWithDepth<string> & /*o*/, const char * /*name*/,
+ const rtl::OUString & /*str*/);
+ void WRITERFILTER_DLLPUBLIC dump(OutputWithDepth<string> & o, const char * name, writerfilter::Reference<BinaryObj>::Pointer_t binary);
+
+}
+
+
+#endif // INCLUDED_WW8_EVENT_HANDLER_HXX
diff --git a/writerfilter/inc/resourcemodel/XPathLogger.hxx b/writerfilter/inc/resourcemodel/XPathLogger.hxx
new file mode 100644
index 000000000000..22e50fc15bb9
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/XPathLogger.hxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_XPATH_LOGGER_HXX
+#define INCLUDED_XPATH_LOGGER_HXX
+
+#include <hash_map>
+#include <stack>
+#include <string>
+#include <vector>
+#include <boost/shared_ptr.hpp>
+#include <WriterFilterDllApi.hxx>
+
+namespace writerfilter
+{
+using ::std::hash_map;
+using ::std::stack;
+using ::std::string;
+using ::std::vector;
+
+class WRITERFILTER_DLLPUBLIC XPathLogger
+{
+ typedef hash_map<string, unsigned int> TokenMap_t;
+ typedef boost::shared_ptr<TokenMap_t> TokenMapPointer_t;
+
+ TokenMapPointer_t mp_tokenMap;
+ stack<TokenMapPointer_t> m_tokenMapStack;
+ vector<string> m_path;
+ string m_currentPath;
+
+ void updateCurrentPath();
+
+public:
+ explicit XPathLogger();
+ virtual ~XPathLogger();
+
+ string getXPath() const;
+ void startElement(string _token);
+ void endElement();
+};
+}
+#endif // INCLUDED_XPATH_LOGGER_HXX
diff --git a/writerfilter/inc/resourcemodel/exceptions.hxx b/writerfilter/inc/resourcemodel/exceptions.hxx
new file mode 100644
index 000000000000..708355bff880
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/exceptions.hxx
@@ -0,0 +1,60 @@
+/*************************************************************************
+ *
+ * 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 _DOCTOK_EXCEPTIONS_HXX
+#define _DOCTOK_EXCEPTIONS_HXX
+
+#include <string>
+#include <WriterFilterDllApi.hxx>
+
+namespace writerfilter {
+using namespace ::std;
+
+class WRITERFILTER_DLLPUBLIC Exception
+{
+ string mText;
+
+public:
+ Exception(string text) : mText(text) {}
+
+ const string & getText() const { return mText; }
+};
+
+class WRITERFILTER_DLLPUBLIC ExceptionNotFound : public Exception
+{
+public:
+ ExceptionNotFound(string text) : Exception(text) {}
+};
+
+class WRITERFILTER_DLLPUBLIC ExceptionOutOfBounds : public Exception
+{
+public:
+ ExceptionOutOfBounds(string text) : Exception(text) {}
+};
+}
+
+#endif // _DOCTOK_EXCEPTIONS_HXX
diff --git a/writerfilter/inc/resourcemodel/util.hxx b/writerfilter/inc/resourcemodel/util.hxx
new file mode 100644
index 000000000000..0a700513576a
--- /dev/null
+++ b/writerfilter/inc/resourcemodel/util.hxx
@@ -0,0 +1,50 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_RESOURCEMODEL_UTIL_HXX
+#define INCLUDED_RESOURCEMODEL_UTIL_HXX
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/text/XTextRange.hpp>
+#include <WriterFilterDllApi.hxx>
+#include <string>
+
+namespace writerfilter
+{
+ using namespace ::std;
+ using namespace ::com::sun::star;
+
+ 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/inc/rtftok/RTFInputSource.hxx b/writerfilter/inc/rtftok/RTFInputSource.hxx
new file mode 100644
index 000000000000..7eb191431206
--- /dev/null
+++ b/writerfilter/inc/rtftok/RTFInputSource.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * 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_RTFINPUTSOURCE_HXX
+#define INCLUDED_RTFINPUTSOURCE_HXX
+
+namespace writerfilter { namespace rtftok {
+
+class RTFInputSource
+{
+public:
+ virtual int read(void *buffer, int maxLen) = 0;
+};
+
+} } /* end namespace writerfilter::rtftok */
+
+
+#endif /* INCLUDED_RTFINPUTSOURCE_HXX */
diff --git a/writerfilter/inc/rtftok/RTFParseException.hxx b/writerfilter/inc/rtftok/RTFParseException.hxx
new file mode 100644
index 000000000000..558ecdc45cf3
--- /dev/null
+++ b/writerfilter/inc/rtftok/RTFParseException.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * 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_RTFPARSEEXCEPTION_HXX
+#define INCLUDED_RTFPARSEEXCEPTION_HXX
+
+namespace writerfilter { namespace rtftok {
+
+class RTFParseException
+{
+public:
+ RTFParseException(char *message);
+};
+
+} } /* end namespace writerfilter::rtftok */
+
+
+#endif /* INCLUDED_RTFPARSEEXCEPTION_HXX */
diff --git a/writerfilter/inc/rtftok/RTFScanner.hxx b/writerfilter/inc/rtftok/RTFScanner.hxx
new file mode 100644
index 000000000000..56372dc27bb5
--- /dev/null
+++ b/writerfilter/inc/rtftok/RTFScanner.hxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_RTFSCANNER_HXX
+#define INCLUDED_RTFSCANNER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <vector>
+#include <rtftok/RTFInputSource.hxx>
+#include <rtftok/RTFScannerHandler.hxx>
+
+namespace writerfilter { namespace rtftok {
+
+class WRITERFILTER_DLLPUBLIC RTFScanner {
+public:
+ RTFScanner(RTFScannerHandler &eventHandler_) : eventHandler(eventHandler_) {};
+ virtual ~RTFScanner() { }
+
+ const char* YYText() { return yytext; }
+ int YYLeng() { return yyleng; }
+
+ virtual int yylex() = 0;
+
+ int lineno() const { return yylineno; }
+
+protected:
+ char* yytext;
+ int yyleng;
+ int yylineno; // only maintained if you use %option yylineno
+ int yy_flex_debug; // only has effect with -d or "%option debug"
+ RTFScannerHandler &eventHandler;
+
+
+public:
+ static writerfilter::rtftok::RTFScanner* createRTFScanner(writerfilter::rtftok::RTFInputSource& inputSource, writerfilter::rtftok::RTFScannerHandler &eventHandler);
+};
+
+} } /* end namespace writerfilter::rtftok */
+
+
+#endif /* INCLUDED_RTFSCANNER_HXX */
diff --git a/writerfilter/inc/rtftok/RTFScannerHandler.hxx b/writerfilter/inc/rtftok/RTFScannerHandler.hxx
new file mode 100644
index 000000000000..c8e61903055c
--- /dev/null
+++ b/writerfilter/inc/rtftok/RTFScannerHandler.hxx
@@ -0,0 +1,50 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_RTFSCANNERHANDLER_HXX
+#define INCLUDED_RTFSCANNERHANDLER_HXX
+
+namespace writerfilter { namespace rtftok {
+
+class RTFScannerHandler
+{
+public:
+ virtual void dest(char*token, char*value)=0;
+ virtual void ctrl(char*token, char*value)=0;
+ virtual void lbrace(void)=0;
+ virtual void rbrace(void)=0;
+ virtual void addSpaces(int count)=0;
+ virtual void addBinData(unsigned char data)=0;
+ virtual void addChar(char ch) =0;
+ virtual void addCharU(sal_Unicode ch) =0;
+ virtual void addHexChar(char* hexch) =0;
+
+};
+
+} } /* end namespace writerfilter::rtftok */
+
+#endif /* INCLUDED_RTFSCANNERHANDLER_HXX */
diff --git a/writerfilter/inc/writerfilter.mk b/writerfilter/inc/writerfilter.mk
new file mode 100644
index 000000000000..f8ea735a4ec5
--- /dev/null
+++ b/writerfilter/inc/writerfilter.mk
@@ -0,0 +1,29 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+
+CDEFS+=-DWRITERFILTER_DLLIMPLEMENTATION
+
diff --git a/writerfilter/prj/build.lst b/writerfilter/prj/build.lst
new file mode 100644
index 000000000000..e70b99a052c5
--- /dev/null
+++ b/writerfilter/prj/build.lst
@@ -0,0 +1,11 @@
+wf writerfilter : soltools sal BOOST:boost cppu cppuhelper ucbhelper tools svx LIBXSLT:libxslt oox NULL
+wf writerfilter usr1 - all wf_mkout NULL
+wf writerfilter\source\resourcemodel nmake - all wf_resourcemodel NULL
+wf writerfilter\source\doctok nmake - all wf_doctok wf_resourcemodel NULL
+wf writerfilter\source\ooxml nmake - all wf_ooxml wf_resourcemodel NULL
+wf writerfilter\source\filter nmake - all wf_filter NULL
+wf writerfilter\source\dmapper nmake - all wf_dmapper wf_doctok wf_ooxml wf_resourcemodel NULL
+wf writerfilter\unocomponent\debugservices\doctok nmake - all wf_debugservicesdoctok NULL
+wf writerfilter\unocomponent\debugservices\ooxml nmake - all wf_debugservicesooxml NULL
+wf writerfilter\unocomponent nmake - all wf_unocomponent wf_doctok wf_ooxml wf_resourcemodel wf_debugservicesdoctok wf_debugservicesooxml NULL
+wf writerfilter\util nmake - all wf_util wf_filter wf_dmapper wf_doctok wf_ooxml wf_unocomponent NULL
diff --git a/writerfilter/prj/d.lst b/writerfilter/prj/d.lst
new file mode 100644
index 000000000000..1d09ecf9ad2b
--- /dev/null
+++ b/writerfilter/prj/d.lst
@@ -0,0 +1,8 @@
+..\%__SRC%\bin\*.exe %_DEST%\bin%_EXT%\*.exe
+..\%__SRC%\bin\*.dll %_DEST%\bin%_EXT%\*.dll
+..\%__SRC%\lib\*.so %_DEST%\lib%_EXT%\*.so
+..\%__SRC%\lib\*.dylib %_DEST%\lib%_EXT%\*.dylib
+..\%__SRC%\misc\writerfilter.component %_DEST%\xml%_EXT%\writerfilter.component
+
+mkdir: %_DEST%\inc%_EXT%\writerfilter\doctok
+..\%__SRC%\inc\doctok\sprmids.hxx %_DEST%\inc%_EXT%\writerfilter\doctok\sprmids.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/qa/complex/ooxml/testdocuments/Table5CellBorders.docx b/writerfilter/qa/complex/ooxml/testdocuments/Table5CellBorders.docx
new file mode 100644
index 000000000000..6b278175601b
--- /dev/null
+++ b/writerfilter/qa/complex/ooxml/testdocuments/Table5CellBorders.docx
Binary files differ
diff --git a/writerfilter/qa/complex/ooxml/testdocuments/TableDifferentColumns.docx b/writerfilter/qa/complex/ooxml/testdocuments/TableDifferentColumns.docx
new file mode 100644
index 000000000000..0503327ddecd
--- /dev/null
+++ b/writerfilter/qa/complex/ooxml/testdocuments/TableDifferentColumns.docx
Binary files differ
diff --git a/writerfilter/qa/complex/ooxml/testdocuments/TablePreferredWidth.docx b/writerfilter/qa/complex/ooxml/testdocuments/TablePreferredWidth.docx
new file mode 100644
index 000000000000..719b3888a018
--- /dev/null
+++ b/writerfilter/qa/complex/ooxml/testdocuments/TablePreferredWidth.docx
Binary files differ
diff --git a/writerfilter/qa/complex/ooxml/testdocuments/TableRowProperties.docx b/writerfilter/qa/complex/ooxml/testdocuments/TableRowProperties.docx
new file mode 100644
index 000000000000..775d63c97b34
--- /dev/null
+++ b/writerfilter/qa/complex/ooxml/testdocuments/TableRowProperties.docx
Binary files differ
diff --git a/writerfilter/qa/cppunittests/doctok/doctok.job b/writerfilter/qa/cppunittests/doctok/doctok.job
new file mode 100644
index 000000000000..c99341dd55d9
--- /dev/null
+++ b/writerfilter/qa/cppunittests/doctok/doctok.job
@@ -0,0 +1 @@
+doctok.test.openFile \ No newline at end of file
diff --git a/writerfilter/qa/cppunittests/doctok/export.map b/writerfilter/qa/cppunittests/doctok/export.map
new file mode 100644
index 000000000000..879fa8953788
--- /dev/null
+++ b/writerfilter/qa/cppunittests/doctok/export.map
@@ -0,0 +1,7 @@
+UDK_3_0_0 {
+ global:
+ registerAllTestFunction;
+
+ local:
+ *;
+};
diff --git a/writerfilter/qa/cppunittests/doctok/makefile.mk b/writerfilter/qa/cppunittests/doctok/makefile.mk
new file mode 100644
index 000000000000..e7de9f8b4446
--- /dev/null
+++ b/writerfilter/qa/cppunittests/doctok/makefile.mk
@@ -0,0 +1,71 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+PRJ=..$/..$/..
+
+PRJNAME=writerfilter
+TARGET=test-doctok
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+CFLAGSCXX += $(CPPUNIT_CFLAGS)
+
+# BEGIN ----------------------------------------------------------------
+# auto generated Target:doctok by codegen.pl
+SHL1OBJS= \
+ $(SLO)$/testdoctok.obj
+
+SHL1TARGET= testdoctok
+SHL1STDLIBS=\
+ $(SALLIB) \
+ $(UCBHELPERLIB) \
+ $(CPPUHELPERLIB) \
+ $(CPPULIB) \
+ $(TESTSHL2LIB) \
+ $(CPPUNITLIB)
+
+SHL1LIBS=\
+ $(SLB)$/doctok.lib
+SHL1DEPS= \
+ $(SHL1LIBS)
+
+SHL1IMPLIB= i$(SHL1TARGET)
+# SHL1DEF= $(MISC)$/$(SHL1TARGET).def
+
+DEF1NAME =$(SHL1TARGET)
+# DEF1EXPORTFILE= export.exp
+SHL1VERSIONMAP= export.map
+# auto generated Target:doctok
+# END ------------------------------------------------------------------
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+.INCLUDE : _cppunit.mk
diff --git a/writerfilter/qa/cppunittests/doctok/testdoctok.cxx b/writerfilter/qa/cppunittests/doctok/testdoctok.cxx
new file mode 100644
index 000000000000..0ed8035fb1d3
--- /dev/null
+++ b/writerfilter/qa/cppunittests/doctok/testdoctok.cxx
@@ -0,0 +1,228 @@
+// autogenerated file with codegen.pl
+
+#include <testshl/simpleheader.hxx>
+
+#include <osl/process.h>
+#include <ucbhelper/contentbroker.hxx>
+#include <cppuhelper/bootstrap.hxx>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XMultiComponentFactory.hpp>
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/container/XNameContainer.hpp>
+
+#include <doctok/exceptions.hxx>
+#include <doctok/WW8Document.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+#include <iostream>
+
+namespace testdoctok
+{
+ using namespace ::std;
+ using namespace ::com::sun::star;
+ using namespace doctok;
+
+ uno::Reference<io::XInputStream> xStream;
+ uno::Reference<uno::XComponentContext> xContext;
+ WW8Document::Pointer_t pDocument;
+ uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess > xSimpleFileAccess;
+
+ class test : public CppUnit::TestFixture
+ {
+
+ public:
+ // initialise your test code values here.
+ void setUp()
+ {
+ }
+
+ void tearDown()
+ {
+ }
+
+ void testInitUno()
+ {
+ bool bResult = false;
+
+ // initialise UCB-Broker
+ uno::Reference<uno::XComponentContext>
+ xComponentContext
+ (::cppu::defaultBootstrap_InitialComponentContext());
+ OSL_ASSERT( xComponentContext.is() );
+
+ xContext = xComponentContext;
+
+ uno::Reference<lang::XMultiComponentFactory>
+ xFactory(xComponentContext->getServiceManager() );
+ OSL_ASSERT(xFactory.is());
+
+ uno::Sequence<uno::Any> aUcbInitSequence(2);
+ aUcbInitSequence[0] <<=
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Local"));
+ aUcbInitSequence[1] <<=
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Office"));
+
+ uno::Reference<lang::XMultiServiceFactory>
+ xServiceFactory(xFactory, uno::UNO_QUERY);
+ OSL_ASSERT( xServiceFactory.is() );
+
+ if (xServiceFactory.is())
+ {
+ sal_Bool bRet =
+ ::ucb::ContentBroker::initialize(xServiceFactory,
+ aUcbInitSequence);
+
+ OSL_ASSERT(bRet);
+ if (bRet)
+ {
+ uno::Reference< ::com::sun::star::ucb::XSimpleFileAccess >
+ xNameContainer(xFactory->createInstanceWithContext
+ (::rtl::OUString::createFromAscii
+ ("com.sun.star.ucb.SimpleFileAccess" ),
+ xComponentContext), uno::UNO_QUERY );
+
+ if (xNameContainer.is())
+ {
+ xSimpleFileAccess = xNameContainer;
+
+ bResult = true;
+ }
+ }
+ }
+
+ CPPUNIT_ASSERT_MESSAGE("UNO initialization failed",
+ bResult);
+ }
+
+ // insert your test code here.
+ void testOpenFile()
+ {
+ try
+ {
+ rtl_uString *dir=NULL;
+ osl_getProcessWorkingDir(&dir);
+ rtl_uString *fname=NULL;
+ //rtl_uString_newFromAscii(&fname, "/OpenDocument-v1.doc");
+ rtl_uString_newFromAscii(&fname, "/test.doc");
+ //rtl_uString_newFromAscii(&fname, "/numbers.doc");
+ rtl_uString *absfile=NULL;
+ rtl_uString_newConcat(&absfile, dir, fname);
+
+ rtl::OUString sInputFileURL( absfile );
+
+ for (sal_uInt32 n = 0; n < sInputFileURL.getLength(); ++n)
+ {
+ sal_uChar nC = sInputFileURL[n];
+
+ if (nC < 0xff && isprint(nC))
+ clog << static_cast<char>(nC);
+ else
+ clog << ".";
+ }
+
+ clog << endl;
+
+ xStream = xSimpleFileAccess->openFileRead(sInputFileURL);
+
+ WW8Stream::Pointer_t pStream =
+ WW8DocumentFactory::createStream(xContext, xStream);
+
+ pDocument = WW8DocumentFactory::createDocument(pStream);
+ }
+ catch (doctok::Exception e)
+ {
+ clog << "Exception!!" << endl;
+ }
+
+ CPPUNIT_ASSERT_MESSAGE("creating document failed",
+ pDocument != NULL);
+
+#if 1
+ }
+
+ void testTraversal()
+ {
+#endif
+ sal_uInt32 nResult = 0;
+
+ try
+ {
+ WW8DocumentIterator::Pointer_t pIt = pDocument->begin();
+ WW8DocumentIterator::Pointer_t pItEnd = pDocument->end();
+
+ while (! pIt->equal(*pItEnd))
+ {
+ pIt->dump(clog);
+
+ clog << endl;
+
+ WW8PropertySet::Pointer_t pAttrs = pIt->getProperties();
+
+ if (pAttrs != NULL)
+ {
+ pAttrs->dump(clog);
+ }
+
+ pIt->getText().dump(clog);
+ ++(*pIt);
+ ++nResult;
+ }
+ }
+ catch (doctok::Exception e)
+ {
+ clog << "Exception!!" << endl;
+ }
+
+ char sBuffer[256];
+ snprintf(sBuffer, 255, "%d", nResult);
+ clog << "Iterator steps:" << sBuffer << endl;
+
+ CPPUNIT_ASSERT_MESSAGE("traversing document failed",
+ nResult > 0);
+ }
+
+ void testEvents()
+ {
+ try
+ {
+ Stream::Pointer_t pStream = doctok::createStreamHandler();
+
+ pDocument->resolve(*pStream);
+ }
+ catch (doctok::Exception e)
+ {
+ clog << "Exception!!" << endl;
+ }
+ }
+
+ void testEnd()
+ {
+ ::ucb::ContentBroker::deinitialize();
+ }
+
+ // Change the following lines only, if you add, remove or rename
+ // member functions of the current class,
+ // because these macros are need by auto register mechanism.
+
+ CPPUNIT_TEST_SUITE(test);
+ CPPUNIT_TEST(testInitUno);
+ CPPUNIT_TEST(testOpenFile);
+ //CPPUNIT_TEST(testTraversal);
+ CPPUNIT_TEST(testEvents);
+ CPPUNIT_TEST(testEnd);
+ CPPUNIT_TEST_SUITE_END();
+ }; // class test
+
+ // -----------------------------------------------------------------------------
+ CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(testdoctok::test, "doctok");
+} // namespace doctok
+
+
+// -----------------------------------------------------------------------------
+
+// this macro creates an empty function, which will called by the RegisterAllFunctions()
+// to let the user the possibility to also register some functions by hand.
+NOADDITIONAL;
+
diff --git a/writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.cxx b/writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.cxx
new file mode 100644
index 000000000000..996112740fac
--- /dev/null
+++ b/writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.cxx
@@ -0,0 +1,203 @@
+/*************************************************************************
+ *
+ * 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 "ExternalViewLogger.hxx"
+#include <iostream>
+#include <boost/assert.hpp>
+#include <stdio.h>
+
+#ifdef WNT
+ #define SNPRINTF(buffer, size, format, args) _snprintf(buffer, size, format, args)
+#else
+ #define SNPRINTF(buffer, size, format, args) snprintf(buffer, size, format, args)
+#endif
+
+using namespace std;
+
+namespace util
+{
+
+ NodeDescription::NodeDescription(const string& parent, const string& refersTo, const string& value, bool inUse) :
+ mParentNodeId(parent),
+ mRefersToNodeId(refersTo),
+ mNodeValue(value),
+ mInUse(inUse)
+ {}
+
+ ExternalViewLoggerImpl::ExternalViewLoggerImpl(const string& fileName) :
+ mFileName(fileName),
+ mFile(fileName.c_str())
+ {
+ if (!mFile)
+ throw "Cannot open file";
+ }
+
+ string ExternalViewLoggerImpl::getNewStyleName()
+ {
+ static int i = 0;
+ char buff[20];
+ SNPRINTF(buff, sizeof(buff), "Style_%d", i++);
+ return string(buff);
+ }
+
+ void ExternalViewLoggerImpl::beginTree()
+ {
+ mParentNodeStack.push("");
+ }
+
+ void ExternalViewLoggerImpl::dumpNodeContainer(const std::string& fileName)
+ {
+ std::ofstream file(fileName.c_str());
+ NodeContainer_t::iterator iter = mNodeContainer.begin();
+ NodeContainer_t::iterator iter_end = mNodeContainer.end();
+ for (; iter != iter_end; ++iter)
+ {
+ file << iter->first << string(" ") << iter->second->mParentNodeId << string(" ") << iter->second->mRefersToNodeId << string(" ") << iter->second->mNodeValue << endl;
+ }
+ }
+
+ void ExternalViewLoggerImpl::endTree()
+ {
+ //dumpNodeContainer(mFileName + string(".dmp"));
+
+ mFile << "digraph {" << endl;
+ mFile << "Root [shape=box, color=grey];" << endl;
+
+ while (!mParentNodeStack.empty())
+ mParentNodeStack.pop();
+
+ mParentNodeStack.push("Root");
+
+ NodeContainer_t::iterator iter = mNodeContainer.begin();
+ NodeContainer_t::iterator iter_end = mNodeContainer.end();
+ for (; iter != iter_end; ++iter)
+ {
+ if (isUnreferencedLeaf(iter->first))
+ {
+ string newStyleName = getNewStyleName();
+ mFile << newStyleName << " [shape=box];" << endl;
+ mFile << mParentNodeStack.top() << " -> " << newStyleName << endl;
+ mParentNodeStack.push(newStyleName);
+ dumpTree(iter->first);
+ mParentNodeStack.pop();
+ }
+ }
+
+ mFile << "}" << endl;
+ }
+
+ void ExternalViewLoggerImpl::beginNode(const std::string& nodeId, const std::string& value, const std::string& refersToNodeId, bool inUse)
+ {
+ mNodeContainer.insert(
+ NodeContainer_t::value_type(nodeId,
+ NodeDescription::Pointer_t(new NodeDescription(mParentNodeStack.top(), refersToNodeId, value, inUse))));
+ mParentNodeStack.push(nodeId);
+ }
+
+ void ExternalViewLoggerImpl::endNode(const std::string& nodeId)
+ {
+ mParentNodeStack.pop();
+ }
+
+ bool ExternalViewLoggerImpl::isLeaf(const std::string& nodeId)
+ {
+ bool isLeaf = true;
+
+ NodeContainer_t::const_iterator iter = mNodeContainer.begin();
+ NodeContainer_t::const_iterator iter_end = mNodeContainer.end();
+ for (; iter != iter_end; ++iter)
+ {
+ if (iter->second->mParentNodeId == nodeId)
+ {
+ isLeaf = false;
+ break;
+ }
+ }
+ return isLeaf;
+ }
+
+ bool ExternalViewLoggerImpl::isUnreferencedLeaf(const string& nodeId)
+ {
+ return isLeaf(nodeId) && !isReferenced(nodeId);
+ }
+
+ bool ExternalViewLoggerImpl::isReferenced(const string& nodeId)
+ {
+ bool isReferenced = false;
+
+ NodeContainer_t::const_iterator iter = mNodeContainer.begin();
+ NodeContainer_t::const_iterator iter_end = mNodeContainer.end();
+ for (; iter != iter_end; ++iter)
+ {
+ if (iter->second->mRefersToNodeId == nodeId)
+ {
+ isReferenced = true;
+ break;
+ }
+ }
+ return isReferenced;
+ }
+
+ bool ExternalViewLoggerImpl::isReferingToOtherNode(const string& nodeId)
+ {
+ NodeContainer_t::const_iterator iter = mNodeContainer.find(nodeId);
+ BOOST_ASSERT(iter != mNodeContainer.end());
+ return !iter->second->mRefersToNodeId.empty();
+ }
+
+ bool ExternalViewLoggerImpl::hasParent(const string& nodeId)
+ {
+ NodeContainer_t::const_iterator iter = mNodeContainer.find(nodeId);
+ BOOST_ASSERT(iter != mNodeContainer.end());
+ return iter->second->mParentNodeId != "Root" && iter->second->mParentNodeId != "";
+ }
+
+ string ExternalViewLoggerImpl::getValue(const string& nodeId)
+ {
+ return mNodeContainer.find(nodeId)->second->mNodeValue;
+ }
+
+ void ExternalViewLoggerImpl::dumpTree(const string& nodeId)
+ {
+ if (nodeId != "Root")
+ {
+ mFile << nodeId << " [label=\"(" << getValue(nodeId) << ")\",shape=box];" << endl;
+ mFile << mParentNodeStack.top() << " -> " << nodeId << ";" << endl;
+ if (isReferingToOtherNode(nodeId))
+ {
+ mParentNodeStack.push(nodeId);
+ dumpTree(mNodeContainer.find(nodeId)->second->mRefersToNodeId);
+ mParentNodeStack.pop();
+ }
+ }
+
+ if (hasParent(nodeId))
+ dumpTree(mNodeContainer.find(nodeId)->second->mParentNodeId);
+ }
+
+} // namespace util
+
diff --git a/writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.hxx b/writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.hxx
new file mode 100644
index 000000000000..dfa5dd736b41
--- /dev/null
+++ b/writerfilter/qa/cppunittests/odiapi/ExternalViewLogger.hxx
@@ -0,0 +1,90 @@
+/*************************************************************************
+ *
+ * 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_EXTERNALVIEWLOGGER_HXX
+#define INCLUDED_EXTERNALVIEWLOGGER_HXX
+
+#ifndef INCLUDED_LOGGER_HXX
+#include <odiapi/props/Logger.hxx>
+#endif
+
+#include <fstream>
+#include <stack>
+#include <map>
+#include <utility>
+#include <boost/shared_ptr.hpp>
+
+namespace util {
+
+ struct NodeDescription
+ {
+ typedef boost::shared_ptr<NodeDescription> Pointer_t;
+
+ NodeDescription(const std::string& parent, const std::string& refersTo, const std::string& value, bool inUse);
+
+ std::string mParentNodeId;
+ std::string mRefersToNodeId;
+ std::string mNodeValue;
+ bool mInUse;
+ };
+
+ /** A file logger
+ */
+ class ExternalViewLoggerImpl : public Logger
+ {
+ public:
+ ExternalViewLoggerImpl(const std::string& fileName);
+
+ virtual void beginTree();
+ virtual void endTree();
+
+ virtual void beginNode(const std::string& nodeId, const std::string& value, const std::string& refersToNodeId, bool inUse);
+ virtual void endNode(const std::string& nodeId);
+
+ private:
+ bool isLeaf(const std::string& nodeId);
+ bool isUnreferencedLeaf(const std::string& nodeId);
+ bool isReferenced(const std::string& nodeId);
+ bool isReferingToOtherNode(const std::string& nodeId);
+ bool hasParent(const std::string& nodeId);
+ void dumpTree(const std::string& nodeId);
+ std::string getValue(const std::string& nodeId);
+ std::string getNewStyleName();
+ void dumpNodeContainer(const std::string& fileName);
+
+ private:
+ typedef std::map<std::string, NodeDescription::Pointer_t> NodeContainer_t;
+
+ std::string mFileName;
+ NodeContainer_t mNodeContainer;
+ std::ofstream mFile;
+ std::stack<std::string> mParentNodeStack;
+ };
+
+} // namespace util
+
+#endif // INCLUDED_LOGGER_HXX
diff --git a/writerfilter/qa/cppunittests/odiapi/FileLoggerImpl.cxx b/writerfilter/qa/cppunittests/odiapi/FileLoggerImpl.cxx
new file mode 100644
index 000000000000..28b4b3776fe1
--- /dev/null
+++ b/writerfilter/qa/cppunittests/odiapi/FileLoggerImpl.cxx
@@ -0,0 +1,80 @@
+/*************************************************************************
+ *
+ * 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 "FileLoggerImpl.hxx"
+#include <iostream>
+
+using namespace std;
+
+namespace util
+{
+
+ FileLoggerImpl::FileLoggerImpl(const string& fileName) :
+ file_(fileName.c_str())
+ {
+ if (!file_)
+ throw "Cannot open file";
+ }
+
+ void FileLoggerImpl::beginTree()
+ {
+ file_ << "digraph {" << endl;
+ }
+
+ void FileLoggerImpl::endTree()
+ {
+ file_ << "}" << endl;
+ }
+
+ void FileLoggerImpl::beginNode(const std::string& nodeId, const std::string& value, const std::string& refersToNodeId, bool inUse)
+ {
+ if (!nodeStack_.empty())
+ {
+ if (inUse)
+ file_ << nodeId << " [ label=\"(" << value << ")\", shape=box, color=grey, style=filled ];"<< endl;
+ else
+ file_ << nodeId << " [ label=\"(" << value << ")\" ];"<< endl;
+
+ file_ << nodeStack_.top() << " -> " << nodeId << ";" << endl;
+
+ if (!refersToNodeId.empty())
+ file_ << nodeId << " -> " << refersToNodeId << " [ color=grey, weight=0 ];" << endl;
+ }
+ else
+ {
+ file_ << nodeId << " [ label=\"(" << value << ")\", shape=diamond ];"<< endl;
+ }
+ nodeStack_.push(nodeId);
+ }
+
+ void FileLoggerImpl::endNode(const std::string& nodeId)
+ {
+ nodeStack_.pop();
+ }
+
+} // namespace util
+
diff --git a/writerfilter/qa/cppunittests/odiapi/FileLoggerImpl.hxx b/writerfilter/qa/cppunittests/odiapi/FileLoggerImpl.hxx
new file mode 100644
index 000000000000..c5ec03724c12
--- /dev/null
+++ b/writerfilter/qa/cppunittests/odiapi/FileLoggerImpl.hxx
@@ -0,0 +1,57 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_FILELOGGERIMPL_HXX
+#define INCLUDED_FILELOGGERIMPL_HXX
+
+#include <odiapi/props/Logger.hxx>
+#include <fstream>
+#include <stack>
+
+namespace util {
+
+/** A file logger
+ */
+class FileLoggerImpl : public util::Logger
+{
+public:
+ FileLoggerImpl(const std::string& fileName);
+
+ virtual void beginTree();
+ virtual void endTree();
+
+ virtual void beginNode(const std::string& nodeId, const std::string& value, const std::string& refersToNodeId, bool inUse);
+ virtual void endNode(const std::string& nodeId);
+
+private:
+ std::ofstream file_;
+ std::stack<std::string> nodeStack_;
+};
+
+} // namespace util
+
+#endif // INCLUDED_LOGGER_HXX
diff --git a/writerfilter/qa/cppunittests/odiapi/export.exp b/writerfilter/qa/cppunittests/odiapi/export.exp
new file mode 100644
index 000000000000..a13529da5876
--- /dev/null
+++ b/writerfilter/qa/cppunittests/odiapi/export.exp
@@ -0,0 +1 @@
+registerAllTestFunction
diff --git a/writerfilter/qa/cppunittests/odiapi/export.map b/writerfilter/qa/cppunittests/odiapi/export.map
new file mode 100644
index 000000000000..7321bbca16ad
--- /dev/null
+++ b/writerfilter/qa/cppunittests/odiapi/export.map
@@ -0,0 +1,34 @@
+#*************************************************************************
+#
+# 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.
+#
+#*************************************************************************
+
+UDK_3_0_0 {
+ global:
+ registerAllTestFunction;
+
+ local:
+ *;
+};
diff --git a/writerfilter/qa/cppunittests/odiapi/makefile.mk b/writerfilter/qa/cppunittests/odiapi/makefile.mk
new file mode 100644
index 000000000000..6fc9adcd2f51
--- /dev/null
+++ b/writerfilter/qa/cppunittests/odiapi/makefile.mk
@@ -0,0 +1,76 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+PRJ=..$/..$/..
+
+PRJNAME=writerfilter
+TARGET=test-odiapi
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+CFLAGSCXX += $(CPPUNIT_CFLAGS)
+
+# BEGIN ----------------------------------------------------------------
+# auto generated Target:testjob by codegen.pl
+
+.IF "$(GUI)" == "WNT"
+ #CFLAGS+=/Ob1
+.ENDIF
+
+SHL1OBJS=\
+ $(SLO)$/testProperty.obj \
+ $(SLO)$/FileLoggerImpl.obj\
+ $(SLO)$/ExternalViewLogger.obj\
+ $(SLO)$/testCore.obj
+
+SHL1TARGET=$(TARGET)
+SHL1STDLIBS=$(SALLIB) $(TOOLSLIB) $(TESTSHL2LIB) $(CPPUNITLIB)
+
+.IF "$(GUI)"=="WNT"
+SHL1STDLIBS+= $(LB)$/iodiapi.lib
+.ELIF "$(GUI)"=="UNX" && "$(GUIBASE)"!="aqua"
+SHL1STDLIBS+=$(LB)$/libodiapi.so
+.ELIF "$(GUI)"=="UNX" && "$(GUIBASE)"=="aqua"
+SHL1STDLIBS+=$(LB)$/libodiapi.dylib
+.ENDIF
+
+SHL1IMPLIB= i$(SHL1TARGET)
+
+# SHL1DEF= $(MISC)$/$(SHL1TARGET).def
+
+DEF1NAME =$(SHL1TARGET)
+
+SHL1VERSIONMAP = export.map
+
+# END ------------------------------------------------------------------
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+.INCLUDE : _cppunit.mk
diff --git a/writerfilter/qa/cppunittests/odiapi/testCore.cxx b/writerfilter/qa/cppunittests/odiapi/testCore.cxx
new file mode 100644
index 000000000000..774cc4722df4
--- /dev/null
+++ b/writerfilter/qa/cppunittests/odiapi/testCore.cxx
@@ -0,0 +1,172 @@
+/*************************************************************************
+ *
+ * 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 <testshl/simpleheader.hxx>
+#include <odiapi/core/Node.hxx>
+#include <odiapi/props/Properties.hxx>
+
+using namespace odiapi::core;
+using namespace odiapi::props;
+using namespace writerfilter;
+using namespace std;
+
+class TestCore : public CppUnit::TestFixture
+{
+public:
+ void testCreateCore()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+ PropertyBag_Pointer_t pb = createPropertyBag();
+
+ pb->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ PropertyPoolHandle_Pointer_t ph = pool->insert(pb);
+
+ Node::Pointer_t node = createNode(NS_style::LN_char, ph, "NS_style::LN_char");
+
+ CPPUNIT_ASSERT_MESSAGE("Create node failed wrong node id", node->getId() == NS_style::LN_char);
+ CPPUNIT_ASSERT_MESSAGE("Create node failed wrong text", node->getText() == "NS_style::LN_char");
+ CPPUNIT_ASSERT_MESSAGE("Create node failed wrong pool handle", node->getProperties() == ph);
+ }
+
+ void testInsertSibling()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+ PropertyBag_Pointer_t pb = createPropertyBag();
+
+ pb->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ PropertyPoolHandle_Pointer_t ph = pool->insert(pb);
+
+ Node::Pointer_t node1 = createNode(NS_style::LN_char, ph, "Text");
+ Node::Pointer_t node2 = createNode(NS_style::LN_char, ph, "\\par");
+
+ node1->insertSibling(node2);
+
+ string postfixSeq = node1->getText();
+ const Node* n = node1.get();
+ while (n->hasNext())
+ {
+ n = &n->getNext();
+ postfixSeq = postfixSeq + n->getText();
+ }
+
+ CPPUNIT_ASSERT_MESSAGE("Insert sibling failed", postfixSeq == "Text\\par");
+
+ Node::Pointer_t node3 = createNode(NS_style::LN_char, ph, "\\span");
+
+ node1->insertSibling(node3);
+
+ postfixSeq = node1->getText();
+ n = node1.get();
+ while (n->hasNext())
+ {
+ n = &n->getNext();
+ postfixSeq = postfixSeq + n->getText();
+ }
+
+ CPPUNIT_ASSERT_MESSAGE("Insert sibling failed", postfixSeq == "Text\\span\\par");
+ }
+
+ void testAppendChildren()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+ PropertyBag_Pointer_t pb = createPropertyBag();
+
+ pb->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ PropertyPoolHandle_Pointer_t ph = pool->insert(pb);
+
+ Node::Pointer_t node1 = createNode(NS_style::LN_char, ph, "Text");
+ const Node* pn1 = node1.get();
+
+ Node::Pointer_t node2 = createNode(NS_style::LN_char, ph, "\\par");
+
+ node2->appendChildren(node1);
+
+ CPPUNIT_ASSERT_MESSAGE("Append children failed", &node2->getFirstChild() == pn1);
+
+ const Node* n = &node2->getFirstChild();
+ string postfixSeq = n->getText() + n->getNext().getText();
+
+ CPPUNIT_ASSERT_MESSAGE("Append children failed", postfixSeq == "Text\\par");
+ }
+
+ void testCore()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+ PropertyBag_Pointer_t pb = createPropertyBag();
+
+ pb->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ PropertyPoolHandle_Pointer_t ph = pool->insert(pb);
+
+ Node::Pointer_t node1 = createNode(NS_style::LN_char, ph, "A");
+ Node::Pointer_t node2 = createNode(NS_style::LN_char, ph, "\\span");
+
+ node2->appendChildren(node1);
+
+ Node::Pointer_t node3 = createNode(NS_style::LN_char, ph, "B");
+ Node::Pointer_t node4 = createNode(NS_style::LN_char, ph, "\\span");
+
+ node4->appendChildren(node3);
+
+ node2->insertSibling(node4);
+
+ Node::Pointer_t node5 = createNode(NS_style::LN_char, ph, "\\par");
+
+ node5->appendChildren(node2);
+
+ Node::Pointer_t node6 = createNode(NS_style::LN_char, ph, "C");
+ Node::Pointer_t node7 = createNode(NS_style::LN_char, ph, "\\span");
+
+ node7->appendChildren(node6);
+
+ node5->appendChildren(node7);
+
+
+ string postfixSeq = node5->getText();
+ const Node* n = node5.get();
+ while (n->hasPrevious())
+ {
+ n = &n->getPrevious();
+ postfixSeq = postfixSeq + n->getText();
+ }
+
+ CPPUNIT_ASSERT_MESSAGE("Insert sibling failed", postfixSeq == "\\par\\spanC\\spanB\\spanA");
+ }
+
+ CPPUNIT_TEST_SUITE(TestCore);
+ CPPUNIT_TEST(testCreateCore);
+ CPPUNIT_TEST(testInsertSibling);
+ CPPUNIT_TEST(testAppendChildren);
+ CPPUNIT_TEST(testCore);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+//#####################################
+// register test suites
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(TestCore, "TestCore");
+
+//NOADDITIONAL;
diff --git a/writerfilter/qa/cppunittests/odiapi/testProperty.cxx b/writerfilter/qa/cppunittests/odiapi/testProperty.cxx
new file mode 100644
index 000000000000..621dda65cfa3
--- /dev/null
+++ b/writerfilter/qa/cppunittests/odiapi/testProperty.cxx
@@ -0,0 +1,682 @@
+/*************************************************************************
+ *
+ * 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 <testshl/simpleheader.hxx>
+#include <odiapi/props/Properties.hxx>
+#include "FileLoggerImpl.hxx"
+#include "ExternalViewLogger.hxx"
+#include <osl/file.hxx>
+#include <osl/thread.hxx>
+#include <exception>
+#include <stdio.h>
+
+using namespace odiapi::props;
+using namespace writerfilter;
+using namespace std;
+using namespace util;
+using namespace osl;
+using namespace rtl;
+
+/** Helper function, get a temporary file name
+ */
+OString getTempFileName(const OUString& fileName)
+{
+ OUString ousTmpUrl;
+ FileBase::getTempDirURL(ousTmpUrl);
+ if (!ousTmpUrl.endsWithIgnoreAsciiCaseAsciiL("/", 1))
+ ousTmpUrl += OUString::createFromAscii("/");
+ ousTmpUrl += fileName;
+
+ OUString sysTmpPath;
+ FileBase::getSystemPathFromFileURL(ousTmpUrl, sysTmpPath);
+
+ return OUStringToOString(sysTmpPath, osl_getThreadTextEncoding());
+}
+
+class TestProperty : public CppUnit::TestFixture
+{
+public:
+ void testCreateIntProperty()
+ {
+ Property::Pointer_t intProp = createIntegerProperty(NS_fo::LN_font_weight, 35);
+ CPPUNIT_ASSERT_MESSAGE("Wrong property id", intProp->getId() == NS_fo::LN_font_weight);
+ CPPUNIT_ASSERT_MESSAGE("Wrong int value", intProp->getIntValue() == 35);
+ CPPUNIT_ASSERT_MESSAGE("Wrong string value", intProp->getStringValue() == "35");
+ }
+
+ void testCreateStringProperty()
+ {
+ Property::Pointer_t strProp = createStringProperty(NS_style::LN_font_face, "Times New Roman");
+ CPPUNIT_ASSERT_MESSAGE("Wrong property id", strProp->getId() == NS_style::LN_font_face);
+ CPPUNIT_ASSERT_MESSAGE("Wrong string value", strProp->getStringValue() == "Times New Roman");
+ try
+ {
+ strProp->getIntValue();
+ }
+ catch(const logic_error& ex)
+ {
+ return;
+ }
+ CPPUNIT_ASSERT_MESSAGE("Operation getIntValue should not be supported by StringProperty", false);
+ }
+
+ void testCreateCompositeProperty()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+
+ PropertyBag_Pointer_t pb = createPropertyBag();
+ pb->insert(createStringProperty(NS_style::LN_font_face, "Times"));
+ pb->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ Property::Pointer_t cp1 = createCompositeProperty(NS_style::LN_paragraph_properties, pool->insert(pb));
+
+ CPPUNIT_ASSERT_MESSAGE("Failed to get NS_style::LN_font_face", cp1->findChild(NS_style::LN_font_face)->getStringValue() == "Times");
+ CPPUNIT_ASSERT_MESSAGE("Failed to get NS_fo::LN_font_weight", cp1->findChild(NS_fo::LN_font_weight)->getIntValue() == 12);
+ }
+
+ void testCompareSimpleProperties()
+ {
+ Property::Pointer_t pb1 = createStringProperty(NS_style::LN_font_face, "Times New Roman");
+ Property::Pointer_t pb2 = createStringProperty(NS_style::LN_font_face, "Times New Roman");
+ CPPUNIT_ASSERT_MESSAGE("pb1 == pb2", pb1 == pb2);
+
+ Property::Pointer_t fw = createIntegerProperty(NS_fo::LN_font_weight, 12);
+ Property::Pointer_t ff = createStringProperty(NS_style::LN_font_face, "Times");
+
+ CPPUNIT_ASSERT_MESSAGE("fw == fw failed", fw == fw);
+ CPPUNIT_ASSERT_MESSAGE("fw > ff failed", ff < fw);
+ CPPUNIT_ASSERT_MESSAGE("ff == ff failed", ff == ff);
+ CPPUNIT_ASSERT_MESSAGE("!(ff < fw) failed", !(fw < ff));
+ }
+
+ void testCompareCompositeProperties()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+
+ PropertyBag_Pointer_t pb1 = createPropertyBag();
+ pb1->insert(createStringProperty(NS_style::LN_font_face, "Times"));
+ pb1->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ Property::Pointer_t cp1 = createCompositeProperty(NS_style::LN_paragraph_properties, pool->insert(pb1));
+
+ PropertyBag_Pointer_t ps2 = createPropertyBag();
+ ps2->insert(createStringProperty(NS_style::LN_font_face, "Times"));
+ ps2->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ Property::Pointer_t cp2 = createCompositeProperty(NS_style::LN_paragraph_properties, pool->insert(ps2));
+
+ CPPUNIT_ASSERT_MESSAGE("cp1 == cp2 failed", cp1 == cp2);
+ }
+
+ void testPropertyBagAsStructure()
+ {
+ PropertyBag_Pointer_t propSeq = createPropertyBag();
+ Property::Pointer_t fontWeight12 = createIntegerProperty(NS_fo::LN_font_weight, 12);
+
+ propSeq->insert(fontWeight12);
+ CPPUNIT_ASSERT_MESSAGE("Inserting property into property sequence failed", propSeq->size() == 1);
+ CPPUNIT_ASSERT_MESSAGE("Property not in property sequence", propSeq->find(NS_fo::LN_font_weight)->getIntValue() == 12);
+ }
+
+ void testNoDuplicatesInPropertyBagStructures()
+ {
+ PropertyBag_Pointer_t propSeq = createPropertyBag();
+ Property::Pointer_t fontWeight12 = createIntegerProperty(NS_fo::LN_font_weight, 12);
+ propSeq->insert(fontWeight12);
+
+ CPPUNIT_ASSERT_MESSAGE("Expect property sequence with 1 element", propSeq->size() == 1);
+ CPPUNIT_ASSERT_MESSAGE("Expect property sequence with one int value 12", propSeq->find(NS_fo::LN_font_weight)->getIntValue() == 12);
+
+ Property::Pointer_t fontWeight14 = createIntegerProperty(NS_fo::LN_font_weight, 14);
+ propSeq->insert(fontWeight14);
+
+ CPPUNIT_ASSERT_MESSAGE("Expect property sequence with 1 element", propSeq->size() == 1);
+ CPPUNIT_ASSERT_MESSAGE("Expect property sequence with one int value 14", propSeq->find(NS_fo::LN_font_weight)->getIntValue() == 14);
+ }
+
+ void testPropertyBagAsArray()
+ {
+ PropertyBag_Pointer_t pb = createPropertyBag();
+ Property::Pointer_t fontWeight12 = createIntegerProperty(NS_fo::LN_font_weight, 12);
+
+ pb->insert(0, fontWeight12);
+
+ CPPUNIT_ASSERT_MESSAGE("Inserting property into property sequence failed", pb->size() == 1);
+ CPPUNIT_ASSERT_MESSAGE("Property not in property sequence", pb->get(0)->getIntValue() == 12);
+ CPPUNIT_ASSERT_MESSAGE("Wrong property id", pb->get(0)->getId() == NS_fo::LN_font_weight);
+
+ Iterator<Property::Pointer_t>::Pointer_t iter = pb->createIterator();
+ for (iter->first(); !iter->isDone(); iter->next())
+ {
+ CPPUNIT_ASSERT_MESSAGE("Test property bag as array failed", iter->getCurrent()->getId() == NS_fo::LN_font_weight);
+ }
+ }
+
+ void testCopyPropertyBag()
+ {
+ PropertyBag_Pointer_t propBag = createPropertyBag();
+ Property::Pointer_t fontWeight12 = createIntegerProperty(NS_fo::LN_font_weight, 12);
+
+ propBag->insert(0, fontWeight12);
+
+ CPPUNIT_ASSERT_MESSAGE("Inserting property into property sequence failed", propBag->size() == 1);
+ CPPUNIT_ASSERT_MESSAGE("Property not in property sequence", propBag->get(0)->getIntValue() == 12);
+ CPPUNIT_ASSERT_MESSAGE("Wrong property id", propBag->get(0)->getId() == NS_fo::LN_font_weight);
+
+ PropertyBag_Pointer_t propBagCopy = propBag->copy();
+
+ CPPUNIT_ASSERT_MESSAGE("Copy property bag failed, distinct instances expected", propBag.get() != propBagCopy.get());
+
+ CPPUNIT_ASSERT_MESSAGE("Copy property bag failed", propBagCopy->size() == 1);
+ CPPUNIT_ASSERT_MESSAGE("Copy property bag failed", propBagCopy->get(0)->getIntValue() == 12);
+ CPPUNIT_ASSERT_MESSAGE("Copy property bag failed", propBagCopy->get(0)->getId() == NS_fo::LN_font_weight);
+ }
+
+ void testClearPropertyBag()
+ {
+ PropertyBag_Pointer_t pb = createPropertyBag();
+ pb->insert(createStringProperty(NS_style::LN_font_face, "Times"));
+ pb->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+
+ CPPUNIT_ASSERT_MESSAGE("Insert into property bag failed", pb->size() == 2);
+
+ pb->clear();
+
+ CPPUNIT_ASSERT_MESSAGE("Clearing property bag failed", pb->size() == 0);
+ }
+
+ void testSortPropertyBag()
+ {
+ QName_t sortedOrder [] = { NS_style::LN_font_face, NS_fo::LN_font_weight };
+
+ PropertyBag_Pointer_t pb = createPropertyBag();
+ pb->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ pb->insert(createStringProperty(NS_style::LN_font_face, "Times"));
+
+ pb->sort();
+
+ Iterator<Property::Pointer_t>::Pointer_t iter = pb->createIterator();
+ int i = 0;
+ for (iter->first(); !iter->isDone(); iter->next(), i++)
+ {
+ CPPUNIT_ASSERT_MESSAGE("Sorting property bag failed", sortedOrder[i] == iter->getCurrent()->getId());
+ }
+ }
+
+ void testDuplicateValuesInArray()
+ {
+ PropertyBag_Pointer_t propSeq = createPropertyBag();
+
+ Property::Pointer_t fontWeight1 = createIntegerProperty(NS_fo::LN_font_weight, 12);
+ propSeq->insert(0, fontWeight1);
+
+ Property::Pointer_t fontWeight2 = createIntegerProperty(NS_fo::LN_font_weight, 12);
+ propSeq->insert(1, fontWeight2);
+
+ CPPUNIT_ASSERT_MESSAGE("Inserting property into property sequence failed", propSeq->size() == 2);
+ CPPUNIT_ASSERT_MESSAGE("Property not in property sequence",
+ propSeq->get(0)->getId() == propSeq->get(1)->getId() &&
+ propSeq->get(0)->getIntValue() == propSeq->get(1)->getIntValue());
+ }
+
+ void testPropertyPool()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+
+ PropertyBag_Pointer_t pb1 = createPropertyBag();
+ pb1->insert(createStringProperty(NS_style::LN_font_face, "Times"));
+ pb1->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ PropertyPoolHandle_Pointer_t ph1 = pool->insert(pb1);
+
+ PropertyBag_Pointer_t ps2 = createPropertyBag();
+ ps2->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ ps2->insert(createStringProperty(NS_style::LN_font_face, "Times"));
+ PropertyPoolHandle_Pointer_t ph2 = pool->insert(ps2);
+
+ CPPUNIT_ASSERT_MESSAGE("ph1 == ph2 failed", ph1 == ph2);
+
+ PropertyBag_Pointer_t ps3 = createPropertyBag();
+ ps3->insert(createIntegerProperty(NS_fo::LN_font_weight, 14));
+ ps3->insert(createStringProperty(NS_style::LN_font_face, "Times"));
+
+ PropertyPoolHandle_Pointer_t ph3 = pool->insert(ps3);
+
+ CPPUNIT_ASSERT_MESSAGE("ph2 != ph3 failed", ph2 != ph3);
+
+ PropertyBag_Pointer_t ps4 = createPropertyBag();
+ ps4->insert(0, createIntegerProperty(NS_fo::LN_font_weight, 12));
+ ps4->insert(1, createIntegerProperty(NS_fo::LN_font_weight, 12));
+ ps4->insert(2, createIntegerProperty(NS_fo::LN_font_weight, 12));
+ ps4->insert(3, createIntegerProperty(NS_fo::LN_font_weight, 12));
+
+ pool->insert(ps4);
+
+ OString tmpFileName = getTempFileName(OUString::createFromAscii("testPropertyPool_int.dot"));
+ printf("Pool dump: %s\n", tmpFileName.getStr());
+ FileLoggerImpl fl(tmpFileName.getStr());
+ pool->dump(&fl);
+
+ OString tmpFileName2 = getTempFileName(OUString::createFromAscii("testPropertyPool_ext.dot"));
+ printf("Pool dump: %s\n", tmpFileName2.getStr());
+ ExternalViewLoggerImpl evl(tmpFileName2.getStr());
+ pool->dump(&evl);
+ }
+
+ void testCompareEqualPropertyTypesWithDifferentIdsDoesNotFail()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+
+ PropertyBag_Pointer_t pb1 = createPropertyBag();
+ pb1->insert(createIntegerProperty(NS_style::LN_tab_stop, 100));
+ pb1->insert(createStringProperty(NS_style::LN_type, "left"));
+ Property::Pointer_t tab100 = createCompositeProperty(NS_style::LN_tab_stop, pool->insert(pb1));
+
+ pb1->clear();
+ pb1->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ pb1->insert(createStringProperty(NS_style::LN_font_face, "Times New Roman"));
+ Property::Pointer_t charProps1 = createCompositeProperty(NS_style::LN_char, pool->insert(pb1));
+
+ pb1->clear();
+ pb1->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ pb1->insert(createStringProperty(NS_style::LN_font_face, "Times New Roman"));
+ Property::Pointer_t charProps2 = createCompositeProperty(NS_style::LN_char, pool->insert(pb1));
+
+ CPPUNIT_ASSERT_MESSAGE("CharProps1 == CharProps2 failed", charProps1 == charProps2);
+ }
+
+ void testComplexParagraphProperty()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+ PropertyBag_Pointer_t pb1 = createPropertyBag();
+
+ pb1->insert(createIntegerProperty(NS_style::LN_position, 100));
+ pb1->insert(createStringProperty(NS_style::LN_type, "left"));
+ Property::Pointer_t tab100 = createCompositeProperty(NS_style::LN_tab_stop, pool->insert(pb1));
+
+ pb1->clear();
+
+ pb1->insert(createIntegerProperty(NS_style::LN_position, 200));
+ pb1->insert(createStringProperty(NS_style::LN_type, "center"));
+ Property::Pointer_t tab200 = createCompositeProperty(NS_style::LN_tab_stop, pool->insert(pb1));
+
+ CPPUNIT_ASSERT_MESSAGE("tab100 != tab200 failed", tab100 != tab200);
+
+ pb1->clear();
+ pb1->insert(100, tab100);
+ pb1->insert(200, tab200);
+ Property::Pointer_t tabs = createCompositeProperty(NS_style::LN_tab_stops, pool->insert(pb1));
+
+ pb1->clear();
+ pb1->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ pb1->insert(createStringProperty(NS_style::LN_font_face, "Times New Roman"));
+ Property::Pointer_t charProps = createCompositeProperty(NS_style::LN_char, pool->insert(pb1));
+
+ pb1->clear();
+ pb1->insert(createIntegerProperty(NS_fo::LN_line_height, 20));
+ pb1->insert(tabs);
+ pb1->insert(charProps);
+ Property::Pointer_t paraProps = createCompositeProperty(NS_style::LN_paragraph_properties, pool->insert(pb1));
+
+ pb1->clear();
+ pb1->insert(createIntegerProperty(NS_style::LN_position, 100));
+ pb1->insert(createStringProperty(NS_style::LN_type, "left"));
+ Property::Pointer_t tab300 = createCompositeProperty(NS_style::LN_tab_stop, pool->insert(pb1));
+
+ pb1->clear();
+ pb1->insert(createIntegerProperty(NS_style::LN_position, 200));
+ pb1->insert(createStringProperty(NS_style::LN_type, "center"));
+ Property::Pointer_t tab400 = createCompositeProperty(NS_style::LN_tab_stop, pool->insert(pb1));
+
+ CPPUNIT_ASSERT_MESSAGE("tab300 != tab400 failed", tab300 != tab400);
+
+ pb1->clear();
+ pb1->insert(100, tab300);
+ pb1->insert(200, tab400);
+ Property::Pointer_t tabulators = createCompositeProperty(NS_style::LN_tab_stops, pool->insert(pb1));
+
+ CPPUNIT_ASSERT_MESSAGE("tabs == tabulators failed", tabs == tabulators);
+
+ pb1->clear();
+ pb1->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ pb1->insert(createStringProperty(NS_style::LN_font_face, "Times New Roman"));
+ Property::Pointer_t characterProps = createCompositeProperty(NS_style::LN_char, pool->insert(pb1));
+
+ CPPUNIT_ASSERT_MESSAGE("Comparison of character properties failed", charProps == characterProps);
+
+ pb1->clear();
+ pb1->insert(createIntegerProperty(NS_fo::LN_line_height, 20));
+ pb1->insert(tabulators);
+ pb1->insert(characterProps);
+ Property::Pointer_t paragraphProps = createCompositeProperty(NS_style::LN_paragraph_properties, pool->insert(pb1));
+
+ CPPUNIT_ASSERT_MESSAGE("paraProps == failed failed", paraProps == paragraphProps);
+
+ OString tmpFileName = getTempFileName(OUString::createFromAscii("testComplexParaProps_int.dot"));
+ printf("Pool dump: %s\n", tmpFileName.getStr());
+ FileLoggerImpl fl(tmpFileName.getStr());
+ pool->dump(&fl);
+
+ OString tmpFileName2 = getTempFileName(OUString::createFromAscii("testComplexParaProps_ext.dot"));
+ printf("Pool dump: %s\n", tmpFileName2.getStr());
+ ExternalViewLoggerImpl evl(tmpFileName2.getStr());
+ pool->dump(&evl);
+ }
+
+ void testInsertEmptyPropertyBag()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+ PropertyBag_Pointer_t pb = createPropertyBag();
+ PropertyPoolHandle_Pointer_t ph = pool->insert(pb);
+
+ CPPUNIT_ASSERT_MESSAGE("Inserting empty property bag failed", ph->getPropertyBag()->size() == 0);
+ }
+
+ void testDumpPropertyPool()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+ PropertyBag_Pointer_t pb1 = createPropertyBag();
+ pb1->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ pb1->insert(createStringProperty(NS_style::LN_font_face, "Times"));
+ PropertyPoolHandle_Pointer_t ph1 = pool->insert(pb1);
+
+ Iterator<PropertyBag_Pointer_t>::Pointer_t iter = pool->createIterator();
+
+ int i = 0;
+ for (iter->first(); !iter->isDone(); iter->next(), i++) /* nothing to do */;
+
+ CPPUNIT_ASSERT_MESSAGE("Dump PropertyBags failed", i == 1);
+
+ /* Insert an equal PropertyBag again, as PropertyBags in the
+ pool are unique there must be still just one PropertyBag in the pool
+ */
+ PropertyBag_Pointer_t pb2 = createPropertyBag();
+ pb2->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ pb2->insert(createStringProperty(NS_style::LN_font_face, "Times"));
+ PropertyPoolHandle_Pointer_t ph2 = pool->insert(pb2);
+
+ iter = pool->createIterator();
+
+ i = 0;
+ for (iter->first(); !iter->isDone(); iter->next(), i++) /* nothing to do */;
+
+ CPPUNIT_ASSERT_MESSAGE("Dump PropertyBags failed", i == 1);
+
+ { // scope
+
+ /* Insert a different PropertyBag into the pool now there must be
+ two PropertyBags in the pool */
+ PropertyBag_Pointer_t pb3 = createPropertyBag();
+ pb3->insert(createIntegerProperty(NS_style::LN_position, 12));
+ pb3->insert(createStringProperty(NS_style::LN_type, "left"));
+ PropertyPoolHandle_Pointer_t ph3 = pool->insert(pb3);
+
+ iter = pool->createIterator();
+
+ i = 0;
+ for (iter->first(); !iter->isDone(); iter->next(), i++) /* nothing to do */;
+
+ CPPUNIT_ASSERT_MESSAGE("Dump PropertyBags failed", i == 2);
+
+ } // end scope
+
+ /* as pb3 is only valid in the above scope the property pool must
+ now contain just one property bag
+ */
+ iter = pool->createIterator();
+
+ i = 0;
+ for (iter->first(); !iter->isDone(); iter->next(), i++) /*nothing to do*/;
+
+ CPPUNIT_ASSERT_MESSAGE("Dump PropertyBags failed", i == 1);
+ }
+
+ void testInsertPropertySubsets()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+
+ PropertyBag_Pointer_t pb1 = createPropertyBag();
+ pb1->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ pb1->insert(createStringProperty(NS_style::LN_font_face, "Times"));
+ PropertyPoolHandle_Pointer_t ph1 = pool->insert(pb1);
+
+ /* Insert an equal PropertyBag again, as PropertyBags in the
+ pool are unique there must be still just one PropertyBag in the pool
+ */
+ pb1->clear();
+ pb1->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ PropertyPoolHandle_Pointer_t ph2 = pool->insert(pb1);
+
+ CPPUNIT_ASSERT_MESSAGE("ph1 != ph2 failed", ph1 != ph2);
+
+ Iterator<PropertyBag_Pointer_t>::Pointer_t iter = pool->createIterator();
+
+ int i = 0;
+ for (iter->first(); !iter->isDone(); iter->next(), i++) /* nothing to do */;
+
+ CPPUNIT_ASSERT_MESSAGE("Dump PropertyBags failed", i == 2);
+ }
+
+ void testDumpEmptyPropertyPool()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+ Iterator<PropertyBag_Pointer_t>::Pointer_t iter = pool->createIterator();
+
+ int i = 0;
+ for (iter->first(); !iter->isDone(); iter->next(), i++) /*nothing to do*/;
+
+ CPPUNIT_ASSERT_MESSAGE("Dump PropertyBags failed", i == 0);
+ }
+
+ void testPropertyPoolGarbageCollection()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+
+ PropertyBag_Pointer_t pb1 = createPropertyBag();
+ pb1->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ pb1->insert(createStringProperty(NS_style::LN_font_face, "Times"));
+ pb1->insert(createIntegerProperty(NS_fo::LN_line_height, 20));
+ PropertyPoolHandle_Pointer_t ph1 = pool->insert(pb1);
+
+ {
+ PropertyBag_Pointer_t pb2 = createPropertyBag();
+ pb2->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ pb2->insert(createStringProperty(NS_style::LN_font_face, "Roman"));
+ PropertyPoolHandle_Pointer_t ph2 = pool->insert(pb2);
+
+ OString tmpFileName = getTempFileName(OUString::createFromAscii("testPropPoolGarbageColl_1.dot"));
+ printf("Pool dump: %s\n", tmpFileName.getStr());
+ FileLoggerImpl fl(tmpFileName.getStr());
+ pool->dump(&fl);
+
+ }
+
+ OString tmpFileName = getTempFileName(OUString::createFromAscii("testPropPoolGarbageColl_2.dot"));
+ printf("Pool dump: %s\n", tmpFileName.getStr());
+ FileLoggerImpl fl(tmpFileName.getStr());
+ pool->dump(&fl);
+
+ pool->garbageCollection();
+
+ OString tmpFileName2 = getTempFileName(OUString::createFromAscii("testPropPoolGarbageColl_after.dot"));
+ printf("Pool dump: %s\n", tmpFileName2.getStr());
+ FileLoggerImpl fl2(tmpFileName2.getStr());
+ pool->dump(&fl2);
+
+ }
+
+ void testDumpPropertyPoolAfterGarbageCollection()
+ {
+ PropertyPool::Pointer_t pool = createPropertyPool();
+
+ PropertyBag_Pointer_t pb1 = createPropertyBag();
+ pb1->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ pb1->insert(createStringProperty(NS_style::LN_font_face, "Times"));
+ pb1->insert(createIntegerProperty(NS_fo::LN_line_height, 20));
+ PropertyPoolHandle_Pointer_t ph1 = pool->insert(pb1);
+
+ {
+ PropertyBag_Pointer_t pb2 = createPropertyBag();
+ pb2->insert(createIntegerProperty(NS_fo::LN_font_weight, 12));
+ pb2->insert(createStringProperty(NS_style::LN_font_face, "Roman"));
+ PropertyPoolHandle_Pointer_t ph2 = pool->insert(pb2);
+
+ Iterator<PropertyBag_Pointer_t>::Pointer_t iter = pool->createIterator();
+
+ int i = 0;
+ for (iter->first(); !iter->isDone(); iter->next(), i++) /*nothing to do*/;
+
+ CPPUNIT_ASSERT_MESSAGE("Expectation '2 PropertyBags in PropertyPool' failed", i == 2);
+ }
+
+ pool->garbageCollection();
+
+ Iterator<PropertyBag_Pointer_t>::Pointer_t iter = pool->createIterator();
+
+ int i = 0;
+ for (iter->first(); !iter->isDone(); iter->next(), i++) /*nothing to do*/;
+
+ CPPUNIT_ASSERT_MESSAGE("Expectation '1 PropertyBag in PropertyPool' failed", i == 1);
+ }
+
+ // 'cm', 'mm', 'inch', 'pt', 'px', 'pc'
+ void testCreateTwipsProperty()
+ {
+ Property::Pointer_t tp1 = createTwipsProperty(NS_style::LN_position, "1cm");
+ CPPUNIT_ASSERT_MESSAGE("getIntValue: wrong twips value returned", tp1->getIntValue() == 567);
+ CPPUNIT_ASSERT_MESSAGE("getStringValue: wrong twips value returned", tp1->getStringValue() == "1.000 cm");
+
+ Property::Pointer_t tp2 = createTwipsProperty(NS_style::LN_position, "1 cm");
+ CPPUNIT_ASSERT_MESSAGE("getIntValue: wrong twips value returned", tp2->getIntValue() == 567);
+ CPPUNIT_ASSERT_MESSAGE("getStringValue: wrong twips value returned", tp2->getStringValue() == "1.000 cm");
+
+ Property::Pointer_t tp3 = createTwipsProperty(NS_style::LN_position, "1 cm ");
+ CPPUNIT_ASSERT_MESSAGE("getIntValue: wrong twips value returned", tp3->getIntValue() == 567);
+ CPPUNIT_ASSERT_MESSAGE("getStringValue: wrong twips value returned", tp3->getStringValue() == "1.000 cm");
+
+ Property::Pointer_t tp4 = createTwipsProperty(NS_style::LN_position, "0 cm");
+ CPPUNIT_ASSERT_MESSAGE("getIntValue: wrong twips value returned", tp4->getIntValue() == 0);
+ CPPUNIT_ASSERT_MESSAGE("getStringValue: wrong twips value returned", tp4->getStringValue() == "0.000 cm");
+
+ Property::Pointer_t tp5 = createTwipsProperty(NS_style::LN_position, "10mm");
+ CPPUNIT_ASSERT_MESSAGE("getIntValue: wrong twips value returned", tp5->getIntValue() == 567);
+ CPPUNIT_ASSERT_MESSAGE("getStringValue: wrong twips value returned", tp5->getStringValue() == "1.000 cm");
+
+ Property::Pointer_t tp6 = createTwipsProperty(NS_style::LN_position, 567);
+ CPPUNIT_ASSERT_MESSAGE("getIntValue: wrong twips value returned", tp6->getIntValue() == 567);
+ CPPUNIT_ASSERT_MESSAGE("getStringValue: wrong twips value returned", tp6->getStringValue() == "1.000 cm");
+
+ Property::Pointer_t tp7 = createTwipsProperty(NS_style::LN_position, "100pt");
+ CPPUNIT_ASSERT_MESSAGE("getIntValue: wrong twips value returned", tp7->getIntValue() == 2000);
+ CPPUNIT_ASSERT_MESSAGE("getStringValue: wrong twips value returned", tp7->getStringValue() == "3.527 cm");
+
+ Property::Pointer_t tp8 = createTwipsProperty(NS_style::LN_position, "1 in");
+ CPPUNIT_ASSERT_MESSAGE("getIntValue: wrong twips value returned", tp8->getIntValue() == 1440);
+ CPPUNIT_ASSERT_MESSAGE("getStringValue: wrong twips value returned", tp8->getStringValue() == "2.540 cm");
+
+ Property::Pointer_t tp9 = createTwipsProperty(NS_style::LN_position, "-1 cm");
+ CPPUNIT_ASSERT_MESSAGE("getIntValue: wrong twips value returned", tp9->getIntValue() == -567);
+ CPPUNIT_ASSERT_MESSAGE("getStringValue: wrong twips value returned", tp9->getStringValue() == "-1.000 cm");
+
+ Property::Pointer_t tp10 = createTwipsProperty(NS_style::LN_position, "+1 cm");
+ CPPUNIT_ASSERT_MESSAGE("getIntValue: wrong twips value returned", tp10->getIntValue() == 567);
+ CPPUNIT_ASSERT_MESSAGE("getStringValue: wrong twips value returned", tp10->getStringValue() == "1.000 cm");
+
+ Property::Pointer_t tp11 = createTwipsProperty(NS_style::LN_position, "1 pt ");
+ Property::Pointer_t tp12 = createTwipsProperty(NS_style::LN_position, "2pt");
+ CPPUNIT_ASSERT_MESSAGE("Comparing twips properties failed", tp11 < tp12);
+ }
+
+ void testCreateInvalidTwipsProperty()
+ {
+ try
+ {
+ Property::Pointer_t tp = createTwipsProperty(NS_style::LN_position, "0,1 cm");
+ }
+ catch(std::invalid_argument& )
+ {
+ return; // OK
+ }
+ CPPUNIT_ASSERT_MESSAGE("Creating an twips property with invalid number must fail", false);
+ }
+
+ void testCreateInvalidTwipsProperty2()
+ {
+ try
+ {
+ Property::Pointer_t tp = createTwipsProperty(NS_style::LN_position, "");
+ }
+ catch(std::invalid_argument& )
+ {
+ return; // OK
+ }
+ CPPUNIT_ASSERT_MESSAGE("Creating an twips property with invalid number must fail", false);
+ }
+
+ void testCreateInvalidTwipsProperty3()
+ {
+ try
+ {
+ Property::Pointer_t tp = createTwipsProperty(NS_style::LN_position, " cm");
+ }
+ catch(std::invalid_argument& )
+ {
+ return; // OK
+ }
+ CPPUNIT_ASSERT_MESSAGE("Creating an twips property with invalid number must fail", false);
+ }
+
+ CPPUNIT_TEST_SUITE(TestProperty);
+ CPPUNIT_TEST(testCreateIntProperty);
+ CPPUNIT_TEST(testCreateStringProperty);
+ CPPUNIT_TEST(testCreateCompositeProperty);
+ CPPUNIT_TEST(testPropertyBagAsStructure);
+ CPPUNIT_TEST(testNoDuplicatesInPropertyBagStructures);
+ CPPUNIT_TEST(testPropertyBagAsArray);
+ CPPUNIT_TEST(testDuplicateValuesInArray);
+ CPPUNIT_TEST(testCopyPropertyBag);
+ CPPUNIT_TEST(testClearPropertyBag);
+ CPPUNIT_TEST(testSortPropertyBag);
+ CPPUNIT_TEST(testCompareSimpleProperties);
+ CPPUNIT_TEST(testCompareCompositeProperties);
+ CPPUNIT_TEST(testPropertyPool);
+ CPPUNIT_TEST(testComplexParagraphProperty);
+ CPPUNIT_TEST(testInsertEmptyPropertyBag);
+ CPPUNIT_TEST(testCompareEqualPropertyTypesWithDifferentIdsDoesNotFail);
+ CPPUNIT_TEST(testDumpPropertyPool);
+ CPPUNIT_TEST(testDumpEmptyPropertyPool);
+ CPPUNIT_TEST(testInsertPropertySubsets);
+ CPPUNIT_TEST(testPropertyPoolGarbageCollection);
+ CPPUNIT_TEST(testDumpPropertyPoolAfterGarbageCollection);
+ CPPUNIT_TEST(testCreateTwipsProperty);
+ CPPUNIT_TEST(testCreateInvalidTwipsProperty);
+ CPPUNIT_TEST(testCreateInvalidTwipsProperty2);
+ CPPUNIT_TEST(testCreateInvalidTwipsProperty3);
+ CPPUNIT_TEST_SUITE_END();
+};
+
+//#####################################
+// register test suites
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(TestProperty, "TestProperty");
+
+NOADDITIONAL;
diff --git a/writerfilter/qa/cppunittests/qname/export.map b/writerfilter/qa/cppunittests/qname/export.map
new file mode 100644
index 000000000000..7321bbca16ad
--- /dev/null
+++ b/writerfilter/qa/cppunittests/qname/export.map
@@ -0,0 +1,34 @@
+#*************************************************************************
+#
+# 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.
+#
+#*************************************************************************
+
+UDK_3_0_0 {
+ global:
+ registerAllTestFunction;
+
+ local:
+ *;
+};
diff --git a/writerfilter/qa/cppunittests/qname/makefile.mk b/writerfilter/qa/cppunittests/qname/makefile.mk
new file mode 100644
index 000000000000..2f51eb3844c7
--- /dev/null
+++ b/writerfilter/qa/cppunittests/qname/makefile.mk
@@ -0,0 +1,76 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+PRJ=..$/..$/..
+
+PRJNAME=writerfilter
+TARGET=test-qname
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+CFLAGSCXX += $(CPPUNIT_CFLAGS)
+
+# BEGIN ----------------------------------------------------------------
+# auto generated Target:testjob by codegen.pl
+
+.IF "$(GUI)" == "WNT"
+ CFLAGS+=/Ob1
+.ENDIF
+
+SHL1OBJS=\
+ $(SLO)$/testQName.obj
+
+SHL1TARGET=$(TARGET)
+
+SHL1STDLIBS=$(SALLIB) $(TOOLSLIB) $(CPPUNITLIB) $(TESTSHL2LIB)
+
+.IF "$(GUI)" == "WNT"
+SHL1STDLIBS+= $(LB)$/iodiapi.lib
+.ENDIF
+.IF "$(GUI)" == "UNX"
+SHL1STDLIBS+=$(LB)$/libodiapi.so
+.ENDIF
+
+SHL1IMPLIB= i$(SHL1TARGET)
+
+# SHL1DEF= $(MISC)$/$(SHL1TARGET).def
+
+DEF1NAME =$(SHL1TARGET)
+
+# DEF1EXPORTFILE= export.exp
+SHL1VERSIONMAP = export.map
+
+
+# END ------------------------------------------------------------------
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+.INCLUDE : _cppunit.mk
diff --git a/writerfilter/qa/cppunittests/qname/testQName.cxx b/writerfilter/qa/cppunittests/qname/testQName.cxx
new file mode 100644
index 000000000000..1c629666d8e6
--- /dev/null
+++ b/writerfilter/qa/cppunittests/qname/testQName.cxx
@@ -0,0 +1,7535 @@
+/*************************************************************************
+ *
+ * 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 <testshl/simpleheader.hxx>
+#include <odiapi/qname/QName.hxx>
+#include <stdio.h>
+#include <rtl/string.hxx>
+#include <rtl/random.h>
+#include <osl/time.h>
+#include <hash_set>
+#include <stdexcept>
+
+
+using namespace writerfilter;
+
+
+class TestQName : public CppUnit::TestFixture
+{
+public:
+ void testAdd(const sal_Char* namespaceUri, const sal_Char *localName)
+ {
+ QName_t t=QName::tokenizer().insert(namespaceUri, localName);
+ const sal_Char *ln=QName::serializer().getLocalName(t);
+ const sal_Char *ns=QName::serializer().getNamespaceUri(t);
+ CPPUNIT_ASSERT(rtl_str_compare(localName, ln)==0);
+ CPPUNIT_ASSERT(rtl_str_compare(namespaceUri, ns)==0);
+ }
+
+ void test()
+ {
+ rtlRandomPool rndPool=rtl_random_createPool();
+ int numOfIterations=100000; //int numOfIterations=5000000;
+ for(int i=0;i<numOfIterations;i++)
+ {
+ unsigned int id;
+ rtl_random_getBytes(rndPool, &id, sizeof(id));
+ id%=QName::tokenizer().getQNames();
+ const sal_Char *ln=QName::serializer().getLocalName((QName_t)id);
+ const sal_Char *ns=QName::serializer().getNamespaceUri((QName_t)id);
+// printf("%i \"%s\" \"%s\"\n", i, ns, ln);
+ testAdd(ns, ln);
+ }
+ rtl_random_destroyPool(rndPool);
+ }
+
+ void testperf()
+ {
+ rtlRandomPool rndPool=rtl_random_createPool();
+ int numOfIterations=5000000;
+ TimeValue t1; osl_getSystemTime(&t1);
+ for(int i=0;i<numOfIterations;i++)
+ {
+ unsigned int id;
+ rtl_random_getBytes(rndPool, &id, sizeof(id));
+ id%=QName::tokenizer().getQNames();
+ const sal_Char *ln=QName::serializer().getLocalName((QName_t)id);
+ const sal_Char *ns=QName::serializer().getNamespaceUri((QName_t)id);
+ QName::tokenizer().insert(ns, ln);
+ }
+ TimeValue t2; osl_getSystemTime(&t2);
+ printf("Events=%i time=%is time/event=%0.10fs\n", numOfIterations, t2.Seconds-t1.Seconds, (double)(t2.Seconds-t1.Seconds)/(double)numOfIterations);
+ rtl_random_destroyPool(rndPool);
+ }
+
+
+ void testinsert()
+ {
+ testAdd("myns", "myname");
+ }
+
+ void testdos()
+ {
+ bool flag=false;
+ try {
+ int i=0;
+ for(;;)
+ {
+ char buf[100];
+ sprintf(buf, "name%i", i++);
+ testAdd("myns", buf);
+ }
+ } catch (std::logic_error &e)
+ {
+ // only way to exit this function
+ flag=true;
+ }
+ CPPUNIT_ASSERT_MESSAGE("dos test failed", flag);
+ }
+
+
+ void test_anium(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:animation:1.0";
+ flag&=QName::tokenizer().insert(ns, "animate") == NS_anium::LN_animate;
+ flag&=QName::tokenizer().insert(ns, "set") == NS_anium::LN_set;
+ flag&=QName::tokenizer().insert(ns, "animateMotion") == NS_anium::LN_animateMotion;
+ flag&=QName::tokenizer().insert(ns, "animateColor") == NS_anium::LN_animateColor;
+ flag&=QName::tokenizer().insert(ns, "color-interpolation") == NS_anium::LN_color_interpolation;
+ flag&=QName::tokenizer().insert(ns, "color-interpolation-direction") == NS_anium::LN_color_interpolation_direction;
+ flag&=QName::tokenizer().insert(ns, "animateTransform") == NS_anium::LN_animateTransform;
+ flag&=QName::tokenizer().insert(ns, "transitionFilter") == NS_anium::LN_transitionFilter;
+ flag&=QName::tokenizer().insert(ns, "id") == NS_anium::LN_id;
+ flag&=QName::tokenizer().insert(ns, "sub-item") == NS_anium::LN_sub_item;
+ flag&=QName::tokenizer().insert(ns, "formula") == NS_anium::LN_formula;
+ flag&=QName::tokenizer().insert(ns, "par") == NS_anium::LN_par;
+ flag&=QName::tokenizer().insert(ns, "seq") == NS_anium::LN_seq;
+ flag&=QName::tokenizer().insert(ns, "iterate") == NS_anium::LN_iterate;
+ flag&=QName::tokenizer().insert(ns, "iterate-type") == NS_anium::LN_iterate_type;
+ flag&=QName::tokenizer().insert(ns, "iterate-interval") == NS_anium::LN_iterate_interval;
+ flag&=QName::tokenizer().insert(ns, "audio") == NS_anium::LN_audio;
+ flag&=QName::tokenizer().insert(ns, "audio-level") == NS_anium::LN_audio_level;
+ flag&=QName::tokenizer().insert(ns, "command") == NS_anium::LN_command;
+ flag&=QName::tokenizer().insert(ns, "param") == NS_anium::LN_param;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_anium::LN_name;
+ flag&=QName::tokenizer().insert(ns, "value") == NS_anium::LN_value;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace anium failed", flag);}
+ void test_math(){
+ bool flag=true;
+ static const char ns[] = "http://www.w3.org/1998/Math/MathML";
+ flag&=QName::tokenizer().insert(ns, "math") == NS_math::LN_math;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace math failed", flag);}
+ void test_w10(){
+ bool flag=true;
+ static const char ns[] = "urn:schemas-microsoft-com:office:word";
+ flag&=QName::tokenizer().insert(ns, "bordertop") == NS_w10::LN_bordertop;
+ flag&=QName::tokenizer().insert(ns, "borderleft") == NS_w10::LN_borderleft;
+ flag&=QName::tokenizer().insert(ns, "borderright") == NS_w10::LN_borderright;
+ flag&=QName::tokenizer().insert(ns, "borderbottom") == NS_w10::LN_borderbottom;
+ flag&=QName::tokenizer().insert(ns, "wrap") == NS_w10::LN_wrap;
+ flag&=QName::tokenizer().insert(ns, "anchorlock") == NS_w10::LN_anchorlock;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace w10 failed", flag);}
+ void test_chart(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:chart:1.0";
+ flag&=QName::tokenizer().insert(ns, "scale-text") == NS_chart::LN_scale_text;
+ flag&=QName::tokenizer().insert(ns, "three-dimensional") == NS_chart::LN_three_dimensional;
+ flag&=QName::tokenizer().insert(ns, "deep") == NS_chart::LN_deep;
+ flag&=QName::tokenizer().insert(ns, "symbol-type") == NS_chart::LN_symbol_type;
+ flag&=QName::tokenizer().insert(ns, "symbol-name") == NS_chart::LN_symbol_name;
+ flag&=QName::tokenizer().insert(ns, "symbol-image") == NS_chart::LN_symbol_image;
+ flag&=QName::tokenizer().insert(ns, "symbol-width") == NS_chart::LN_symbol_width;
+ flag&=QName::tokenizer().insert(ns, "symbol-height") == NS_chart::LN_symbol_height;
+ flag&=QName::tokenizer().insert(ns, "vertical") == NS_chart::LN_vertical;
+ flag&=QName::tokenizer().insert(ns, "connect-bars") == NS_chart::LN_connect_bars;
+ flag&=QName::tokenizer().insert(ns, "gap-width") == NS_chart::LN_gap_width;
+ flag&=QName::tokenizer().insert(ns, "overlap") == NS_chart::LN_overlap;
+ flag&=QName::tokenizer().insert(ns, "japanese-candle-stick") == NS_chart::LN_japanese_candle_stick;
+ flag&=QName::tokenizer().insert(ns, "interpolation") == NS_chart::LN_interpolation;
+ flag&=QName::tokenizer().insert(ns, "spline-order") == NS_chart::LN_spline_order;
+ flag&=QName::tokenizer().insert(ns, "spline-resolution") == NS_chart::LN_spline_resolution;
+ flag&=QName::tokenizer().insert(ns, "pie-offset") == NS_chart::LN_pie_offset;
+ flag&=QName::tokenizer().insert(ns, "lines") == NS_chart::LN_lines;
+ flag&=QName::tokenizer().insert(ns, "solid-type") == NS_chart::LN_solid_type;
+ flag&=QName::tokenizer().insert(ns, "stacked") == NS_chart::LN_stacked;
+ flag&=QName::tokenizer().insert(ns, "percentage") == NS_chart::LN_percentage;
+ flag&=QName::tokenizer().insert(ns, "link-data-style-to-source") == NS_chart::LN_link_data_style_to_source;
+ flag&=QName::tokenizer().insert(ns, "visible") == NS_chart::LN_visible;
+ flag&=QName::tokenizer().insert(ns, "logarithmic") == NS_chart::LN_logarithmic;
+ flag&=QName::tokenizer().insert(ns, "maximum") == NS_chart::LN_maximum;
+ flag&=QName::tokenizer().insert(ns, "minimum") == NS_chart::LN_minimum;
+ flag&=QName::tokenizer().insert(ns, "origin") == NS_chart::LN_origin;
+ flag&=QName::tokenizer().insert(ns, "interval-major") == NS_chart::LN_interval_major;
+ flag&=QName::tokenizer().insert(ns, "interval-minor") == NS_chart::LN_interval_minor;
+ flag&=QName::tokenizer().insert(ns, "tick-marks-major-inner") == NS_chart::LN_tick_marks_major_inner;
+ flag&=QName::tokenizer().insert(ns, "tick-marks-major-outer") == NS_chart::LN_tick_marks_major_outer;
+ flag&=QName::tokenizer().insert(ns, "tick-marks-minor-inner") == NS_chart::LN_tick_marks_minor_inner;
+ flag&=QName::tokenizer().insert(ns, "tick-marks-minor-outer") == NS_chart::LN_tick_marks_minor_outer;
+ flag&=QName::tokenizer().insert(ns, "display-label") == NS_chart::LN_display_label;
+ flag&=QName::tokenizer().insert(ns, "text-overlap") == NS_chart::LN_text_overlap;
+ flag&=QName::tokenizer().insert(ns, "label-arrangement") == NS_chart::LN_label_arrangement;
+ flag&=QName::tokenizer().insert(ns, "data-label-number") == NS_chart::LN_data_label_number;
+ flag&=QName::tokenizer().insert(ns, "data-label-text") == NS_chart::LN_data_label_text;
+ flag&=QName::tokenizer().insert(ns, "data-label-symbol") == NS_chart::LN_data_label_symbol;
+ flag&=QName::tokenizer().insert(ns, "error-category") == NS_chart::LN_error_category;
+ flag&=QName::tokenizer().insert(ns, "error-percentage") == NS_chart::LN_error_percentage;
+ flag&=QName::tokenizer().insert(ns, "error-margin") == NS_chart::LN_error_margin;
+ flag&=QName::tokenizer().insert(ns, "error-lower-limit") == NS_chart::LN_error_lower_limit;
+ flag&=QName::tokenizer().insert(ns, "error-upper-limit") == NS_chart::LN_error_upper_limit;
+ flag&=QName::tokenizer().insert(ns, "error-upper-indicator") == NS_chart::LN_error_upper_indicator;
+ flag&=QName::tokenizer().insert(ns, "error-lower-indicator") == NS_chart::LN_error_lower_indicator;
+ flag&=QName::tokenizer().insert(ns, "series-source") == NS_chart::LN_series_source;
+ flag&=QName::tokenizer().insert(ns, "regression-type") == NS_chart::LN_regression_type;
+ flag&=QName::tokenizer().insert(ns, "chart") == NS_chart::LN_chart;
+ flag&=QName::tokenizer().insert(ns, "class") == NS_chart::LN_class;
+ flag&=QName::tokenizer().insert(ns, "column-mapping") == NS_chart::LN_column_mapping;
+ flag&=QName::tokenizer().insert(ns, "row-mapping") == NS_chart::LN_row_mapping;
+ flag&=QName::tokenizer().insert(ns, "style-name") == NS_chart::LN_style_name;
+ flag&=QName::tokenizer().insert(ns, "title") == NS_chart::LN_title;
+ flag&=QName::tokenizer().insert(ns, "subtitle") == NS_chart::LN_subtitle;
+ flag&=QName::tokenizer().insert(ns, "footer") == NS_chart::LN_footer;
+ flag&=QName::tokenizer().insert(ns, "legend") == NS_chart::LN_legend;
+ flag&=QName::tokenizer().insert(ns, "legend-position") == NS_chart::LN_legend_position;
+ flag&=QName::tokenizer().insert(ns, "legend-align") == NS_chart::LN_legend_align;
+ flag&=QName::tokenizer().insert(ns, "plot-area") == NS_chart::LN_plot_area;
+ flag&=QName::tokenizer().insert(ns, "data-source-has-labels") == NS_chart::LN_data_source_has_labels;
+ flag&=QName::tokenizer().insert(ns, "wall") == NS_chart::LN_wall;
+ flag&=QName::tokenizer().insert(ns, "floor") == NS_chart::LN_floor;
+ flag&=QName::tokenizer().insert(ns, "axis") == NS_chart::LN_axis;
+ flag&=QName::tokenizer().insert(ns, "dimension") == NS_chart::LN_dimension;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_chart::LN_name;
+ flag&=QName::tokenizer().insert(ns, "grid") == NS_chart::LN_grid;
+ flag&=QName::tokenizer().insert(ns, "series") == NS_chart::LN_series;
+ flag&=QName::tokenizer().insert(ns, "values-cell-range-address") == NS_chart::LN_values_cell_range_address;
+ flag&=QName::tokenizer().insert(ns, "label-cell-address") == NS_chart::LN_label_cell_address;
+ flag&=QName::tokenizer().insert(ns, "attached-axis") == NS_chart::LN_attached_axis;
+ flag&=QName::tokenizer().insert(ns, "domain") == NS_chart::LN_domain;
+ flag&=QName::tokenizer().insert(ns, "categories") == NS_chart::LN_categories;
+ flag&=QName::tokenizer().insert(ns, "data-point") == NS_chart::LN_data_point;
+ flag&=QName::tokenizer().insert(ns, "repeated") == NS_chart::LN_repeated;
+ flag&=QName::tokenizer().insert(ns, "mean-value") == NS_chart::LN_mean_value;
+ flag&=QName::tokenizer().insert(ns, "error-indicator") == NS_chart::LN_error_indicator;
+ flag&=QName::tokenizer().insert(ns, "regression-curve") == NS_chart::LN_regression_curve;
+ flag&=QName::tokenizer().insert(ns, "stock-gain-marker") == NS_chart::LN_stock_gain_marker;
+ flag&=QName::tokenizer().insert(ns, "stock-loss-marker") == NS_chart::LN_stock_loss_marker;
+ flag&=QName::tokenizer().insert(ns, "stock-range-line") == NS_chart::LN_stock_range_line;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace chart failed", flag);}
+ void test_sc12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/singlecells";
+ flag&=QName::tokenizer().insert(ns, "singleCells") == NS_sc12::LN_singleCells;
+ flag&=QName::tokenizer().insert(ns, "table") == NS_sc12::LN_table;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace sc12 failed", flag);}
+ void test_odc12(){
+ bool flag=true;
+ static const char ns[] = "urn:schemas-microsoft-com:office:odc";
+ flag&=QName::tokenizer().insert(ns, "OfficeDataConnection") == NS_odc12::LN_OfficeDataConnection;
+ flag&=QName::tokenizer().insert(ns, "Connection") == NS_odc12::LN_Connection;
+ flag&=QName::tokenizer().insert(ns, "ConnectionString") == NS_odc12::LN_ConnectionString;
+ flag&=QName::tokenizer().insert(ns, "CommandType") == NS_odc12::LN_CommandType;
+ flag&=QName::tokenizer().insert(ns, "CommandText") == NS_odc12::LN_CommandText;
+ flag&=QName::tokenizer().insert(ns, "Parameter") == NS_odc12::LN_Parameter;
+ flag&=QName::tokenizer().insert(ns, "SourceFile") == NS_odc12::LN_SourceFile;
+ flag&=QName::tokenizer().insert(ns, "HeaderFile") == NS_odc12::LN_HeaderFile;
+ flag&=QName::tokenizer().insert(ns, "MailMerge") == NS_odc12::LN_MailMerge;
+ flag&=QName::tokenizer().insert(ns, "Version") == NS_odc12::LN_Version;
+ flag&=QName::tokenizer().insert(ns, "AlwaysUseConnectionFile") == NS_odc12::LN_AlwaysUseConnectionFile;
+ flag&=QName::tokenizer().insert(ns, "CredentialsMethod") == NS_odc12::LN_CredentialsMethod;
+ flag&=QName::tokenizer().insert(ns, "SSOApplicationID") == NS_odc12::LN_SSOApplicationID;
+ flag&=QName::tokenizer().insert(ns, "Name") == NS_odc12::LN_Name;
+ flag&=QName::tokenizer().insert(ns, "DataType") == NS_odc12::LN_DataType;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace odc12 failed", flag);}
+ void test_c11(){
+ bool flag=true;
+ static const char ns[] = "urn:schemas-microsoft-com:office:component:spreadsheet";
+ flag&=QName::tokenizer().insert(ns, "OWCVersion") == NS_c11::LN_OWCVersion;
+ flag&=QName::tokenizer().insert(ns, "worksheetoptions") == NS_c11::LN_worksheetoptions;
+ flag&=QName::tokenizer().insert(ns, "displaycustomheaders") == NS_c11::LN_displaycustomheaders;
+ flag&=QName::tokenizer().insert(ns, "ComponentOptions") == NS_c11::LN_ComponentOptions;
+ flag&=QName::tokenizer().insert(ns, "Toolbar") == NS_c11::LN_Toolbar;
+ flag&=QName::tokenizer().insert(ns, "HideOfficeLogo") == NS_c11::LN_HideOfficeLogo;
+ flag&=QName::tokenizer().insert(ns, "SpreadsheetAutoFit") == NS_c11::LN_SpreadsheetAutoFit;
+ flag&=QName::tokenizer().insert(ns, "Label") == NS_c11::LN_Label;
+ flag&=QName::tokenizer().insert(ns, "Caption") == NS_c11::LN_Caption;
+ flag&=QName::tokenizer().insert(ns, "MaxHeight") == NS_c11::LN_MaxHeight;
+ flag&=QName::tokenizer().insert(ns, "MaxWidth") == NS_c11::LN_MaxWidth;
+ flag&=QName::tokenizer().insert(ns, "NextSheetNumber") == NS_c11::LN_NextSheetNumber;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace c11 failed", flag);}
+ void test_rng(){
+ bool flag=true;
+ static const char ns[] = "http://relaxng.org/ns/structure/1.0";
+ flag&=QName::tokenizer().insert(ns, "anyName") == NS_rng::LN_anyName;
+ flag&=QName::tokenizer().insert(ns, "grammar") == NS_rng::LN_grammar;
+ flag&=QName::tokenizer().insert(ns, "define") == NS_rng::LN_define;
+ flag&=QName::tokenizer().insert(ns, "optional") == NS_rng::LN_optional;
+ flag&=QName::tokenizer().insert(ns, "attribute") == NS_rng::LN_attribute;
+ flag&=QName::tokenizer().insert(ns, "ref") == NS_rng::LN_ref;
+ flag&=QName::tokenizer().insert(ns, "start") == NS_rng::LN_start;
+ flag&=QName::tokenizer().insert(ns, "choice") == NS_rng::LN_choice;
+ flag&=QName::tokenizer().insert(ns, "element") == NS_rng::LN_element;
+ flag&=QName::tokenizer().insert(ns, "zeroOrMore") == NS_rng::LN_zeroOrMore;
+ flag&=QName::tokenizer().insert(ns, "group") == NS_rng::LN_group;
+ flag&=QName::tokenizer().insert(ns, "empty") == NS_rng::LN_empty;
+ flag&=QName::tokenizer().insert(ns, "oneOrMore") == NS_rng::LN_oneOrMore;
+ flag&=QName::tokenizer().insert(ns, "text") == NS_rng::LN_text;
+ flag&=QName::tokenizer().insert(ns, "value") == NS_rng::LN_value;
+ flag&=QName::tokenizer().insert(ns, "mixed") == NS_rng::LN_mixed;
+ flag&=QName::tokenizer().insert(ns, "interleave") == NS_rng::LN_interleave;
+ flag&=QName::tokenizer().insert(ns, "data") == NS_rng::LN_data;
+ flag&=QName::tokenizer().insert(ns, "param") == NS_rng::LN_param;
+ flag&=QName::tokenizer().insert(ns, "except") == NS_rng::LN_except;
+ flag&=QName::tokenizer().insert(ns, "nsName") == NS_rng::LN_nsName;
+ flag&=QName::tokenizer().insert(ns, "parentRef") == NS_rng::LN_parentRef;
+ flag&=QName::tokenizer().insert(ns, "notAllowed") == NS_rng::LN_notAllowed;
+ flag&=QName::tokenizer().insert(ns, "externalRef") == NS_rng::LN_externalRef;
+ flag&=QName::tokenizer().insert(ns, "div") == NS_rng::LN_div;
+ flag&=QName::tokenizer().insert(ns, "include") == NS_rng::LN_include;
+ flag&=QName::tokenizer().insert(ns, "list") == NS_rng::LN_list;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_rng::LN_name;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace rng failed", flag);}
+ void test_meta(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:meta:1.0";
+ flag&=QName::tokenizer().insert(ns, "date-string") == NS_meta::LN_date_string;
+ flag&=QName::tokenizer().insert(ns, "generator") == NS_meta::LN_generator;
+ flag&=QName::tokenizer().insert(ns, "keyword") == NS_meta::LN_keyword;
+ flag&=QName::tokenizer().insert(ns, "initial-creator") == NS_meta::LN_initial_creator;
+ flag&=QName::tokenizer().insert(ns, "printed-by") == NS_meta::LN_printed_by;
+ flag&=QName::tokenizer().insert(ns, "creation-date") == NS_meta::LN_creation_date;
+ flag&=QName::tokenizer().insert(ns, "print-date") == NS_meta::LN_print_date;
+ flag&=QName::tokenizer().insert(ns, "template") == NS_meta::LN_template;
+ flag&=QName::tokenizer().insert(ns, "date") == NS_meta::LN_date;
+ flag&=QName::tokenizer().insert(ns, "auto-reload") == NS_meta::LN_auto_reload;
+ flag&=QName::tokenizer().insert(ns, "delay") == NS_meta::LN_delay;
+ flag&=QName::tokenizer().insert(ns, "hyperlink-behaviour") == NS_meta::LN_hyperlink_behaviour;
+ flag&=QName::tokenizer().insert(ns, "editing-cycles") == NS_meta::LN_editing_cycles;
+ flag&=QName::tokenizer().insert(ns, "editing-duration") == NS_meta::LN_editing_duration;
+ flag&=QName::tokenizer().insert(ns, "document-statistic") == NS_meta::LN_document_statistic;
+ flag&=QName::tokenizer().insert(ns, "page-count") == NS_meta::LN_page_count;
+ flag&=QName::tokenizer().insert(ns, "table-count") == NS_meta::LN_table_count;
+ flag&=QName::tokenizer().insert(ns, "draw-count") == NS_meta::LN_draw_count;
+ flag&=QName::tokenizer().insert(ns, "image-count") == NS_meta::LN_image_count;
+ flag&=QName::tokenizer().insert(ns, "ole-object-count") == NS_meta::LN_ole_object_count;
+ flag&=QName::tokenizer().insert(ns, "paragraph-count") == NS_meta::LN_paragraph_count;
+ flag&=QName::tokenizer().insert(ns, "word-count") == NS_meta::LN_word_count;
+ flag&=QName::tokenizer().insert(ns, "character-count") == NS_meta::LN_character_count;
+ flag&=QName::tokenizer().insert(ns, "frame-count") == NS_meta::LN_frame_count;
+ flag&=QName::tokenizer().insert(ns, "sentence-count") == NS_meta::LN_sentence_count;
+ flag&=QName::tokenizer().insert(ns, "syllable-count") == NS_meta::LN_syllable_count;
+ flag&=QName::tokenizer().insert(ns, "non-whitespace-character-count") == NS_meta::LN_non_whitespace_character_count;
+ flag&=QName::tokenizer().insert(ns, "row-count") == NS_meta::LN_row_count;
+ flag&=QName::tokenizer().insert(ns, "cell-count") == NS_meta::LN_cell_count;
+ flag&=QName::tokenizer().insert(ns, "object-count") == NS_meta::LN_object_count;
+ flag&=QName::tokenizer().insert(ns, "user-defined") == NS_meta::LN_user_defined;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_meta::LN_name;
+ flag&=QName::tokenizer().insert(ns, "value-type") == NS_meta::LN_value_type;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace meta failed", flag);}
+ void test_udcs(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/data/udc/soap";
+ flag&=QName::tokenizer().insert(ns, "Location") == NS_udcs::LN_Location;
+ flag&=QName::tokenizer().insert(ns, "Proxy") == NS_udcs::LN_Proxy;
+ flag&=QName::tokenizer().insert(ns, "Authentication") == NS_udcs::LN_Authentication;
+ flag&=QName::tokenizer().insert(ns, "Windows") == NS_udcs::LN_Windows;
+ flag&=QName::tokenizer().insert(ns, "Basic") == NS_udcs::LN_Basic;
+ flag&=QName::tokenizer().insert(ns, "useExplicit") == NS_udcs::LN_useExplicit;
+ flag&=QName::tokenizer().insert(ns, "userId") == NS_udcs::LN_userId;
+ flag&=QName::tokenizer().insert(ns, "password") == NS_udcs::LN_password;
+ flag&=QName::tokenizer().insert(ns, "SOAPAction") == NS_udcs::LN_SOAPAction;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace udcs failed", flag);}
+ void test_xlink(){
+ bool flag=true;
+ static const char ns[] = "http://www.w3.org/1999/xlink";
+ flag&=QName::tokenizer().insert(ns, "href") == NS_xlink::LN_href;
+ flag&=QName::tokenizer().insert(ns, "type") == NS_xlink::LN_type;
+ flag&=QName::tokenizer().insert(ns, "actuate") == NS_xlink::LN_actuate;
+ flag&=QName::tokenizer().insert(ns, "title") == NS_xlink::LN_title;
+ flag&=QName::tokenizer().insert(ns, "show") == NS_xlink::LN_show;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace xlink failed", flag);}
+ void test_style(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:style:1.0";
+ flag&=QName::tokenizer().insert(ns, "chart-properties") == NS_style::LN_chart_properties;
+ flag&=QName::tokenizer().insert(ns, "num-prefix") == NS_style::LN_num_prefix;
+ flag&=QName::tokenizer().insert(ns, "num-suffix") == NS_style::LN_num_suffix;
+ flag&=QName::tokenizer().insert(ns, "num-format") == NS_style::LN_num_format;
+ flag&=QName::tokenizer().insert(ns, "num-letter-sync") == NS_style::LN_num_letter_sync;
+ flag&=QName::tokenizer().insert(ns, "style") == NS_style::LN_style;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_style::LN_name;
+ flag&=QName::tokenizer().insert(ns, "display-name") == NS_style::LN_display_name;
+ flag&=QName::tokenizer().insert(ns, "parent-style-name") == NS_style::LN_parent_style_name;
+ flag&=QName::tokenizer().insert(ns, "next-style-name") == NS_style::LN_next_style_name;
+ flag&=QName::tokenizer().insert(ns, "list-style-name") == NS_style::LN_list_style_name;
+ flag&=QName::tokenizer().insert(ns, "master-page-name") == NS_style::LN_master_page_name;
+ flag&=QName::tokenizer().insert(ns, "auto-update") == NS_style::LN_auto_update;
+ flag&=QName::tokenizer().insert(ns, "class") == NS_style::LN_class;
+ flag&=QName::tokenizer().insert(ns, "default-outline-level") == NS_style::LN_default_outline_level;
+ flag&=QName::tokenizer().insert(ns, "map") == NS_style::LN_map;
+ flag&=QName::tokenizer().insert(ns, "condition") == NS_style::LN_condition;
+ flag&=QName::tokenizer().insert(ns, "apply-style-name") == NS_style::LN_apply_style_name;
+ flag&=QName::tokenizer().insert(ns, "base-cell-address") == NS_style::LN_base_cell_address;
+ flag&=QName::tokenizer().insert(ns, "default-style") == NS_style::LN_default_style;
+ flag&=QName::tokenizer().insert(ns, "page-layout") == NS_style::LN_page_layout;
+ flag&=QName::tokenizer().insert(ns, "page-usage") == NS_style::LN_page_usage;
+ flag&=QName::tokenizer().insert(ns, "header-style") == NS_style::LN_header_style;
+ flag&=QName::tokenizer().insert(ns, "footer-style") == NS_style::LN_footer_style;
+ flag&=QName::tokenizer().insert(ns, "master-page") == NS_style::LN_master_page;
+ flag&=QName::tokenizer().insert(ns, "header") == NS_style::LN_header;
+ flag&=QName::tokenizer().insert(ns, "footer") == NS_style::LN_footer;
+ flag&=QName::tokenizer().insert(ns, "header-left") == NS_style::LN_header_left;
+ flag&=QName::tokenizer().insert(ns, "footer-left") == NS_style::LN_footer_left;
+ flag&=QName::tokenizer().insert(ns, "display") == NS_style::LN_display;
+ flag&=QName::tokenizer().insert(ns, "region-left") == NS_style::LN_region_left;
+ flag&=QName::tokenizer().insert(ns, "region-center") == NS_style::LN_region_center;
+ flag&=QName::tokenizer().insert(ns, "region-right") == NS_style::LN_region_right;
+ flag&=QName::tokenizer().insert(ns, "font-face") == NS_style::LN_font_face;
+ flag&=QName::tokenizer().insert(ns, "font-adornments") == NS_style::LN_font_adornments;
+ flag&=QName::tokenizer().insert(ns, "font-family-generic") == NS_style::LN_font_family_generic;
+ flag&=QName::tokenizer().insert(ns, "font-pitch") == NS_style::LN_font_pitch;
+ flag&=QName::tokenizer().insert(ns, "font-charset") == NS_style::LN_font_charset;
+ flag&=QName::tokenizer().insert(ns, "volatile") == NS_style::LN_volatile;
+ flag&=QName::tokenizer().insert(ns, "leader-char") == NS_style::LN_leader_char;
+ flag&=QName::tokenizer().insert(ns, "type") == NS_style::LN_type;
+ flag&=QName::tokenizer().insert(ns, "position") == NS_style::LN_position;
+ flag&=QName::tokenizer().insert(ns, "family") == NS_style::LN_family;
+ flag&=QName::tokenizer().insert(ns, "font-size-asian") == NS_style::LN_font_size_asian;
+ flag&=QName::tokenizer().insert(ns, "font-size-complex") == NS_style::LN_font_size_complex;
+ flag&=QName::tokenizer().insert(ns, "font-size-rel") == NS_style::LN_font_size_rel;
+ flag&=QName::tokenizer().insert(ns, "font-size-rel-asian") == NS_style::LN_font_size_rel_asian;
+ flag&=QName::tokenizer().insert(ns, "font-size-rel-complex") == NS_style::LN_font_size_rel_complex;
+ flag&=QName::tokenizer().insert(ns, "script-type") == NS_style::LN_script_type;
+ flag&=QName::tokenizer().insert(ns, "language-asian") == NS_style::LN_language_asian;
+ flag&=QName::tokenizer().insert(ns, "language-complex") == NS_style::LN_language_complex;
+ flag&=QName::tokenizer().insert(ns, "graphic-properties") == NS_style::LN_graphic_properties;
+ flag&=QName::tokenizer().insert(ns, "country-asian") == NS_style::LN_country_asian;
+ flag&=QName::tokenizer().insert(ns, "drawing-page-properties") == NS_style::LN_drawing_page_properties;
+ flag&=QName::tokenizer().insert(ns, "country-complex") == NS_style::LN_country_complex;
+ flag&=QName::tokenizer().insert(ns, "font-style-asian") == NS_style::LN_font_style_asian;
+ flag&=QName::tokenizer().insert(ns, "font-style-complex") == NS_style::LN_font_style_complex;
+ flag&=QName::tokenizer().insert(ns, "font-relief") == NS_style::LN_font_relief;
+ flag&=QName::tokenizer().insert(ns, "text-underline-type") == NS_style::LN_text_underline_type;
+ flag&=QName::tokenizer().insert(ns, "text-underline-style") == NS_style::LN_text_underline_style;
+ flag&=QName::tokenizer().insert(ns, "text-underline-width") == NS_style::LN_text_underline_width;
+ flag&=QName::tokenizer().insert(ns, "text-underline-color") == NS_style::LN_text_underline_color;
+ flag&=QName::tokenizer().insert(ns, "font-weight-asian") == NS_style::LN_font_weight_asian;
+ flag&=QName::tokenizer().insert(ns, "font-weight-complex") == NS_style::LN_font_weight_complex;
+ flag&=QName::tokenizer().insert(ns, "text-underline-mode") == NS_style::LN_text_underline_mode;
+ flag&=QName::tokenizer().insert(ns, "text-line-through-mode") == NS_style::LN_text_line_through_mode;
+ flag&=QName::tokenizer().insert(ns, "letter-kerning") == NS_style::LN_letter_kerning;
+ flag&=QName::tokenizer().insert(ns, "text-blinking") == NS_style::LN_text_blinking;
+ flag&=QName::tokenizer().insert(ns, "text-combine") == NS_style::LN_text_combine;
+ flag&=QName::tokenizer().insert(ns, "text-combine-start-char") == NS_style::LN_text_combine_start_char;
+ flag&=QName::tokenizer().insert(ns, "text-combine-end-char") == NS_style::LN_text_combine_end_char;
+ flag&=QName::tokenizer().insert(ns, "text-emphasize") == NS_style::LN_text_emphasize;
+ flag&=QName::tokenizer().insert(ns, "text-scale") == NS_style::LN_text_scale;
+ flag&=QName::tokenizer().insert(ns, "text-rotation-angle") == NS_style::LN_text_rotation_angle;
+ flag&=QName::tokenizer().insert(ns, "text-rotation-scale") == NS_style::LN_text_rotation_scale;
+ flag&=QName::tokenizer().insert(ns, "presentation-page-layout") == NS_style::LN_presentation_page_layout;
+ flag&=QName::tokenizer().insert(ns, "page-layout-properties") == NS_style::LN_page_layout_properties;
+ flag&=QName::tokenizer().insert(ns, "paragraph-properties") == NS_style::LN_paragraph_properties;
+ flag&=QName::tokenizer().insert(ns, "paper-tray-name") == NS_style::LN_paper_tray_name;
+ flag&=QName::tokenizer().insert(ns, "print-orientation") == NS_style::LN_print_orientation;
+ flag&=QName::tokenizer().insert(ns, "line-height-at-least") == NS_style::LN_line_height_at_least;
+ flag&=QName::tokenizer().insert(ns, "register-truth-ref-style-name") == NS_style::LN_register_truth_ref_style_name;
+ flag&=QName::tokenizer().insert(ns, "line-spacing") == NS_style::LN_line_spacing;
+ flag&=QName::tokenizer().insert(ns, "print") == NS_style::LN_print;
+ flag&=QName::tokenizer().insert(ns, "print-page-order") == NS_style::LN_print_page_order;
+ flag&=QName::tokenizer().insert(ns, "font-independent-line-spacing") == NS_style::LN_font_independent_line_spacing;
+ flag&=QName::tokenizer().insert(ns, "first-page-number") == NS_style::LN_first_page_number;
+ flag&=QName::tokenizer().insert(ns, "scale-to") == NS_style::LN_scale_to;
+ flag&=QName::tokenizer().insert(ns, "scale-to-pages") == NS_style::LN_scale_to_pages;
+ flag&=QName::tokenizer().insert(ns, "justify-single-word") == NS_style::LN_justify_single_word;
+ flag&=QName::tokenizer().insert(ns, "table-centering") == NS_style::LN_table_centering;
+ flag&=QName::tokenizer().insert(ns, "footnote-max-height") == NS_style::LN_footnote_max_height;
+ flag&=QName::tokenizer().insert(ns, "footnote-sep") == NS_style::LN_footnote_sep;
+ flag&=QName::tokenizer().insert(ns, "width") == NS_style::LN_width;
+ flag&=QName::tokenizer().insert(ns, "tab-stops") == NS_style::LN_tab_stops;
+ flag&=QName::tokenizer().insert(ns, "color") == NS_style::LN_color;
+ flag&=QName::tokenizer().insert(ns, "tab-stop") == NS_style::LN_tab_stop;
+ flag&=QName::tokenizer().insert(ns, "char") == NS_style::LN_char;
+ flag&=QName::tokenizer().insert(ns, "line-style") == NS_style::LN_line_style;
+ flag&=QName::tokenizer().insert(ns, "leader-type") == NS_style::LN_leader_type;
+ flag&=QName::tokenizer().insert(ns, "adjustment") == NS_style::LN_adjustment;
+ flag&=QName::tokenizer().insert(ns, "leader-style") == NS_style::LN_leader_style;
+ flag&=QName::tokenizer().insert(ns, "distance-before-sep") == NS_style::LN_distance_before_sep;
+ flag&=QName::tokenizer().insert(ns, "leader-width") == NS_style::LN_leader_width;
+ flag&=QName::tokenizer().insert(ns, "distance-after-sep") == NS_style::LN_distance_after_sep;
+ flag&=QName::tokenizer().insert(ns, "leader-color") == NS_style::LN_leader_color;
+ flag&=QName::tokenizer().insert(ns, "layout-grid-mode") == NS_style::LN_layout_grid_mode;
+ flag&=QName::tokenizer().insert(ns, "leader-text") == NS_style::LN_leader_text;
+ flag&=QName::tokenizer().insert(ns, "leader-text-style") == NS_style::LN_leader_text_style;
+ flag&=QName::tokenizer().insert(ns, "layout-grid-base-height") == NS_style::LN_layout_grid_base_height;
+ flag&=QName::tokenizer().insert(ns, "tab-stop-distance") == NS_style::LN_tab_stop_distance;
+ flag&=QName::tokenizer().insert(ns, "layout-grid-ruby-height") == NS_style::LN_layout_grid_ruby_height;
+ flag&=QName::tokenizer().insert(ns, "layout-grid-lines") == NS_style::LN_layout_grid_lines;
+ flag&=QName::tokenizer().insert(ns, "layout-grid-color") == NS_style::LN_layout_grid_color;
+ flag&=QName::tokenizer().insert(ns, "drop-cap") == NS_style::LN_drop_cap;
+ flag&=QName::tokenizer().insert(ns, "length") == NS_style::LN_length;
+ flag&=QName::tokenizer().insert(ns, "layout-grid-ruby-below") == NS_style::LN_layout_grid_ruby_below;
+ flag&=QName::tokenizer().insert(ns, "lines") == NS_style::LN_lines;
+ flag&=QName::tokenizer().insert(ns, "distance") == NS_style::LN_distance;
+ flag&=QName::tokenizer().insert(ns, "layout-grid-print") == NS_style::LN_layout_grid_print;
+ flag&=QName::tokenizer().insert(ns, "style-name") == NS_style::LN_style_name;
+ flag&=QName::tokenizer().insert(ns, "register-true") == NS_style::LN_register_true;
+ flag&=QName::tokenizer().insert(ns, "layout-grid-display") == NS_style::LN_layout_grid_display;
+ flag&=QName::tokenizer().insert(ns, "header-footer-properties") == NS_style::LN_header_footer_properties;
+ flag&=QName::tokenizer().insert(ns, "dynamic-spacing") == NS_style::LN_dynamic_spacing;
+ flag&=QName::tokenizer().insert(ns, "auto-text-indent") == NS_style::LN_auto_text_indent;
+ flag&=QName::tokenizer().insert(ns, "text-properties") == NS_style::LN_text_properties;
+ flag&=QName::tokenizer().insert(ns, "use-window-font-color") == NS_style::LN_use_window_font_color;
+ flag&=QName::tokenizer().insert(ns, "text-outline") == NS_style::LN_text_outline;
+ flag&=QName::tokenizer().insert(ns, "text-line-through-type") == NS_style::LN_text_line_through_type;
+ flag&=QName::tokenizer().insert(ns, "background-image") == NS_style::LN_background_image;
+ flag&=QName::tokenizer().insert(ns, "text-line-through-style") == NS_style::LN_text_line_through_style;
+ flag&=QName::tokenizer().insert(ns, "repeat") == NS_style::LN_repeat;
+ flag&=QName::tokenizer().insert(ns, "filter-name") == NS_style::LN_filter_name;
+ flag&=QName::tokenizer().insert(ns, "text-line-through-width") == NS_style::LN_text_line_through_width;
+ flag&=QName::tokenizer().insert(ns, "text-line-through-color") == NS_style::LN_text_line_through_color;
+ flag&=QName::tokenizer().insert(ns, "text-line-through-text") == NS_style::LN_text_line_through_text;
+ flag&=QName::tokenizer().insert(ns, "text-line-through-text-style") == NS_style::LN_text_line_through_text_style;
+ flag&=QName::tokenizer().insert(ns, "border-line-width") == NS_style::LN_border_line_width;
+ flag&=QName::tokenizer().insert(ns, "text-position") == NS_style::LN_text_position;
+ flag&=QName::tokenizer().insert(ns, "border-line-width-top") == NS_style::LN_border_line_width_top;
+ flag&=QName::tokenizer().insert(ns, "font-name") == NS_style::LN_font_name;
+ flag&=QName::tokenizer().insert(ns, "border-line-width-bottom") == NS_style::LN_border_line_width_bottom;
+ flag&=QName::tokenizer().insert(ns, "font-name-asian") == NS_style::LN_font_name_asian;
+ flag&=QName::tokenizer().insert(ns, "font-name-complex") == NS_style::LN_font_name_complex;
+ flag&=QName::tokenizer().insert(ns, "border-line-width-left") == NS_style::LN_border_line_width_left;
+ flag&=QName::tokenizer().insert(ns, "font-family-asian") == NS_style::LN_font_family_asian;
+ flag&=QName::tokenizer().insert(ns, "border-line-width-right") == NS_style::LN_border_line_width_right;
+ flag&=QName::tokenizer().insert(ns, "font-family-complex") == NS_style::LN_font_family_complex;
+ flag&=QName::tokenizer().insert(ns, "data-style-name") == NS_style::LN_data_style_name;
+ flag&=QName::tokenizer().insert(ns, "font-family-generic-asian") == NS_style::LN_font_family_generic_asian;
+ flag&=QName::tokenizer().insert(ns, "font-family-generic-complex") == NS_style::LN_font_family_generic_complex;
+ flag&=QName::tokenizer().insert(ns, "shadow") == NS_style::LN_shadow;
+ flag&=QName::tokenizer().insert(ns, "font-style-name") == NS_style::LN_font_style_name;
+ flag&=QName::tokenizer().insert(ns, "font-style-name-asian") == NS_style::LN_font_style_name_asian;
+ flag&=QName::tokenizer().insert(ns, "font-style-name-complex") == NS_style::LN_font_style_name_complex;
+ flag&=QName::tokenizer().insert(ns, "text-autospace") == NS_style::LN_text_autospace;
+ flag&=QName::tokenizer().insert(ns, "font-pitch-asian") == NS_style::LN_font_pitch_asian;
+ flag&=QName::tokenizer().insert(ns, "punctuation-wrap") == NS_style::LN_punctuation_wrap;
+ flag&=QName::tokenizer().insert(ns, "line-break") == NS_style::LN_line_break;
+ flag&=QName::tokenizer().insert(ns, "font-pitch-complex") == NS_style::LN_font_pitch_complex;
+ flag&=QName::tokenizer().insert(ns, "vertical-align") == NS_style::LN_vertical_align;
+ flag&=QName::tokenizer().insert(ns, "writing-mode") == NS_style::LN_writing_mode;
+ flag&=QName::tokenizer().insert(ns, "writing-mode-automatic") == NS_style::LN_writing_mode_automatic;
+ flag&=QName::tokenizer().insert(ns, "snap-to-layout-grid") == NS_style::LN_snap_to_layout_grid;
+ flag&=QName::tokenizer().insert(ns, "page-number") == NS_style::LN_page_number;
+ flag&=QName::tokenizer().insert(ns, "background-transparency") == NS_style::LN_background_transparency;
+ flag&=QName::tokenizer().insert(ns, "ruby-properties") == NS_style::LN_ruby_properties;
+ flag&=QName::tokenizer().insert(ns, "ruby-position") == NS_style::LN_ruby_position;
+ flag&=QName::tokenizer().insert(ns, "ruby-align") == NS_style::LN_ruby_align;
+ flag&=QName::tokenizer().insert(ns, "section-properties") == NS_style::LN_section_properties;
+ flag&=QName::tokenizer().insert(ns, "columns") == NS_style::LN_columns;
+ flag&=QName::tokenizer().insert(ns, "column") == NS_style::LN_column;
+ flag&=QName::tokenizer().insert(ns, "column-sep") == NS_style::LN_column_sep;
+ flag&=QName::tokenizer().insert(ns, "height") == NS_style::LN_height;
+ flag&=QName::tokenizer().insert(ns, "protect") == NS_style::LN_protect;
+ flag&=QName::tokenizer().insert(ns, "table-properties") == NS_style::LN_table_properties;
+ flag&=QName::tokenizer().insert(ns, "may-break-between-rows") == NS_style::LN_may_break_between_rows;
+ flag&=QName::tokenizer().insert(ns, "table-column-properties") == NS_style::LN_table_column_properties;
+ flag&=QName::tokenizer().insert(ns, "column-width") == NS_style::LN_column_width;
+ flag&=QName::tokenizer().insert(ns, "rel-column-width") == NS_style::LN_rel_column_width;
+ flag&=QName::tokenizer().insert(ns, "use-optimal-column-width") == NS_style::LN_use_optimal_column_width;
+ flag&=QName::tokenizer().insert(ns, "table-row-properties") == NS_style::LN_table_row_properties;
+ flag&=QName::tokenizer().insert(ns, "row-height") == NS_style::LN_row_height;
+ flag&=QName::tokenizer().insert(ns, "min-row-height") == NS_style::LN_min_row_height;
+ flag&=QName::tokenizer().insert(ns, "use-optimal-row-height") == NS_style::LN_use_optimal_row_height;
+ flag&=QName::tokenizer().insert(ns, "table-cell-properties") == NS_style::LN_table_cell_properties;
+ flag&=QName::tokenizer().insert(ns, "text-align-source") == NS_style::LN_text_align_source;
+ flag&=QName::tokenizer().insert(ns, "direction") == NS_style::LN_direction;
+ flag&=QName::tokenizer().insert(ns, "glyph-orientation-vertical") == NS_style::LN_glyph_orientation_vertical;
+ flag&=QName::tokenizer().insert(ns, "diagonal-tl-br") == NS_style::LN_diagonal_tl_br;
+ flag&=QName::tokenizer().insert(ns, "diagonal-tl-br-widths") == NS_style::LN_diagonal_tl_br_widths;
+ flag&=QName::tokenizer().insert(ns, "diagonal-bl-tr") == NS_style::LN_diagonal_bl_tr;
+ flag&=QName::tokenizer().insert(ns, "diagonal-bl-tr-widths") == NS_style::LN_diagonal_bl_tr_widths;
+ flag&=QName::tokenizer().insert(ns, "rotation-angle") == NS_style::LN_rotation_angle;
+ flag&=QName::tokenizer().insert(ns, "rotation-align") == NS_style::LN_rotation_align;
+ flag&=QName::tokenizer().insert(ns, "cell-protect") == NS_style::LN_cell_protect;
+ flag&=QName::tokenizer().insert(ns, "print-content") == NS_style::LN_print_content;
+ flag&=QName::tokenizer().insert(ns, "decimal-places") == NS_style::LN_decimal_places;
+ flag&=QName::tokenizer().insert(ns, "repeat-content") == NS_style::LN_repeat_content;
+ flag&=QName::tokenizer().insert(ns, "shrink-to-fit") == NS_style::LN_shrink_to_fit;
+ flag&=QName::tokenizer().insert(ns, "list-level-properties") == NS_style::LN_list_level_properties;
+ flag&=QName::tokenizer().insert(ns, "handout-master") == NS_style::LN_handout_master;
+ flag&=QName::tokenizer().insert(ns, "page-layout-name") == NS_style::LN_page_layout_name;
+ flag&=QName::tokenizer().insert(ns, "legend-expansion") == NS_style::LN_legend_expansion;
+ flag&=QName::tokenizer().insert(ns, "legend-expansion-aspect-ratio") == NS_style::LN_legend_expansion_aspect_ratio;
+ flag&=QName::tokenizer().insert(ns, "rel-width") == NS_style::LN_rel_width;
+ flag&=QName::tokenizer().insert(ns, "rel-height") == NS_style::LN_rel_height;
+ flag&=QName::tokenizer().insert(ns, "horizontal-pos") == NS_style::LN_horizontal_pos;
+ flag&=QName::tokenizer().insert(ns, "horizontal-rel") == NS_style::LN_horizontal_rel;
+ flag&=QName::tokenizer().insert(ns, "vertical-pos") == NS_style::LN_vertical_pos;
+ flag&=QName::tokenizer().insert(ns, "vertical-rel") == NS_style::LN_vertical_rel;
+ flag&=QName::tokenizer().insert(ns, "editable") == NS_style::LN_editable;
+ flag&=QName::tokenizer().insert(ns, "wrap") == NS_style::LN_wrap;
+ flag&=QName::tokenizer().insert(ns, "wrap-dynamic-treshold") == NS_style::LN_wrap_dynamic_treshold;
+ flag&=QName::tokenizer().insert(ns, "number-wrapped-paragraphs") == NS_style::LN_number_wrapped_paragraphs;
+ flag&=QName::tokenizer().insert(ns, "wrap-contour") == NS_style::LN_wrap_contour;
+ flag&=QName::tokenizer().insert(ns, "wrap-contour-mode") == NS_style::LN_wrap_contour_mode;
+ flag&=QName::tokenizer().insert(ns, "run-through") == NS_style::LN_run_through;
+ flag&=QName::tokenizer().insert(ns, "flow-with-text") == NS_style::LN_flow_with_text;
+ flag&=QName::tokenizer().insert(ns, "overflow-behavior") == NS_style::LN_overflow_behavior;
+ flag&=QName::tokenizer().insert(ns, "mirror") == NS_style::LN_mirror;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace style failed", flag);}
+ void test_fo(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0";
+ flag&=QName::tokenizer().insert(ns, "clip") == NS_fo::LN_clip;
+ flag&=QName::tokenizer().insert(ns, "language") == NS_fo::LN_language;
+ flag&=QName::tokenizer().insert(ns, "country") == NS_fo::LN_country;
+ flag&=QName::tokenizer().insert(ns, "font-size") == NS_fo::LN_font_size;
+ flag&=QName::tokenizer().insert(ns, "letter-spacing") == NS_fo::LN_letter_spacing;
+ flag&=QName::tokenizer().insert(ns, "font-style") == NS_fo::LN_font_style;
+ flag&=QName::tokenizer().insert(ns, "text-shadow") == NS_fo::LN_text_shadow;
+ flag&=QName::tokenizer().insert(ns, "font-weight") == NS_fo::LN_font_weight;
+ flag&=QName::tokenizer().insert(ns, "hyphenate") == NS_fo::LN_hyphenate;
+ flag&=QName::tokenizer().insert(ns, "hyphenation-remain-char-count") == NS_fo::LN_hyphenation_remain_char_count;
+ flag&=QName::tokenizer().insert(ns, "page-width") == NS_fo::LN_page_width;
+ flag&=QName::tokenizer().insert(ns, "hyphenation-push-char-count") == NS_fo::LN_hyphenation_push_char_count;
+ flag&=QName::tokenizer().insert(ns, "page-height") == NS_fo::LN_page_height;
+ flag&=QName::tokenizer().insert(ns, "line-height") == NS_fo::LN_line_height;
+ flag&=QName::tokenizer().insert(ns, "text-align") == NS_fo::LN_text_align;
+ flag&=QName::tokenizer().insert(ns, "text-align-last") == NS_fo::LN_text_align_last;
+ flag&=QName::tokenizer().insert(ns, "keep-together") == NS_fo::LN_keep_together;
+ flag&=QName::tokenizer().insert(ns, "widows") == NS_fo::LN_widows;
+ flag&=QName::tokenizer().insert(ns, "orphans") == NS_fo::LN_orphans;
+ flag&=QName::tokenizer().insert(ns, "hyphenation-keep") == NS_fo::LN_hyphenation_keep;
+ flag&=QName::tokenizer().insert(ns, "hyphenation-ladder-count") == NS_fo::LN_hyphenation_ladder_count;
+ flag&=QName::tokenizer().insert(ns, "margin-left") == NS_fo::LN_margin_left;
+ flag&=QName::tokenizer().insert(ns, "margin-right") == NS_fo::LN_margin_right;
+ flag&=QName::tokenizer().insert(ns, "text-indent") == NS_fo::LN_text_indent;
+ flag&=QName::tokenizer().insert(ns, "font-variant") == NS_fo::LN_font_variant;
+ flag&=QName::tokenizer().insert(ns, "margin-top") == NS_fo::LN_margin_top;
+ flag&=QName::tokenizer().insert(ns, "text-transform") == NS_fo::LN_text_transform;
+ flag&=QName::tokenizer().insert(ns, "color") == NS_fo::LN_color;
+ flag&=QName::tokenizer().insert(ns, "margin-bottom") == NS_fo::LN_margin_bottom;
+ flag&=QName::tokenizer().insert(ns, "margin") == NS_fo::LN_margin;
+ flag&=QName::tokenizer().insert(ns, "break-before") == NS_fo::LN_break_before;
+ flag&=QName::tokenizer().insert(ns, "break-after") == NS_fo::LN_break_after;
+ flag&=QName::tokenizer().insert(ns, "background-color") == NS_fo::LN_background_color;
+ flag&=QName::tokenizer().insert(ns, "border") == NS_fo::LN_border;
+ flag&=QName::tokenizer().insert(ns, "border-top") == NS_fo::LN_border_top;
+ flag&=QName::tokenizer().insert(ns, "border-bottom") == NS_fo::LN_border_bottom;
+ flag&=QName::tokenizer().insert(ns, "border-left") == NS_fo::LN_border_left;
+ flag&=QName::tokenizer().insert(ns, "border-right") == NS_fo::LN_border_right;
+ flag&=QName::tokenizer().insert(ns, "font-family") == NS_fo::LN_font_family;
+ flag&=QName::tokenizer().insert(ns, "padding") == NS_fo::LN_padding;
+ flag&=QName::tokenizer().insert(ns, "padding-top") == NS_fo::LN_padding_top;
+ flag&=QName::tokenizer().insert(ns, "padding-bottom") == NS_fo::LN_padding_bottom;
+ flag&=QName::tokenizer().insert(ns, "padding-left") == NS_fo::LN_padding_left;
+ flag&=QName::tokenizer().insert(ns, "padding-right") == NS_fo::LN_padding_right;
+ flag&=QName::tokenizer().insert(ns, "keep-with-next") == NS_fo::LN_keep_with_next;
+ flag&=QName::tokenizer().insert(ns, "column-count") == NS_fo::LN_column_count;
+ flag&=QName::tokenizer().insert(ns, "column-gap") == NS_fo::LN_column_gap;
+ flag&=QName::tokenizer().insert(ns, "start-indent") == NS_fo::LN_start_indent;
+ flag&=QName::tokenizer().insert(ns, "end-indent") == NS_fo::LN_end_indent;
+ flag&=QName::tokenizer().insert(ns, "space-before") == NS_fo::LN_space_before;
+ flag&=QName::tokenizer().insert(ns, "space-after") == NS_fo::LN_space_after;
+ flag&=QName::tokenizer().insert(ns, "wrap-option") == NS_fo::LN_wrap_option;
+ flag&=QName::tokenizer().insert(ns, "width") == NS_fo::LN_width;
+ flag&=QName::tokenizer().insert(ns, "height") == NS_fo::LN_height;
+ flag&=QName::tokenizer().insert(ns, "min-height") == NS_fo::LN_min_height;
+ flag&=QName::tokenizer().insert(ns, "min-width") == NS_fo::LN_min_width;
+ flag&=QName::tokenizer().insert(ns, "max-height") == NS_fo::LN_max_height;
+ flag&=QName::tokenizer().insert(ns, "max-width") == NS_fo::LN_max_width;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace fo failed", flag);}
+ void test_xforms(){
+ bool flag=true;
+ static const char ns[] = "http://www.w3.org/2002/xforms";
+ flag&=QName::tokenizer().insert(ns, "model") == NS_xforms::LN_model;
+ flag&=QName::tokenizer().insert(ns, "bind") == NS_xforms::LN_bind;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace xforms failed", flag);}
+ void test_draw(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:drawing:1.0";
+ flag&=QName::tokenizer().insert(ns, "wrap-influence-on-position") == NS_draw::LN_wrap_influence_on_position;
+ flag&=QName::tokenizer().insert(ns, "frame-display-scrollbar") == NS_draw::LN_frame_display_scrollbar;
+ flag&=QName::tokenizer().insert(ns, "frame-display-border") == NS_draw::LN_frame_display_border;
+ flag&=QName::tokenizer().insert(ns, "frame-margin-horizontal") == NS_draw::LN_frame_margin_horizontal;
+ flag&=QName::tokenizer().insert(ns, "frame-margin-vertical") == NS_draw::LN_frame_margin_vertical;
+ flag&=QName::tokenizer().insert(ns, "visible-area-left") == NS_draw::LN_visible_area_left;
+ flag&=QName::tokenizer().insert(ns, "visible-area-top") == NS_draw::LN_visible_area_top;
+ flag&=QName::tokenizer().insert(ns, "visible-area-width") == NS_draw::LN_visible_area_width;
+ flag&=QName::tokenizer().insert(ns, "visible-area-height") == NS_draw::LN_visible_area_height;
+ flag&=QName::tokenizer().insert(ns, "ole-draw-aspect") == NS_draw::LN_ole_draw_aspect;
+ flag&=QName::tokenizer().insert(ns, "custom-shape") == NS_draw::LN_custom_shape;
+ flag&=QName::tokenizer().insert(ns, "engine") == NS_draw::LN_engine;
+ flag&=QName::tokenizer().insert(ns, "data") == NS_draw::LN_data;
+ flag&=QName::tokenizer().insert(ns, "enhanced-geometry") == NS_draw::LN_enhanced_geometry;
+ flag&=QName::tokenizer().insert(ns, "mirror-vertical") == NS_draw::LN_mirror_vertical;
+ flag&=QName::tokenizer().insert(ns, "mirror-horizontal") == NS_draw::LN_mirror_horizontal;
+ flag&=QName::tokenizer().insert(ns, "text-rotate-angle") == NS_draw::LN_text_rotate_angle;
+ flag&=QName::tokenizer().insert(ns, "extrusion-allowed") == NS_draw::LN_extrusion_allowed;
+ flag&=QName::tokenizer().insert(ns, "text-path-allowed") == NS_draw::LN_text_path_allowed;
+ flag&=QName::tokenizer().insert(ns, "concentric-gradient-fill-allowed") == NS_draw::LN_concentric_gradient_fill_allowed;
+ flag&=QName::tokenizer().insert(ns, "extrusion") == NS_draw::LN_extrusion;
+ flag&=QName::tokenizer().insert(ns, "extrusion-brightness") == NS_draw::LN_extrusion_brightness;
+ flag&=QName::tokenizer().insert(ns, "extrusion-depth") == NS_draw::LN_extrusion_depth;
+ flag&=QName::tokenizer().insert(ns, "extrusion-diffusion") == NS_draw::LN_extrusion_diffusion;
+ flag&=QName::tokenizer().insert(ns, "extrusion-number-of-line-segments") == NS_draw::LN_extrusion_number_of_line_segments;
+ flag&=QName::tokenizer().insert(ns, "extrusion-light-face") == NS_draw::LN_extrusion_light_face;
+ flag&=QName::tokenizer().insert(ns, "extrusion-first-light-harsh") == NS_draw::LN_extrusion_first_light_harsh;
+ flag&=QName::tokenizer().insert(ns, "extrusion-second-light-harsh") == NS_draw::LN_extrusion_second_light_harsh;
+ flag&=QName::tokenizer().insert(ns, "extrusion-first-light-level") == NS_draw::LN_extrusion_first_light_level;
+ flag&=QName::tokenizer().insert(ns, "extrusion-second-light-level") == NS_draw::LN_extrusion_second_light_level;
+ flag&=QName::tokenizer().insert(ns, "extrusion-first-light-direction") == NS_draw::LN_extrusion_first_light_direction;
+ flag&=QName::tokenizer().insert(ns, "extrusion-second-light-direction") == NS_draw::LN_extrusion_second_light_direction;
+ flag&=QName::tokenizer().insert(ns, "extrusion-metal") == NS_draw::LN_extrusion_metal;
+ flag&=QName::tokenizer().insert(ns, "extrusion-rotation-angle") == NS_draw::LN_extrusion_rotation_angle;
+ flag&=QName::tokenizer().insert(ns, "extrusion-rotation-center") == NS_draw::LN_extrusion_rotation_center;
+ flag&=QName::tokenizer().insert(ns, "extrusion-shininess") == NS_draw::LN_extrusion_shininess;
+ flag&=QName::tokenizer().insert(ns, "extrusion-skew") == NS_draw::LN_extrusion_skew;
+ flag&=QName::tokenizer().insert(ns, "extrusion-specularity") == NS_draw::LN_extrusion_specularity;
+ flag&=QName::tokenizer().insert(ns, "extrusion-viewpoint") == NS_draw::LN_extrusion_viewpoint;
+ flag&=QName::tokenizer().insert(ns, "extrusion-origin") == NS_draw::LN_extrusion_origin;
+ flag&=QName::tokenizer().insert(ns, "extrusion-color") == NS_draw::LN_extrusion_color;
+ flag&=QName::tokenizer().insert(ns, "enhanced-path") == NS_draw::LN_enhanced_path;
+ flag&=QName::tokenizer().insert(ns, "path-stretchpoint-x") == NS_draw::LN_path_stretchpoint_x;
+ flag&=QName::tokenizer().insert(ns, "path-stretchpoint-y") == NS_draw::LN_path_stretchpoint_y;
+ flag&=QName::tokenizer().insert(ns, "text-areas") == NS_draw::LN_text_areas;
+ flag&=QName::tokenizer().insert(ns, "glue-points") == NS_draw::LN_glue_points;
+ flag&=QName::tokenizer().insert(ns, "glue-point-type") == NS_draw::LN_glue_point_type;
+ flag&=QName::tokenizer().insert(ns, "glue-point-leaving-directions") == NS_draw::LN_glue_point_leaving_directions;
+ flag&=QName::tokenizer().insert(ns, "text-path") == NS_draw::LN_text_path;
+ flag&=QName::tokenizer().insert(ns, "text-path-mode") == NS_draw::LN_text_path_mode;
+ flag&=QName::tokenizer().insert(ns, "text-path-scale") == NS_draw::LN_text_path_scale;
+ flag&=QName::tokenizer().insert(ns, "text-path-same-letter-heights") == NS_draw::LN_text_path_same_letter_heights;
+ flag&=QName::tokenizer().insert(ns, "modifiers") == NS_draw::LN_modifiers;
+ flag&=QName::tokenizer().insert(ns, "background-size") == NS_draw::LN_background_size;
+ flag&=QName::tokenizer().insert(ns, "equation") == NS_draw::LN_equation;
+ flag&=QName::tokenizer().insert(ns, "formula") == NS_draw::LN_formula;
+ flag&=QName::tokenizer().insert(ns, "handle") == NS_draw::LN_handle;
+ flag&=QName::tokenizer().insert(ns, "handle-mirror-vertical") == NS_draw::LN_handle_mirror_vertical;
+ flag&=QName::tokenizer().insert(ns, "handle-mirror-horizontal") == NS_draw::LN_handle_mirror_horizontal;
+ flag&=QName::tokenizer().insert(ns, "handle-switched") == NS_draw::LN_handle_switched;
+ flag&=QName::tokenizer().insert(ns, "handle-position") == NS_draw::LN_handle_position;
+ flag&=QName::tokenizer().insert(ns, "handle-range-x-minimum") == NS_draw::LN_handle_range_x_minimum;
+ flag&=QName::tokenizer().insert(ns, "handle-range-x-maximum") == NS_draw::LN_handle_range_x_maximum;
+ flag&=QName::tokenizer().insert(ns, "handle-range-y-minimum") == NS_draw::LN_handle_range_y_minimum;
+ flag&=QName::tokenizer().insert(ns, "handle-range-y-maximum") == NS_draw::LN_handle_range_y_maximum;
+ flag&=QName::tokenizer().insert(ns, "handle-polar") == NS_draw::LN_handle_polar;
+ flag&=QName::tokenizer().insert(ns, "handle-radius-range-minimum") == NS_draw::LN_handle_radius_range_minimum;
+ flag&=QName::tokenizer().insert(ns, "handle-radius-range-maximum") == NS_draw::LN_handle_radius_range_maximum;
+ flag&=QName::tokenizer().insert(ns, "gradient") == NS_draw::LN_gradient;
+ flag&=QName::tokenizer().insert(ns, "display-name") == NS_draw::LN_display_name;
+ flag&=QName::tokenizer().insert(ns, "style") == NS_draw::LN_style;
+ flag&=QName::tokenizer().insert(ns, "cx") == NS_draw::LN_cx;
+ flag&=QName::tokenizer().insert(ns, "cy") == NS_draw::LN_cy;
+ flag&=QName::tokenizer().insert(ns, "start-color") == NS_draw::LN_start_color;
+ flag&=QName::tokenizer().insert(ns, "end-color") == NS_draw::LN_end_color;
+ flag&=QName::tokenizer().insert(ns, "start-intensity") == NS_draw::LN_start_intensity;
+ flag&=QName::tokenizer().insert(ns, "end-intensity") == NS_draw::LN_end_intensity;
+ flag&=QName::tokenizer().insert(ns, "angle") == NS_draw::LN_angle;
+ flag&=QName::tokenizer().insert(ns, "border") == NS_draw::LN_border;
+ flag&=QName::tokenizer().insert(ns, "hatch") == NS_draw::LN_hatch;
+ flag&=QName::tokenizer().insert(ns, "distance") == NS_draw::LN_distance;
+ flag&=QName::tokenizer().insert(ns, "rotation") == NS_draw::LN_rotation;
+ flag&=QName::tokenizer().insert(ns, "fill-image") == NS_draw::LN_fill_image;
+ flag&=QName::tokenizer().insert(ns, "opacity") == NS_draw::LN_opacity;
+ flag&=QName::tokenizer().insert(ns, "start") == NS_draw::LN_start;
+ flag&=QName::tokenizer().insert(ns, "end") == NS_draw::LN_end;
+ flag&=QName::tokenizer().insert(ns, "marker") == NS_draw::LN_marker;
+ flag&=QName::tokenizer().insert(ns, "stroke-dash") == NS_draw::LN_stroke_dash;
+ flag&=QName::tokenizer().insert(ns, "dots1") == NS_draw::LN_dots1;
+ flag&=QName::tokenizer().insert(ns, "dots1-length") == NS_draw::LN_dots1_length;
+ flag&=QName::tokenizer().insert(ns, "dots2") == NS_draw::LN_dots2;
+ flag&=QName::tokenizer().insert(ns, "dots2-length") == NS_draw::LN_dots2_length;
+ flag&=QName::tokenizer().insert(ns, "stroke") == NS_draw::LN_stroke;
+ flag&=QName::tokenizer().insert(ns, "stroke-dash-names") == NS_draw::LN_stroke_dash_names;
+ flag&=QName::tokenizer().insert(ns, "marker-start") == NS_draw::LN_marker_start;
+ flag&=QName::tokenizer().insert(ns, "marker-end") == NS_draw::LN_marker_end;
+ flag&=QName::tokenizer().insert(ns, "marker-start-width") == NS_draw::LN_marker_start_width;
+ flag&=QName::tokenizer().insert(ns, "marker-end-width") == NS_draw::LN_marker_end_width;
+ flag&=QName::tokenizer().insert(ns, "marker-start-center") == NS_draw::LN_marker_start_center;
+ flag&=QName::tokenizer().insert(ns, "marker-end-center") == NS_draw::LN_marker_end_center;
+ flag&=QName::tokenizer().insert(ns, "stroke-linejoin") == NS_draw::LN_stroke_linejoin;
+ flag&=QName::tokenizer().insert(ns, "fill") == NS_draw::LN_fill;
+ flag&=QName::tokenizer().insert(ns, "fill-color") == NS_draw::LN_fill_color;
+ flag&=QName::tokenizer().insert(ns, "secondary-fill-color") == NS_draw::LN_secondary_fill_color;
+ flag&=QName::tokenizer().insert(ns, "fill-gradient-name") == NS_draw::LN_fill_gradient_name;
+ flag&=QName::tokenizer().insert(ns, "gradient-step-count") == NS_draw::LN_gradient_step_count;
+ flag&=QName::tokenizer().insert(ns, "fill-hatch-name") == NS_draw::LN_fill_hatch_name;
+ flag&=QName::tokenizer().insert(ns, "fill-hatch-solid") == NS_draw::LN_fill_hatch_solid;
+ flag&=QName::tokenizer().insert(ns, "fill-image-name") == NS_draw::LN_fill_image_name;
+ flag&=QName::tokenizer().insert(ns, "fill-image-width") == NS_draw::LN_fill_image_width;
+ flag&=QName::tokenizer().insert(ns, "fill-image-height") == NS_draw::LN_fill_image_height;
+ flag&=QName::tokenizer().insert(ns, "fill-image-ref-point-x") == NS_draw::LN_fill_image_ref_point_x;
+ flag&=QName::tokenizer().insert(ns, "fill-image-ref-point-y") == NS_draw::LN_fill_image_ref_point_y;
+ flag&=QName::tokenizer().insert(ns, "fill-image-ref-point") == NS_draw::LN_fill_image_ref_point;
+ flag&=QName::tokenizer().insert(ns, "tile-repeat-offset") == NS_draw::LN_tile_repeat_offset;
+ flag&=QName::tokenizer().insert(ns, "opacity-name") == NS_draw::LN_opacity_name;
+ flag&=QName::tokenizer().insert(ns, "symbol-color") == NS_draw::LN_symbol_color;
+ flag&=QName::tokenizer().insert(ns, "style-name") == NS_draw::LN_style_name;
+ flag&=QName::tokenizer().insert(ns, "layer-set") == NS_draw::LN_layer_set;
+ flag&=QName::tokenizer().insert(ns, "layer") == NS_draw::LN_layer;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_draw::LN_name;
+ flag&=QName::tokenizer().insert(ns, "protected") == NS_draw::LN_protected;
+ flag&=QName::tokenizer().insert(ns, "display") == NS_draw::LN_display;
+ flag&=QName::tokenizer().insert(ns, "page") == NS_draw::LN_page;
+ flag&=QName::tokenizer().insert(ns, "master-page-name") == NS_draw::LN_master_page_name;
+ flag&=QName::tokenizer().insert(ns, "shape-id") == NS_draw::LN_shape_id;
+ flag&=QName::tokenizer().insert(ns, "auto-grow-width") == NS_draw::LN_auto_grow_width;
+ flag&=QName::tokenizer().insert(ns, "auto-grow-height") == NS_draw::LN_auto_grow_height;
+ flag&=QName::tokenizer().insert(ns, "id") == NS_draw::LN_id;
+ flag&=QName::tokenizer().insert(ns, "fit-to-size") == NS_draw::LN_fit_to_size;
+ flag&=QName::tokenizer().insert(ns, "rect") == NS_draw::LN_rect;
+ flag&=QName::tokenizer().insert(ns, "fit-to-contour") == NS_draw::LN_fit_to_contour;
+ flag&=QName::tokenizer().insert(ns, "corner-radius") == NS_draw::LN_corner_radius;
+ flag&=QName::tokenizer().insert(ns, "line") == NS_draw::LN_line;
+ flag&=QName::tokenizer().insert(ns, "textarea-vertical-align") == NS_draw::LN_textarea_vertical_align;
+ flag&=QName::tokenizer().insert(ns, "color") == NS_draw::LN_color;
+ flag&=QName::tokenizer().insert(ns, "textarea-horizontal-align") == NS_draw::LN_textarea_horizontal_align;
+ flag&=QName::tokenizer().insert(ns, "color-mode") == NS_draw::LN_color_mode;
+ flag&=QName::tokenizer().insert(ns, "polyline") == NS_draw::LN_polyline;
+ flag&=QName::tokenizer().insert(ns, "points") == NS_draw::LN_points;
+ flag&=QName::tokenizer().insert(ns, "color-inversion") == NS_draw::LN_color_inversion;
+ flag&=QName::tokenizer().insert(ns, "polygon") == NS_draw::LN_polygon;
+ flag&=QName::tokenizer().insert(ns, "luminance") == NS_draw::LN_luminance;
+ flag&=QName::tokenizer().insert(ns, "regular-polygon") == NS_draw::LN_regular_polygon;
+ flag&=QName::tokenizer().insert(ns, "contrast") == NS_draw::LN_contrast;
+ flag&=QName::tokenizer().insert(ns, "concave") == NS_draw::LN_concave;
+ flag&=QName::tokenizer().insert(ns, "gamma") == NS_draw::LN_gamma;
+ flag&=QName::tokenizer().insert(ns, "red") == NS_draw::LN_red;
+ flag&=QName::tokenizer().insert(ns, "corners") == NS_draw::LN_corners;
+ flag&=QName::tokenizer().insert(ns, "green") == NS_draw::LN_green;
+ flag&=QName::tokenizer().insert(ns, "sharpness") == NS_draw::LN_sharpness;
+ flag&=QName::tokenizer().insert(ns, "blue") == NS_draw::LN_blue;
+ flag&=QName::tokenizer().insert(ns, "path") == NS_draw::LN_path;
+ flag&=QName::tokenizer().insert(ns, "image-opacity") == NS_draw::LN_image_opacity;
+ flag&=QName::tokenizer().insert(ns, "shadow") == NS_draw::LN_shadow;
+ flag&=QName::tokenizer().insert(ns, "circle") == NS_draw::LN_circle;
+ flag&=QName::tokenizer().insert(ns, "shadow-offset-x") == NS_draw::LN_shadow_offset_x;
+ flag&=QName::tokenizer().insert(ns, "kind") == NS_draw::LN_kind;
+ flag&=QName::tokenizer().insert(ns, "shadow-offset-y") == NS_draw::LN_shadow_offset_y;
+ flag&=QName::tokenizer().insert(ns, "start-angle") == NS_draw::LN_start_angle;
+ flag&=QName::tokenizer().insert(ns, "shadow-color") == NS_draw::LN_shadow_color;
+ flag&=QName::tokenizer().insert(ns, "end-angle") == NS_draw::LN_end_angle;
+ flag&=QName::tokenizer().insert(ns, "shadow-opacity") == NS_draw::LN_shadow_opacity;
+ flag&=QName::tokenizer().insert(ns, "ellipse") == NS_draw::LN_ellipse;
+ flag&=QName::tokenizer().insert(ns, "start-line-spacing-horizontal") == NS_draw::LN_start_line_spacing_horizontal;
+ flag&=QName::tokenizer().insert(ns, "connector") == NS_draw::LN_connector;
+ flag&=QName::tokenizer().insert(ns, "type") == NS_draw::LN_type;
+ flag&=QName::tokenizer().insert(ns, "start-shape") == NS_draw::LN_start_shape;
+ flag&=QName::tokenizer().insert(ns, "start-line-spacing-vertical") == NS_draw::LN_start_line_spacing_vertical;
+ flag&=QName::tokenizer().insert(ns, "start-glue-point") == NS_draw::LN_start_glue_point;
+ flag&=QName::tokenizer().insert(ns, "end-line-spacing-horizontal") == NS_draw::LN_end_line_spacing_horizontal;
+ flag&=QName::tokenizer().insert(ns, "end-shape") == NS_draw::LN_end_shape;
+ flag&=QName::tokenizer().insert(ns, "end-glue-point") == NS_draw::LN_end_glue_point;
+ flag&=QName::tokenizer().insert(ns, "end-line-spacing-vertical") == NS_draw::LN_end_line_spacing_vertical;
+ flag&=QName::tokenizer().insert(ns, "line-skew") == NS_draw::LN_line_skew;
+ flag&=QName::tokenizer().insert(ns, "line-distance") == NS_draw::LN_line_distance;
+ flag&=QName::tokenizer().insert(ns, "caption") == NS_draw::LN_caption;
+ flag&=QName::tokenizer().insert(ns, "guide-overhang") == NS_draw::LN_guide_overhang;
+ flag&=QName::tokenizer().insert(ns, "caption-point-x") == NS_draw::LN_caption_point_x;
+ flag&=QName::tokenizer().insert(ns, "guide-distance") == NS_draw::LN_guide_distance;
+ flag&=QName::tokenizer().insert(ns, "caption-point-y") == NS_draw::LN_caption_point_y;
+ flag&=QName::tokenizer().insert(ns, "measure") == NS_draw::LN_measure;
+ flag&=QName::tokenizer().insert(ns, "start-guide") == NS_draw::LN_start_guide;
+ flag&=QName::tokenizer().insert(ns, "control") == NS_draw::LN_control;
+ flag&=QName::tokenizer().insert(ns, "end-guide") == NS_draw::LN_end_guide;
+ flag&=QName::tokenizer().insert(ns, "placing") == NS_draw::LN_placing;
+ flag&=QName::tokenizer().insert(ns, "page-thumbnail") == NS_draw::LN_page_thumbnail;
+ flag&=QName::tokenizer().insert(ns, "page-number") == NS_draw::LN_page_number;
+ flag&=QName::tokenizer().insert(ns, "parallel") == NS_draw::LN_parallel;
+ flag&=QName::tokenizer().insert(ns, "g") == NS_draw::LN_g;
+ flag&=QName::tokenizer().insert(ns, "measure-align") == NS_draw::LN_measure_align;
+ flag&=QName::tokenizer().insert(ns, "measure-vertical-align") == NS_draw::LN_measure_vertical_align;
+ flag&=QName::tokenizer().insert(ns, "unit") == NS_draw::LN_unit;
+ flag&=QName::tokenizer().insert(ns, "transform") == NS_draw::LN_transform;
+ flag&=QName::tokenizer().insert(ns, "show-unit") == NS_draw::LN_show_unit;
+ flag&=QName::tokenizer().insert(ns, "decimal-places") == NS_draw::LN_decimal_places;
+ flag&=QName::tokenizer().insert(ns, "class-names") == NS_draw::LN_class_names;
+ flag&=QName::tokenizer().insert(ns, "caption-type") == NS_draw::LN_caption_type;
+ flag&=QName::tokenizer().insert(ns, "text-style-name") == NS_draw::LN_text_style_name;
+ flag&=QName::tokenizer().insert(ns, "caption-angle-type") == NS_draw::LN_caption_angle_type;
+ flag&=QName::tokenizer().insert(ns, "z-index") == NS_draw::LN_z_index;
+ flag&=QName::tokenizer().insert(ns, "caption-angle") == NS_draw::LN_caption_angle;
+ flag&=QName::tokenizer().insert(ns, "caption-gap") == NS_draw::LN_caption_gap;
+ flag&=QName::tokenizer().insert(ns, "caption-escape-direction") == NS_draw::LN_caption_escape_direction;
+ flag&=QName::tokenizer().insert(ns, "caption-escape") == NS_draw::LN_caption_escape;
+ flag&=QName::tokenizer().insert(ns, "caption-line-length") == NS_draw::LN_caption_line_length;
+ flag&=QName::tokenizer().insert(ns, "glue-point") == NS_draw::LN_glue_point;
+ flag&=QName::tokenizer().insert(ns, "caption-fit-line-length") == NS_draw::LN_caption_fit_line_length;
+ flag&=QName::tokenizer().insert(ns, "align") == NS_draw::LN_align;
+ flag&=QName::tokenizer().insert(ns, "escape-direction") == NS_draw::LN_escape_direction;
+ flag&=QName::tokenizer().insert(ns, "frame") == NS_draw::LN_frame;
+ flag&=QName::tokenizer().insert(ns, "copy-of") == NS_draw::LN_copy_of;
+ flag&=QName::tokenizer().insert(ns, "text-box") == NS_draw::LN_text_box;
+ flag&=QName::tokenizer().insert(ns, "chain-next-name") == NS_draw::LN_chain_next_name;
+ flag&=QName::tokenizer().insert(ns, "image") == NS_draw::LN_image;
+ flag&=QName::tokenizer().insert(ns, "filter-name") == NS_draw::LN_filter_name;
+ flag&=QName::tokenizer().insert(ns, "object") == NS_draw::LN_object;
+ flag&=QName::tokenizer().insert(ns, "object-ole") == NS_draw::LN_object_ole;
+ flag&=QName::tokenizer().insert(ns, "notify-on-update-of-ranges") == NS_draw::LN_notify_on_update_of_ranges;
+ flag&=QName::tokenizer().insert(ns, "class-id") == NS_draw::LN_class_id;
+ flag&=QName::tokenizer().insert(ns, "applet") == NS_draw::LN_applet;
+ flag&=QName::tokenizer().insert(ns, "code") == NS_draw::LN_code;
+ flag&=QName::tokenizer().insert(ns, "archive") == NS_draw::LN_archive;
+ flag&=QName::tokenizer().insert(ns, "may-script") == NS_draw::LN_may_script;
+ flag&=QName::tokenizer().insert(ns, "plugin") == NS_draw::LN_plugin;
+ flag&=QName::tokenizer().insert(ns, "mime-type") == NS_draw::LN_mime_type;
+ flag&=QName::tokenizer().insert(ns, "param") == NS_draw::LN_param;
+ flag&=QName::tokenizer().insert(ns, "value") == NS_draw::LN_value;
+ flag&=QName::tokenizer().insert(ns, "floating-frame") == NS_draw::LN_floating_frame;
+ flag&=QName::tokenizer().insert(ns, "frame-name") == NS_draw::LN_frame_name;
+ flag&=QName::tokenizer().insert(ns, "contour-polygon") == NS_draw::LN_contour_polygon;
+ flag&=QName::tokenizer().insert(ns, "contour-path") == NS_draw::LN_contour_path;
+ flag&=QName::tokenizer().insert(ns, "recreate-on-edit") == NS_draw::LN_recreate_on_edit;
+ flag&=QName::tokenizer().insert(ns, "a") == NS_draw::LN_a;
+ flag&=QName::tokenizer().insert(ns, "image-map") == NS_draw::LN_image_map;
+ flag&=QName::tokenizer().insert(ns, "area-rectangle") == NS_draw::LN_area_rectangle;
+ flag&=QName::tokenizer().insert(ns, "area-circle") == NS_draw::LN_area_circle;
+ flag&=QName::tokenizer().insert(ns, "area-polygon") == NS_draw::LN_area_polygon;
+ flag&=QName::tokenizer().insert(ns, "nohref") == NS_draw::LN_nohref;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace draw failed", flag);}
+ void test_prj12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/project";
+ flag&=QName::tokenizer().insert(ns, "Type") == NS_prj12::LN_Type;
+ flag&=QName::tokenizer().insert(ns, "UID") == NS_prj12::LN_UID;
+ flag&=QName::tokenizer().insert(ns, "Start") == NS_prj12::LN_Start;
+ flag&=QName::tokenizer().insert(ns, "Finish") == NS_prj12::LN_Finish;
+ flag&=QName::tokenizer().insert(ns, "Unit") == NS_prj12::LN_Unit;
+ flag&=QName::tokenizer().insert(ns, "Value") == NS_prj12::LN_Value;
+ flag&=QName::tokenizer().insert(ns, "Project") == NS_prj12::LN_Project;
+ flag&=QName::tokenizer().insert(ns, "Name") == NS_prj12::LN_Name;
+ flag&=QName::tokenizer().insert(ns, "Title") == NS_prj12::LN_Title;
+ flag&=QName::tokenizer().insert(ns, "Subject") == NS_prj12::LN_Subject;
+ flag&=QName::tokenizer().insert(ns, "Category") == NS_prj12::LN_Category;
+ flag&=QName::tokenizer().insert(ns, "Company") == NS_prj12::LN_Company;
+ flag&=QName::tokenizer().insert(ns, "Manager") == NS_prj12::LN_Manager;
+ flag&=QName::tokenizer().insert(ns, "Author") == NS_prj12::LN_Author;
+ flag&=QName::tokenizer().insert(ns, "CreationDate") == NS_prj12::LN_CreationDate;
+ flag&=QName::tokenizer().insert(ns, "Revision") == NS_prj12::LN_Revision;
+ flag&=QName::tokenizer().insert(ns, "LastSaved") == NS_prj12::LN_LastSaved;
+ flag&=QName::tokenizer().insert(ns, "ScheduleFromStart") == NS_prj12::LN_ScheduleFromStart;
+ flag&=QName::tokenizer().insert(ns, "StartDate") == NS_prj12::LN_StartDate;
+ flag&=QName::tokenizer().insert(ns, "FinishDate") == NS_prj12::LN_FinishDate;
+ flag&=QName::tokenizer().insert(ns, "FYStartDate") == NS_prj12::LN_FYStartDate;
+ flag&=QName::tokenizer().insert(ns, "CriticalSlackLimit") == NS_prj12::LN_CriticalSlackLimit;
+ flag&=QName::tokenizer().insert(ns, "CurrencyDigits") == NS_prj12::LN_CurrencyDigits;
+ flag&=QName::tokenizer().insert(ns, "CurrencySymbol") == NS_prj12::LN_CurrencySymbol;
+ flag&=QName::tokenizer().insert(ns, "CurrencySymbolPosition") == NS_prj12::LN_CurrencySymbolPosition;
+ flag&=QName::tokenizer().insert(ns, "CalendarUID") == NS_prj12::LN_CalendarUID;
+ flag&=QName::tokenizer().insert(ns, "DefaultStartTime") == NS_prj12::LN_DefaultStartTime;
+ flag&=QName::tokenizer().insert(ns, "DefaultFinishTime") == NS_prj12::LN_DefaultFinishTime;
+ flag&=QName::tokenizer().insert(ns, "MinutesPerDay") == NS_prj12::LN_MinutesPerDay;
+ flag&=QName::tokenizer().insert(ns, "MinutesPerWeek") == NS_prj12::LN_MinutesPerWeek;
+ flag&=QName::tokenizer().insert(ns, "DaysPerMonth") == NS_prj12::LN_DaysPerMonth;
+ flag&=QName::tokenizer().insert(ns, "DefaultTaskType") == NS_prj12::LN_DefaultTaskType;
+ flag&=QName::tokenizer().insert(ns, "DefaultFixedCostAccrual") == NS_prj12::LN_DefaultFixedCostAccrual;
+ flag&=QName::tokenizer().insert(ns, "DefaultStandardRate") == NS_prj12::LN_DefaultStandardRate;
+ flag&=QName::tokenizer().insert(ns, "DefaultOvertimeRate") == NS_prj12::LN_DefaultOvertimeRate;
+ flag&=QName::tokenizer().insert(ns, "DurationFormat") == NS_prj12::LN_DurationFormat;
+ flag&=QName::tokenizer().insert(ns, "WorkFormat") == NS_prj12::LN_WorkFormat;
+ flag&=QName::tokenizer().insert(ns, "EditableActualCosts") == NS_prj12::LN_EditableActualCosts;
+ flag&=QName::tokenizer().insert(ns, "HonorConstraints") == NS_prj12::LN_HonorConstraints;
+ flag&=QName::tokenizer().insert(ns, "EarnedValueMethod") == NS_prj12::LN_EarnedValueMethod;
+ flag&=QName::tokenizer().insert(ns, "InsertedProjectsLikeSummary") == NS_prj12::LN_InsertedProjectsLikeSummary;
+ flag&=QName::tokenizer().insert(ns, "MultipleCriticalPaths") == NS_prj12::LN_MultipleCriticalPaths;
+ flag&=QName::tokenizer().insert(ns, "NewTasksEffortDriven") == NS_prj12::LN_NewTasksEffortDriven;
+ flag&=QName::tokenizer().insert(ns, "NewTasksEstimated") == NS_prj12::LN_NewTasksEstimated;
+ flag&=QName::tokenizer().insert(ns, "SplitsInProgressTasks") == NS_prj12::LN_SplitsInProgressTasks;
+ flag&=QName::tokenizer().insert(ns, "SpreadActualCost") == NS_prj12::LN_SpreadActualCost;
+ flag&=QName::tokenizer().insert(ns, "SpreadPercentComplete") == NS_prj12::LN_SpreadPercentComplete;
+ flag&=QName::tokenizer().insert(ns, "TaskUpdatesResource") == NS_prj12::LN_TaskUpdatesResource;
+ flag&=QName::tokenizer().insert(ns, "FiscalYearStart") == NS_prj12::LN_FiscalYearStart;
+ flag&=QName::tokenizer().insert(ns, "WeekStartDay") == NS_prj12::LN_WeekStartDay;
+ flag&=QName::tokenizer().insert(ns, "MoveCompletedEndsBack") == NS_prj12::LN_MoveCompletedEndsBack;
+ flag&=QName::tokenizer().insert(ns, "MoveRemainingStartsBack") == NS_prj12::LN_MoveRemainingStartsBack;
+ flag&=QName::tokenizer().insert(ns, "MoveRemainingStartsForward") == NS_prj12::LN_MoveRemainingStartsForward;
+ flag&=QName::tokenizer().insert(ns, "MoveCompletedEndsForward") == NS_prj12::LN_MoveCompletedEndsForward;
+ flag&=QName::tokenizer().insert(ns, "BaselineForEarnedValue") == NS_prj12::LN_BaselineForEarnedValue;
+ flag&=QName::tokenizer().insert(ns, "AutoAddNewResourcesAndTasks") == NS_prj12::LN_AutoAddNewResourcesAndTasks;
+ flag&=QName::tokenizer().insert(ns, "StatusDate") == NS_prj12::LN_StatusDate;
+ flag&=QName::tokenizer().insert(ns, "CurrentDate") == NS_prj12::LN_CurrentDate;
+ flag&=QName::tokenizer().insert(ns, "MicrosoftProjectServerURL") == NS_prj12::LN_MicrosoftProjectServerURL;
+ flag&=QName::tokenizer().insert(ns, "Autolink") == NS_prj12::LN_Autolink;
+ flag&=QName::tokenizer().insert(ns, "NewTaskStartDate") == NS_prj12::LN_NewTaskStartDate;
+ flag&=QName::tokenizer().insert(ns, "DefaultTaskEVMethod") == NS_prj12::LN_DefaultTaskEVMethod;
+ flag&=QName::tokenizer().insert(ns, "ProjectExternallyEdited") == NS_prj12::LN_ProjectExternallyEdited;
+ flag&=QName::tokenizer().insert(ns, "ExtendedCreationDate") == NS_prj12::LN_ExtendedCreationDate;
+ flag&=QName::tokenizer().insert(ns, "ActualsInSync") == NS_prj12::LN_ActualsInSync;
+ flag&=QName::tokenizer().insert(ns, "RemoveFileProperties") == NS_prj12::LN_RemoveFileProperties;
+ flag&=QName::tokenizer().insert(ns, "AdminProject") == NS_prj12::LN_AdminProject;
+ flag&=QName::tokenizer().insert(ns, "OutlineCodes") == NS_prj12::LN_OutlineCodes;
+ flag&=QName::tokenizer().insert(ns, "OutlineCode") == NS_prj12::LN_OutlineCode;
+ flag&=QName::tokenizer().insert(ns, "FieldID") == NS_prj12::LN_FieldID;
+ flag&=QName::tokenizer().insert(ns, "FieldName") == NS_prj12::LN_FieldName;
+ flag&=QName::tokenizer().insert(ns, "Alias") == NS_prj12::LN_Alias;
+ flag&=QName::tokenizer().insert(ns, "PhoneticAlias") == NS_prj12::LN_PhoneticAlias;
+ flag&=QName::tokenizer().insert(ns, "Values") == NS_prj12::LN_Values;
+ flag&=QName::tokenizer().insert(ns, "ValueID") == NS_prj12::LN_ValueID;
+ flag&=QName::tokenizer().insert(ns, "ParentValueID") == NS_prj12::LN_ParentValueID;
+ flag&=QName::tokenizer().insert(ns, "Description") == NS_prj12::LN_Description;
+ flag&=QName::tokenizer().insert(ns, "Enterprise") == NS_prj12::LN_Enterprise;
+ flag&=QName::tokenizer().insert(ns, "EnterpriseOutlineCodeAlias") == NS_prj12::LN_EnterpriseOutlineCodeAlias;
+ flag&=QName::tokenizer().insert(ns, "ResourceSubstitutionEnabled") == NS_prj12::LN_ResourceSubstitutionEnabled;
+ flag&=QName::tokenizer().insert(ns, "LeafOnly") == NS_prj12::LN_LeafOnly;
+ flag&=QName::tokenizer().insert(ns, "AllLevelsRequired") == NS_prj12::LN_AllLevelsRequired;
+ flag&=QName::tokenizer().insert(ns, "OnlyTableValuesAllowed") == NS_prj12::LN_OnlyTableValuesAllowed;
+ flag&=QName::tokenizer().insert(ns, "Masks") == NS_prj12::LN_Masks;
+ flag&=QName::tokenizer().insert(ns, "Mask") == NS_prj12::LN_Mask;
+ flag&=QName::tokenizer().insert(ns, "Level") == NS_prj12::LN_Level;
+ flag&=QName::tokenizer().insert(ns, "Length") == NS_prj12::LN_Length;
+ flag&=QName::tokenizer().insert(ns, "Separator") == NS_prj12::LN_Separator;
+ flag&=QName::tokenizer().insert(ns, "WBSMasks") == NS_prj12::LN_WBSMasks;
+ flag&=QName::tokenizer().insert(ns, "VerifyUniqueCodes") == NS_prj12::LN_VerifyUniqueCodes;
+ flag&=QName::tokenizer().insert(ns, "GenerateCodes") == NS_prj12::LN_GenerateCodes;
+ flag&=QName::tokenizer().insert(ns, "Prefix") == NS_prj12::LN_Prefix;
+ flag&=QName::tokenizer().insert(ns, "WBSMask") == NS_prj12::LN_WBSMask;
+ flag&=QName::tokenizer().insert(ns, "ExtendedAttributes") == NS_prj12::LN_ExtendedAttributes;
+ flag&=QName::tokenizer().insert(ns, "ExtendedAttribute") == NS_prj12::LN_ExtendedAttribute;
+ flag&=QName::tokenizer().insert(ns, "RollupType") == NS_prj12::LN_RollupType;
+ flag&=QName::tokenizer().insert(ns, "CalculationType") == NS_prj12::LN_CalculationType;
+ flag&=QName::tokenizer().insert(ns, "Formula") == NS_prj12::LN_Formula;
+ flag&=QName::tokenizer().insert(ns, "RestrictValues") == NS_prj12::LN_RestrictValues;
+ flag&=QName::tokenizer().insert(ns, "ValuelistSortOrder") == NS_prj12::LN_ValuelistSortOrder;
+ flag&=QName::tokenizer().insert(ns, "AppendNewValues") == NS_prj12::LN_AppendNewValues;
+ flag&=QName::tokenizer().insert(ns, "Default") == NS_prj12::LN_Default;
+ flag&=QName::tokenizer().insert(ns, "ValueList") == NS_prj12::LN_ValueList;
+ flag&=QName::tokenizer().insert(ns, "ID") == NS_prj12::LN_ID;
+ flag&=QName::tokenizer().insert(ns, "Calendars") == NS_prj12::LN_Calendars;
+ flag&=QName::tokenizer().insert(ns, "Calendar") == NS_prj12::LN_Calendar;
+ flag&=QName::tokenizer().insert(ns, "IsBaseCalendar") == NS_prj12::LN_IsBaseCalendar;
+ flag&=QName::tokenizer().insert(ns, "BaseCalendarUID") == NS_prj12::LN_BaseCalendarUID;
+ flag&=QName::tokenizer().insert(ns, "WeekDays") == NS_prj12::LN_WeekDays;
+ flag&=QName::tokenizer().insert(ns, "WeekDay") == NS_prj12::LN_WeekDay;
+ flag&=QName::tokenizer().insert(ns, "DayType") == NS_prj12::LN_DayType;
+ flag&=QName::tokenizer().insert(ns, "DayWorking") == NS_prj12::LN_DayWorking;
+ flag&=QName::tokenizer().insert(ns, "TimePeriod") == NS_prj12::LN_TimePeriod;
+ flag&=QName::tokenizer().insert(ns, "FromDate") == NS_prj12::LN_FromDate;
+ flag&=QName::tokenizer().insert(ns, "ToDate") == NS_prj12::LN_ToDate;
+ flag&=QName::tokenizer().insert(ns, "WorkingTimes") == NS_prj12::LN_WorkingTimes;
+ flag&=QName::tokenizer().insert(ns, "WorkingTime") == NS_prj12::LN_WorkingTime;
+ flag&=QName::tokenizer().insert(ns, "FromTime") == NS_prj12::LN_FromTime;
+ flag&=QName::tokenizer().insert(ns, "ToTime") == NS_prj12::LN_ToTime;
+ flag&=QName::tokenizer().insert(ns, "Tasks") == NS_prj12::LN_Tasks;
+ flag&=QName::tokenizer().insert(ns, "Task") == NS_prj12::LN_Task;
+ flag&=QName::tokenizer().insert(ns, "IsNull") == NS_prj12::LN_IsNull;
+ flag&=QName::tokenizer().insert(ns, "CreateDate") == NS_prj12::LN_CreateDate;
+ flag&=QName::tokenizer().insert(ns, "Contact") == NS_prj12::LN_Contact;
+ flag&=QName::tokenizer().insert(ns, "WBS") == NS_prj12::LN_WBS;
+ flag&=QName::tokenizer().insert(ns, "WBSLevel") == NS_prj12::LN_WBSLevel;
+ flag&=QName::tokenizer().insert(ns, "OutlineNumber") == NS_prj12::LN_OutlineNumber;
+ flag&=QName::tokenizer().insert(ns, "OutlineLevel") == NS_prj12::LN_OutlineLevel;
+ flag&=QName::tokenizer().insert(ns, "Priority") == NS_prj12::LN_Priority;
+ flag&=QName::tokenizer().insert(ns, "Duration") == NS_prj12::LN_Duration;
+ flag&=QName::tokenizer().insert(ns, "Work") == NS_prj12::LN_Work;
+ flag&=QName::tokenizer().insert(ns, "Stop") == NS_prj12::LN_Stop;
+ flag&=QName::tokenizer().insert(ns, "Resume") == NS_prj12::LN_Resume;
+ flag&=QName::tokenizer().insert(ns, "ResumeValid") == NS_prj12::LN_ResumeValid;
+ flag&=QName::tokenizer().insert(ns, "EffortDriven") == NS_prj12::LN_EffortDriven;
+ flag&=QName::tokenizer().insert(ns, "Recurring") == NS_prj12::LN_Recurring;
+ flag&=QName::tokenizer().insert(ns, "OverAllocated") == NS_prj12::LN_OverAllocated;
+ flag&=QName::tokenizer().insert(ns, "Estimated") == NS_prj12::LN_Estimated;
+ flag&=QName::tokenizer().insert(ns, "Milestone") == NS_prj12::LN_Milestone;
+ flag&=QName::tokenizer().insert(ns, "Summary") == NS_prj12::LN_Summary;
+ flag&=QName::tokenizer().insert(ns, "Critical") == NS_prj12::LN_Critical;
+ flag&=QName::tokenizer().insert(ns, "IsSubproject") == NS_prj12::LN_IsSubproject;
+ flag&=QName::tokenizer().insert(ns, "IsSubprojectReadOnly") == NS_prj12::LN_IsSubprojectReadOnly;
+ flag&=QName::tokenizer().insert(ns, "SubprojectName") == NS_prj12::LN_SubprojectName;
+ flag&=QName::tokenizer().insert(ns, "ExternalTask") == NS_prj12::LN_ExternalTask;
+ flag&=QName::tokenizer().insert(ns, "ExternalTaskProject") == NS_prj12::LN_ExternalTaskProject;
+ flag&=QName::tokenizer().insert(ns, "EarlyStart") == NS_prj12::LN_EarlyStart;
+ flag&=QName::tokenizer().insert(ns, "EarlyFinish") == NS_prj12::LN_EarlyFinish;
+ flag&=QName::tokenizer().insert(ns, "LateStart") == NS_prj12::LN_LateStart;
+ flag&=QName::tokenizer().insert(ns, "LateFinish") == NS_prj12::LN_LateFinish;
+ flag&=QName::tokenizer().insert(ns, "StartVariance") == NS_prj12::LN_StartVariance;
+ flag&=QName::tokenizer().insert(ns, "FinishVariance") == NS_prj12::LN_FinishVariance;
+ flag&=QName::tokenizer().insert(ns, "WorkVariance") == NS_prj12::LN_WorkVariance;
+ flag&=QName::tokenizer().insert(ns, "FreeSlack") == NS_prj12::LN_FreeSlack;
+ flag&=QName::tokenizer().insert(ns, "TotalSlack") == NS_prj12::LN_TotalSlack;
+ flag&=QName::tokenizer().insert(ns, "FixedCost") == NS_prj12::LN_FixedCost;
+ flag&=QName::tokenizer().insert(ns, "FixedCostAccrual") == NS_prj12::LN_FixedCostAccrual;
+ flag&=QName::tokenizer().insert(ns, "PercentComplete") == NS_prj12::LN_PercentComplete;
+ flag&=QName::tokenizer().insert(ns, "PercentWorkComplete") == NS_prj12::LN_PercentWorkComplete;
+ flag&=QName::tokenizer().insert(ns, "Cost") == NS_prj12::LN_Cost;
+ flag&=QName::tokenizer().insert(ns, "OvertimeCost") == NS_prj12::LN_OvertimeCost;
+ flag&=QName::tokenizer().insert(ns, "OvertimeWork") == NS_prj12::LN_OvertimeWork;
+ flag&=QName::tokenizer().insert(ns, "ActualStart") == NS_prj12::LN_ActualStart;
+ flag&=QName::tokenizer().insert(ns, "ActualFinish") == NS_prj12::LN_ActualFinish;
+ flag&=QName::tokenizer().insert(ns, "ActualDuration") == NS_prj12::LN_ActualDuration;
+ flag&=QName::tokenizer().insert(ns, "ActualCost") == NS_prj12::LN_ActualCost;
+ flag&=QName::tokenizer().insert(ns, "ActualOvertimeCost") == NS_prj12::LN_ActualOvertimeCost;
+ flag&=QName::tokenizer().insert(ns, "ActualWork") == NS_prj12::LN_ActualWork;
+ flag&=QName::tokenizer().insert(ns, "ActualOvertimeWork") == NS_prj12::LN_ActualOvertimeWork;
+ flag&=QName::tokenizer().insert(ns, "RegularWork") == NS_prj12::LN_RegularWork;
+ flag&=QName::tokenizer().insert(ns, "RemainingDuration") == NS_prj12::LN_RemainingDuration;
+ flag&=QName::tokenizer().insert(ns, "RemainingCost") == NS_prj12::LN_RemainingCost;
+ flag&=QName::tokenizer().insert(ns, "RemainingWork") == NS_prj12::LN_RemainingWork;
+ flag&=QName::tokenizer().insert(ns, "RemainingOvertimeCost") == NS_prj12::LN_RemainingOvertimeCost;
+ flag&=QName::tokenizer().insert(ns, "RemainingOvertimeWork") == NS_prj12::LN_RemainingOvertimeWork;
+ flag&=QName::tokenizer().insert(ns, "ACWP") == NS_prj12::LN_ACWP;
+ flag&=QName::tokenizer().insert(ns, "CV") == NS_prj12::LN_CV;
+ flag&=QName::tokenizer().insert(ns, "ConstraintType") == NS_prj12::LN_ConstraintType;
+ flag&=QName::tokenizer().insert(ns, "ConstraintDate") == NS_prj12::LN_ConstraintDate;
+ flag&=QName::tokenizer().insert(ns, "Deadline") == NS_prj12::LN_Deadline;
+ flag&=QName::tokenizer().insert(ns, "LevelAssignments") == NS_prj12::LN_LevelAssignments;
+ flag&=QName::tokenizer().insert(ns, "LevelingCanSplit") == NS_prj12::LN_LevelingCanSplit;
+ flag&=QName::tokenizer().insert(ns, "LevelingDelay") == NS_prj12::LN_LevelingDelay;
+ flag&=QName::tokenizer().insert(ns, "LevelingDelayFormat") == NS_prj12::LN_LevelingDelayFormat;
+ flag&=QName::tokenizer().insert(ns, "PreLeveledStart") == NS_prj12::LN_PreLeveledStart;
+ flag&=QName::tokenizer().insert(ns, "PreLeveledFinish") == NS_prj12::LN_PreLeveledFinish;
+ flag&=QName::tokenizer().insert(ns, "Hyperlink") == NS_prj12::LN_Hyperlink;
+ flag&=QName::tokenizer().insert(ns, "HyperlinkAddress") == NS_prj12::LN_HyperlinkAddress;
+ flag&=QName::tokenizer().insert(ns, "HyperlinkSubAddress") == NS_prj12::LN_HyperlinkSubAddress;
+ flag&=QName::tokenizer().insert(ns, "IgnoreResourceCalendar") == NS_prj12::LN_IgnoreResourceCalendar;
+ flag&=QName::tokenizer().insert(ns, "Notes") == NS_prj12::LN_Notes;
+ flag&=QName::tokenizer().insert(ns, "HideBar") == NS_prj12::LN_HideBar;
+ flag&=QName::tokenizer().insert(ns, "Rollup") == NS_prj12::LN_Rollup;
+ flag&=QName::tokenizer().insert(ns, "BCWS") == NS_prj12::LN_BCWS;
+ flag&=QName::tokenizer().insert(ns, "BCWP") == NS_prj12::LN_BCWP;
+ flag&=QName::tokenizer().insert(ns, "PhysicalPercentComplete") == NS_prj12::LN_PhysicalPercentComplete;
+ flag&=QName::tokenizer().insert(ns, "PredecessorLink") == NS_prj12::LN_PredecessorLink;
+ flag&=QName::tokenizer().insert(ns, "PredecessorUID") == NS_prj12::LN_PredecessorUID;
+ flag&=QName::tokenizer().insert(ns, "CrossProject") == NS_prj12::LN_CrossProject;
+ flag&=QName::tokenizer().insert(ns, "CrossProjectName") == NS_prj12::LN_CrossProjectName;
+ flag&=QName::tokenizer().insert(ns, "LinkLag") == NS_prj12::LN_LinkLag;
+ flag&=QName::tokenizer().insert(ns, "LagFormat") == NS_prj12::LN_LagFormat;
+ flag&=QName::tokenizer().insert(ns, "ActualWorkProtected") == NS_prj12::LN_ActualWorkProtected;
+ flag&=QName::tokenizer().insert(ns, "ActualOvertimeWorkProtected") == NS_prj12::LN_ActualOvertimeWorkProtected;
+ flag&=QName::tokenizer().insert(ns, "Baseline") == NS_prj12::LN_Baseline;
+ flag&=QName::tokenizer().insert(ns, "TimephasedData") == NS_prj12::LN_TimephasedData;
+ flag&=QName::tokenizer().insert(ns, "Number") == NS_prj12::LN_Number;
+ flag&=QName::tokenizer().insert(ns, "Interim") == NS_prj12::LN_Interim;
+ flag&=QName::tokenizer().insert(ns, "EstimatedDuration") == NS_prj12::LN_EstimatedDuration;
+ flag&=QName::tokenizer().insert(ns, "Resources") == NS_prj12::LN_Resources;
+ flag&=QName::tokenizer().insert(ns, "Resource") == NS_prj12::LN_Resource;
+ flag&=QName::tokenizer().insert(ns, "Initials") == NS_prj12::LN_Initials;
+ flag&=QName::tokenizer().insert(ns, "Phonetics") == NS_prj12::LN_Phonetics;
+ flag&=QName::tokenizer().insert(ns, "NTAccount") == NS_prj12::LN_NTAccount;
+ flag&=QName::tokenizer().insert(ns, "MaterialLabel") == NS_prj12::LN_MaterialLabel;
+ flag&=QName::tokenizer().insert(ns, "Code") == NS_prj12::LN_Code;
+ flag&=QName::tokenizer().insert(ns, "Group") == NS_prj12::LN_Group;
+ flag&=QName::tokenizer().insert(ns, "WorkGroup") == NS_prj12::LN_WorkGroup;
+ flag&=QName::tokenizer().insert(ns, "EmailAddress") == NS_prj12::LN_EmailAddress;
+ flag&=QName::tokenizer().insert(ns, "MaxUnits") == NS_prj12::LN_MaxUnits;
+ flag&=QName::tokenizer().insert(ns, "PeakUnits") == NS_prj12::LN_PeakUnits;
+ flag&=QName::tokenizer().insert(ns, "AvailableFrom") == NS_prj12::LN_AvailableFrom;
+ flag&=QName::tokenizer().insert(ns, "AvailableTo") == NS_prj12::LN_AvailableTo;
+ flag&=QName::tokenizer().insert(ns, "CanLevel") == NS_prj12::LN_CanLevel;
+ flag&=QName::tokenizer().insert(ns, "AccrueAt") == NS_prj12::LN_AccrueAt;
+ flag&=QName::tokenizer().insert(ns, "StandardRate") == NS_prj12::LN_StandardRate;
+ flag&=QName::tokenizer().insert(ns, "StandardRateFormat") == NS_prj12::LN_StandardRateFormat;
+ flag&=QName::tokenizer().insert(ns, "OvertimeRate") == NS_prj12::LN_OvertimeRate;
+ flag&=QName::tokenizer().insert(ns, "OvertimeRateFormat") == NS_prj12::LN_OvertimeRateFormat;
+ flag&=QName::tokenizer().insert(ns, "CostPerUse") == NS_prj12::LN_CostPerUse;
+ flag&=QName::tokenizer().insert(ns, "CostVariance") == NS_prj12::LN_CostVariance;
+ flag&=QName::tokenizer().insert(ns, "SV") == NS_prj12::LN_SV;
+ flag&=QName::tokenizer().insert(ns, "IsGeneric") == NS_prj12::LN_IsGeneric;
+ flag&=QName::tokenizer().insert(ns, "IsInactive") == NS_prj12::LN_IsInactive;
+ flag&=QName::tokenizer().insert(ns, "IsEnterprise") == NS_prj12::LN_IsEnterprise;
+ flag&=QName::tokenizer().insert(ns, "BookingType") == NS_prj12::LN_BookingType;
+ flag&=QName::tokenizer().insert(ns, "ActiveDirectoryGUID") == NS_prj12::LN_ActiveDirectoryGUID;
+ flag&=QName::tokenizer().insert(ns, "AvailabilityPeriods") == NS_prj12::LN_AvailabilityPeriods;
+ flag&=QName::tokenizer().insert(ns, "AvailabilityPeriod") == NS_prj12::LN_AvailabilityPeriod;
+ flag&=QName::tokenizer().insert(ns, "AvailableUnits") == NS_prj12::LN_AvailableUnits;
+ flag&=QName::tokenizer().insert(ns, "Rates") == NS_prj12::LN_Rates;
+ flag&=QName::tokenizer().insert(ns, "Rate") == NS_prj12::LN_Rate;
+ flag&=QName::tokenizer().insert(ns, "RatesFrom") == NS_prj12::LN_RatesFrom;
+ flag&=QName::tokenizer().insert(ns, "RatesTo") == NS_prj12::LN_RatesTo;
+ flag&=QName::tokenizer().insert(ns, "RateTable") == NS_prj12::LN_RateTable;
+ flag&=QName::tokenizer().insert(ns, "Assignments") == NS_prj12::LN_Assignments;
+ flag&=QName::tokenizer().insert(ns, "Assignment") == NS_prj12::LN_Assignment;
+ flag&=QName::tokenizer().insert(ns, "TaskUID") == NS_prj12::LN_TaskUID;
+ flag&=QName::tokenizer().insert(ns, "ResourceUID") == NS_prj12::LN_ResourceUID;
+ flag&=QName::tokenizer().insert(ns, "Confirmed") == NS_prj12::LN_Confirmed;
+ flag&=QName::tokenizer().insert(ns, "CostRateTable") == NS_prj12::LN_CostRateTable;
+ flag&=QName::tokenizer().insert(ns, "Delay") == NS_prj12::LN_Delay;
+ flag&=QName::tokenizer().insert(ns, "HasFixedRateUnits") == NS_prj12::LN_HasFixedRateUnits;
+ flag&=QName::tokenizer().insert(ns, "FixedMaterial") == NS_prj12::LN_FixedMaterial;
+ flag&=QName::tokenizer().insert(ns, "LinkedFields") == NS_prj12::LN_LinkedFields;
+ flag&=QName::tokenizer().insert(ns, "Overallocated") == NS_prj12::LN_Overallocated;
+ flag&=QName::tokenizer().insert(ns, "ResponsePending") == NS_prj12::LN_ResponsePending;
+ flag&=QName::tokenizer().insert(ns, "Units") == NS_prj12::LN_Units;
+ flag&=QName::tokenizer().insert(ns, "UpdateNeeded") == NS_prj12::LN_UpdateNeeded;
+ flag&=QName::tokenizer().insert(ns, "VAC") == NS_prj12::LN_VAC;
+ flag&=QName::tokenizer().insert(ns, "WorkContour") == NS_prj12::LN_WorkContour;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace prj12 failed", flag);}
+ void test_mdc12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/package/2005/06/metadata/core-properties";
+ flag&=QName::tokenizer().insert(ns, "CoreProperties") == NS_mdc12::LN_CoreProperties;
+ flag&=QName::tokenizer().insert(ns, "Creator") == NS_mdc12::LN_Creator;
+ flag&=QName::tokenizer().insert(ns, "Title") == NS_mdc12::LN_Title;
+ flag&=QName::tokenizer().insert(ns, "Subject") == NS_mdc12::LN_Subject;
+ flag&=QName::tokenizer().insert(ns, "Category") == NS_mdc12::LN_Category;
+ flag&=QName::tokenizer().insert(ns, "Keywords") == NS_mdc12::LN_Keywords;
+ flag&=QName::tokenizer().insert(ns, "Description") == NS_mdc12::LN_Description;
+ flag&=QName::tokenizer().insert(ns, "ContentType") == NS_mdc12::LN_ContentType;
+ flag&=QName::tokenizer().insert(ns, "ContentStatus") == NS_mdc12::LN_ContentStatus;
+ flag&=QName::tokenizer().insert(ns, "Version") == NS_mdc12::LN_Version;
+ flag&=QName::tokenizer().insert(ns, "Revision") == NS_mdc12::LN_Revision;
+ flag&=QName::tokenizer().insert(ns, "DateCreated") == NS_mdc12::LN_DateCreated;
+ flag&=QName::tokenizer().insert(ns, "DateModified") == NS_mdc12::LN_DateModified;
+ flag&=QName::tokenizer().insert(ns, "LastModifiedBy") == NS_mdc12::LN_LastModifiedBy;
+ flag&=QName::tokenizer().insert(ns, "LastPrinted") == NS_mdc12::LN_LastPrinted;
+ flag&=QName::tokenizer().insert(ns, "Language") == NS_mdc12::LN_Language;
+ flag&=QName::tokenizer().insert(ns, "Identifier") == NS_mdc12::LN_Identifier;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace mdc12 failed", flag);}
+ void test_table(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:table:1.0";
+ flag&=QName::tokenizer().insert(ns, "dde-link") == NS_table::LN_dde_link;
+ flag&=QName::tokenizer().insert(ns, "table-template") == NS_table::LN_table_template;
+ flag&=QName::tokenizer().insert(ns, "first-row") == NS_table::LN_first_row;
+ flag&=QName::tokenizer().insert(ns, "last-row") == NS_table::LN_last_row;
+ flag&=QName::tokenizer().insert(ns, "first-column") == NS_table::LN_first_column;
+ flag&=QName::tokenizer().insert(ns, "last-column") == NS_table::LN_last_column;
+ flag&=QName::tokenizer().insert(ns, "body") == NS_table::LN_body;
+ flag&=QName::tokenizer().insert(ns, "even-rows") == NS_table::LN_even_rows;
+ flag&=QName::tokenizer().insert(ns, "odd-rows") == NS_table::LN_odd_rows;
+ flag&=QName::tokenizer().insert(ns, "even-columns") == NS_table::LN_even_columns;
+ flag&=QName::tokenizer().insert(ns, "odd-columns") == NS_table::LN_odd_columns;
+ flag&=QName::tokenizer().insert(ns, "table") == NS_table::LN_table;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_table::LN_name;
+ flag&=QName::tokenizer().insert(ns, "style-name") == NS_table::LN_style_name;
+ flag&=QName::tokenizer().insert(ns, "protected") == NS_table::LN_protected;
+ flag&=QName::tokenizer().insert(ns, "protection-key") == NS_table::LN_protection_key;
+ flag&=QName::tokenizer().insert(ns, "print") == NS_table::LN_print;
+ flag&=QName::tokenizer().insert(ns, "print-ranges") == NS_table::LN_print_ranges;
+ flag&=QName::tokenizer().insert(ns, "table-row") == NS_table::LN_table_row;
+ flag&=QName::tokenizer().insert(ns, "number-rows-repeated") == NS_table::LN_number_rows_repeated;
+ flag&=QName::tokenizer().insert(ns, "default-cell-style-name") == NS_table::LN_default_cell_style_name;
+ flag&=QName::tokenizer().insert(ns, "visibility") == NS_table::LN_visibility;
+ flag&=QName::tokenizer().insert(ns, "table-cell") == NS_table::LN_table_cell;
+ flag&=QName::tokenizer().insert(ns, "covered-table-cell") == NS_table::LN_covered_table_cell;
+ flag&=QName::tokenizer().insert(ns, "number-columns-repeated") == NS_table::LN_number_columns_repeated;
+ flag&=QName::tokenizer().insert(ns, "number-columns-spanned") == NS_table::LN_number_columns_spanned;
+ flag&=QName::tokenizer().insert(ns, "number-rows-spanned") == NS_table::LN_number_rows_spanned;
+ flag&=QName::tokenizer().insert(ns, "content-validation-name") == NS_table::LN_content_validation_name;
+ flag&=QName::tokenizer().insert(ns, "formula") == NS_table::LN_formula;
+ flag&=QName::tokenizer().insert(ns, "number-matrix-columns-spanned") == NS_table::LN_number_matrix_columns_spanned;
+ flag&=QName::tokenizer().insert(ns, "number-matrix-rows-spanned") == NS_table::LN_number_matrix_rows_spanned;
+ flag&=QName::tokenizer().insert(ns, "protect") == NS_table::LN_protect;
+ flag&=QName::tokenizer().insert(ns, "table-column") == NS_table::LN_table_column;
+ flag&=QName::tokenizer().insert(ns, "table-header-columns") == NS_table::LN_table_header_columns;
+ flag&=QName::tokenizer().insert(ns, "table-columns") == NS_table::LN_table_columns;
+ flag&=QName::tokenizer().insert(ns, "table-column-group") == NS_table::LN_table_column_group;
+ flag&=QName::tokenizer().insert(ns, "display") == NS_table::LN_display;
+ flag&=QName::tokenizer().insert(ns, "table-header-rows") == NS_table::LN_table_header_rows;
+ flag&=QName::tokenizer().insert(ns, "table-rows") == NS_table::LN_table_rows;
+ flag&=QName::tokenizer().insert(ns, "table-row-group") == NS_table::LN_table_row_group;
+ flag&=QName::tokenizer().insert(ns, "is-sub-table") == NS_table::LN_is_sub_table;
+ flag&=QName::tokenizer().insert(ns, "table-source") == NS_table::LN_table_source;
+ flag&=QName::tokenizer().insert(ns, "mode") == NS_table::LN_mode;
+ flag&=QName::tokenizer().insert(ns, "table-name") == NS_table::LN_table_name;
+ flag&=QName::tokenizer().insert(ns, "filter-name") == NS_table::LN_filter_name;
+ flag&=QName::tokenizer().insert(ns, "filter-options") == NS_table::LN_filter_options;
+ flag&=QName::tokenizer().insert(ns, "refresh-delay") == NS_table::LN_refresh_delay;
+ flag&=QName::tokenizer().insert(ns, "scenario") == NS_table::LN_scenario;
+ flag&=QName::tokenizer().insert(ns, "scenario-ranges") == NS_table::LN_scenario_ranges;
+ flag&=QName::tokenizer().insert(ns, "is-active") == NS_table::LN_is_active;
+ flag&=QName::tokenizer().insert(ns, "display-border") == NS_table::LN_display_border;
+ flag&=QName::tokenizer().insert(ns, "border-color") == NS_table::LN_border_color;
+ flag&=QName::tokenizer().insert(ns, "copy-back") == NS_table::LN_copy_back;
+ flag&=QName::tokenizer().insert(ns, "copy-styles") == NS_table::LN_copy_styles;
+ flag&=QName::tokenizer().insert(ns, "copy-formulas") == NS_table::LN_copy_formulas;
+ flag&=QName::tokenizer().insert(ns, "comment") == NS_table::LN_comment;
+ flag&=QName::tokenizer().insert(ns, "shapes") == NS_table::LN_shapes;
+ flag&=QName::tokenizer().insert(ns, "cell-range-source") == NS_table::LN_cell_range_source;
+ flag&=QName::tokenizer().insert(ns, "last-column-spanned") == NS_table::LN_last_column_spanned;
+ flag&=QName::tokenizer().insert(ns, "last-row-spanned") == NS_table::LN_last_row_spanned;
+ flag&=QName::tokenizer().insert(ns, "detective") == NS_table::LN_detective;
+ flag&=QName::tokenizer().insert(ns, "operation") == NS_table::LN_operation;
+ flag&=QName::tokenizer().insert(ns, "index") == NS_table::LN_index;
+ flag&=QName::tokenizer().insert(ns, "highlighted-range") == NS_table::LN_highlighted_range;
+ flag&=QName::tokenizer().insert(ns, "cell-range-address") == NS_table::LN_cell_range_address;
+ flag&=QName::tokenizer().insert(ns, "direction") == NS_table::LN_direction;
+ flag&=QName::tokenizer().insert(ns, "contains-error") == NS_table::LN_contains_error;
+ flag&=QName::tokenizer().insert(ns, "marked-invalid") == NS_table::LN_marked_invalid;
+ flag&=QName::tokenizer().insert(ns, "structure-protected") == NS_table::LN_structure_protected;
+ flag&=QName::tokenizer().insert(ns, "calculation-settings") == NS_table::LN_calculation_settings;
+ flag&=QName::tokenizer().insert(ns, "case-sensitive") == NS_table::LN_case_sensitive;
+ flag&=QName::tokenizer().insert(ns, "precision-as-shown") == NS_table::LN_precision_as_shown;
+ flag&=QName::tokenizer().insert(ns, "search-criteria-must-apply-to-whole-cell") == NS_table::LN_search_criteria_must_apply_to_whole_cell;
+ flag&=QName::tokenizer().insert(ns, "automatic-find-labels") == NS_table::LN_automatic_find_labels;
+ flag&=QName::tokenizer().insert(ns, "use-regular-expressions") == NS_table::LN_use_regular_expressions;
+ flag&=QName::tokenizer().insert(ns, "null-year") == NS_table::LN_null_year;
+ flag&=QName::tokenizer().insert(ns, "null-date") == NS_table::LN_null_date;
+ flag&=QName::tokenizer().insert(ns, "value-type") == NS_table::LN_value_type;
+ flag&=QName::tokenizer().insert(ns, "date-value-type") == NS_table::LN_date_value_type;
+ flag&=QName::tokenizer().insert(ns, "iteration") == NS_table::LN_iteration;
+ flag&=QName::tokenizer().insert(ns, "status") == NS_table::LN_status;
+ flag&=QName::tokenizer().insert(ns, "steps") == NS_table::LN_steps;
+ flag&=QName::tokenizer().insert(ns, "maximum-difference") == NS_table::LN_maximum_difference;
+ flag&=QName::tokenizer().insert(ns, "content-validations") == NS_table::LN_content_validations;
+ flag&=QName::tokenizer().insert(ns, "content-validation") == NS_table::LN_content_validation;
+ flag&=QName::tokenizer().insert(ns, "condition") == NS_table::LN_condition;
+ flag&=QName::tokenizer().insert(ns, "base-cell-address") == NS_table::LN_base_cell_address;
+ flag&=QName::tokenizer().insert(ns, "allow-empty-cell") == NS_table::LN_allow_empty_cell;
+ flag&=QName::tokenizer().insert(ns, "display-list") == NS_table::LN_display_list;
+ flag&=QName::tokenizer().insert(ns, "help-message") == NS_table::LN_help_message;
+ flag&=QName::tokenizer().insert(ns, "title") == NS_table::LN_title;
+ flag&=QName::tokenizer().insert(ns, "error-message") == NS_table::LN_error_message;
+ flag&=QName::tokenizer().insert(ns, "message-type") == NS_table::LN_message_type;
+ flag&=QName::tokenizer().insert(ns, "error-macro") == NS_table::LN_error_macro;
+ flag&=QName::tokenizer().insert(ns, "execute") == NS_table::LN_execute;
+ flag&=QName::tokenizer().insert(ns, "label-ranges") == NS_table::LN_label_ranges;
+ flag&=QName::tokenizer().insert(ns, "label-range") == NS_table::LN_label_range;
+ flag&=QName::tokenizer().insert(ns, "label-cell-range-address") == NS_table::LN_label_cell_range_address;
+ flag&=QName::tokenizer().insert(ns, "data-cell-range-address") == NS_table::LN_data_cell_range_address;
+ flag&=QName::tokenizer().insert(ns, "orientation") == NS_table::LN_orientation;
+ flag&=QName::tokenizer().insert(ns, "named-expressions") == NS_table::LN_named_expressions;
+ flag&=QName::tokenizer().insert(ns, "named-range") == NS_table::LN_named_range;
+ flag&=QName::tokenizer().insert(ns, "range-usable-as") == NS_table::LN_range_usable_as;
+ flag&=QName::tokenizer().insert(ns, "named-expression") == NS_table::LN_named_expression;
+ flag&=QName::tokenizer().insert(ns, "expression") == NS_table::LN_expression;
+ flag&=QName::tokenizer().insert(ns, "database-ranges") == NS_table::LN_database_ranges;
+ flag&=QName::tokenizer().insert(ns, "database-range") == NS_table::LN_database_range;
+ flag&=QName::tokenizer().insert(ns, "is-selection") == NS_table::LN_is_selection;
+ flag&=QName::tokenizer().insert(ns, "on-update-keep-styles") == NS_table::LN_on_update_keep_styles;
+ flag&=QName::tokenizer().insert(ns, "on-update-keep-size") == NS_table::LN_on_update_keep_size;
+ flag&=QName::tokenizer().insert(ns, "has-persistent-data") == NS_table::LN_has_persistent_data;
+ flag&=QName::tokenizer().insert(ns, "contains-header") == NS_table::LN_contains_header;
+ flag&=QName::tokenizer().insert(ns, "display-filter-buttons") == NS_table::LN_display_filter_buttons;
+ flag&=QName::tokenizer().insert(ns, "target-range-address") == NS_table::LN_target_range_address;
+ flag&=QName::tokenizer().insert(ns, "database-source-sql") == NS_table::LN_database_source_sql;
+ flag&=QName::tokenizer().insert(ns, "database-name") == NS_table::LN_database_name;
+ flag&=QName::tokenizer().insert(ns, "sql-statement") == NS_table::LN_sql_statement;
+ flag&=QName::tokenizer().insert(ns, "parse-sql-statement") == NS_table::LN_parse_sql_statement;
+ flag&=QName::tokenizer().insert(ns, "database-source-table") == NS_table::LN_database_source_table;
+ flag&=QName::tokenizer().insert(ns, "database-table-name") == NS_table::LN_database_table_name;
+ flag&=QName::tokenizer().insert(ns, "database-source-query") == NS_table::LN_database_source_query;
+ flag&=QName::tokenizer().insert(ns, "query-name") == NS_table::LN_query_name;
+ flag&=QName::tokenizer().insert(ns, "sort") == NS_table::LN_sort;
+ flag&=QName::tokenizer().insert(ns, "bind-styles-to-content") == NS_table::LN_bind_styles_to_content;
+ flag&=QName::tokenizer().insert(ns, "language") == NS_table::LN_language;
+ flag&=QName::tokenizer().insert(ns, "country") == NS_table::LN_country;
+ flag&=QName::tokenizer().insert(ns, "algorithm") == NS_table::LN_algorithm;
+ flag&=QName::tokenizer().insert(ns, "sort-by") == NS_table::LN_sort_by;
+ flag&=QName::tokenizer().insert(ns, "field-number") == NS_table::LN_field_number;
+ flag&=QName::tokenizer().insert(ns, "data-type") == NS_table::LN_data_type;
+ flag&=QName::tokenizer().insert(ns, "order") == NS_table::LN_order;
+ flag&=QName::tokenizer().insert(ns, "subtotal-rules") == NS_table::LN_subtotal_rules;
+ flag&=QName::tokenizer().insert(ns, "page-breaks-on-group-change") == NS_table::LN_page_breaks_on_group_change;
+ flag&=QName::tokenizer().insert(ns, "sort-groups") == NS_table::LN_sort_groups;
+ flag&=QName::tokenizer().insert(ns, "subtotal-rule") == NS_table::LN_subtotal_rule;
+ flag&=QName::tokenizer().insert(ns, "group-by-field-number") == NS_table::LN_group_by_field_number;
+ flag&=QName::tokenizer().insert(ns, "subtotal-field") == NS_table::LN_subtotal_field;
+ flag&=QName::tokenizer().insert(ns, "function") == NS_table::LN_function;
+ flag&=QName::tokenizer().insert(ns, "filter") == NS_table::LN_filter;
+ flag&=QName::tokenizer().insert(ns, "condition-source") == NS_table::LN_condition_source;
+ flag&=QName::tokenizer().insert(ns, "condition-source-range-address") == NS_table::LN_condition_source_range_address;
+ flag&=QName::tokenizer().insert(ns, "display-duplicates") == NS_table::LN_display_duplicates;
+ flag&=QName::tokenizer().insert(ns, "filter-and") == NS_table::LN_filter_and;
+ flag&=QName::tokenizer().insert(ns, "filter-or") == NS_table::LN_filter_or;
+ flag&=QName::tokenizer().insert(ns, "filter-condition") == NS_table::LN_filter_condition;
+ flag&=QName::tokenizer().insert(ns, "value") == NS_table::LN_value;
+ flag&=QName::tokenizer().insert(ns, "operator") == NS_table::LN_operator;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-tables") == NS_table::LN_data_pilot_tables;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-table") == NS_table::LN_data_pilot_table;
+ flag&=QName::tokenizer().insert(ns, "application-data") == NS_table::LN_application_data;
+ flag&=QName::tokenizer().insert(ns, "grand-total") == NS_table::LN_grand_total;
+ flag&=QName::tokenizer().insert(ns, "ignore-empty-rows") == NS_table::LN_ignore_empty_rows;
+ flag&=QName::tokenizer().insert(ns, "identify-categories") == NS_table::LN_identify_categories;
+ flag&=QName::tokenizer().insert(ns, "buttons") == NS_table::LN_buttons;
+ flag&=QName::tokenizer().insert(ns, "show-filter-button") == NS_table::LN_show_filter_button;
+ flag&=QName::tokenizer().insert(ns, "drill-down-on-double-click") == NS_table::LN_drill_down_on_double_click;
+ flag&=QName::tokenizer().insert(ns, "source-cell-range") == NS_table::LN_source_cell_range;
+ flag&=QName::tokenizer().insert(ns, "source-service") == NS_table::LN_source_service;
+ flag&=QName::tokenizer().insert(ns, "source-name") == NS_table::LN_source_name;
+ flag&=QName::tokenizer().insert(ns, "object-name") == NS_table::LN_object_name;
+ flag&=QName::tokenizer().insert(ns, "user-name") == NS_table::LN_user_name;
+ flag&=QName::tokenizer().insert(ns, "password") == NS_table::LN_password;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-field") == NS_table::LN_data_pilot_field;
+ flag&=QName::tokenizer().insert(ns, "source-field-name") == NS_table::LN_source_field_name;
+ flag&=QName::tokenizer().insert(ns, "selected-page") == NS_table::LN_selected_page;
+ flag&=QName::tokenizer().insert(ns, "is-data-layout-field") == NS_table::LN_is_data_layout_field;
+ flag&=QName::tokenizer().insert(ns, "used-hierarchy") == NS_table::LN_used_hierarchy;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-level") == NS_table::LN_data_pilot_level;
+ flag&=QName::tokenizer().insert(ns, "show-empty") == NS_table::LN_show_empty;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-subtotals") == NS_table::LN_data_pilot_subtotals;
+ flag&=QName::tokenizer().insert(ns, "align") == NS_table::LN_align;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-subtotal") == NS_table::LN_data_pilot_subtotal;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-members") == NS_table::LN_data_pilot_members;
+ flag&=QName::tokenizer().insert(ns, "border-model") == NS_table::LN_border_model;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-member") == NS_table::LN_data_pilot_member;
+ flag&=QName::tokenizer().insert(ns, "show-details") == NS_table::LN_show_details;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-display-info") == NS_table::LN_data_pilot_display_info;
+ flag&=QName::tokenizer().insert(ns, "enabled") == NS_table::LN_enabled;
+ flag&=QName::tokenizer().insert(ns, "data-field") == NS_table::LN_data_field;
+ flag&=QName::tokenizer().insert(ns, "member-count") == NS_table::LN_member_count;
+ flag&=QName::tokenizer().insert(ns, "display-member-mode") == NS_table::LN_display_member_mode;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-sort-info") == NS_table::LN_data_pilot_sort_info;
+ flag&=QName::tokenizer().insert(ns, "sort-mode") == NS_table::LN_sort_mode;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-layout-info") == NS_table::LN_data_pilot_layout_info;
+ flag&=QName::tokenizer().insert(ns, "layout-mode") == NS_table::LN_layout_mode;
+ flag&=QName::tokenizer().insert(ns, "add-empty-lines") == NS_table::LN_add_empty_lines;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-field-reference") == NS_table::LN_data_pilot_field_reference;
+ flag&=QName::tokenizer().insert(ns, "field-name") == NS_table::LN_field_name;
+ flag&=QName::tokenizer().insert(ns, "member-type") == NS_table::LN_member_type;
+ flag&=QName::tokenizer().insert(ns, "member-name") == NS_table::LN_member_name;
+ flag&=QName::tokenizer().insert(ns, "type") == NS_table::LN_type;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-groups") == NS_table::LN_data_pilot_groups;
+ flag&=QName::tokenizer().insert(ns, "date-start") == NS_table::LN_date_start;
+ flag&=QName::tokenizer().insert(ns, "start") == NS_table::LN_start;
+ flag&=QName::tokenizer().insert(ns, "date-end") == NS_table::LN_date_end;
+ flag&=QName::tokenizer().insert(ns, "end") == NS_table::LN_end;
+ flag&=QName::tokenizer().insert(ns, "step") == NS_table::LN_step;
+ flag&=QName::tokenizer().insert(ns, "grouped-by") == NS_table::LN_grouped_by;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-group") == NS_table::LN_data_pilot_group;
+ flag&=QName::tokenizer().insert(ns, "data-pilot-group-member") == NS_table::LN_data_pilot_group_member;
+ flag&=QName::tokenizer().insert(ns, "consolidation") == NS_table::LN_consolidation;
+ flag&=QName::tokenizer().insert(ns, "source-cell-range-addresses") == NS_table::LN_source_cell_range_addresses;
+ flag&=QName::tokenizer().insert(ns, "target-cell-address") == NS_table::LN_target_cell_address;
+ flag&=QName::tokenizer().insert(ns, "use-labels") == NS_table::LN_use_labels;
+ flag&=QName::tokenizer().insert(ns, "link-to-source-data") == NS_table::LN_link_to_source_data;
+ flag&=QName::tokenizer().insert(ns, "dde-links") == NS_table::LN_dde_links;
+ flag&=QName::tokenizer().insert(ns, "tracked-changes") == NS_table::LN_tracked_changes;
+ flag&=QName::tokenizer().insert(ns, "track-changes") == NS_table::LN_track_changes;
+ flag&=QName::tokenizer().insert(ns, "insertion") == NS_table::LN_insertion;
+ flag&=QName::tokenizer().insert(ns, "position") == NS_table::LN_position;
+ flag&=QName::tokenizer().insert(ns, "count") == NS_table::LN_count;
+ flag&=QName::tokenizer().insert(ns, "dependencies") == NS_table::LN_dependencies;
+ flag&=QName::tokenizer().insert(ns, "dependency") == NS_table::LN_dependency;
+ flag&=QName::tokenizer().insert(ns, "id") == NS_table::LN_id;
+ flag&=QName::tokenizer().insert(ns, "deletions") == NS_table::LN_deletions;
+ flag&=QName::tokenizer().insert(ns, "cell-content-deletion") == NS_table::LN_cell_content_deletion;
+ flag&=QName::tokenizer().insert(ns, "change-deletion") == NS_table::LN_change_deletion;
+ flag&=QName::tokenizer().insert(ns, "deletion") == NS_table::LN_deletion;
+ flag&=QName::tokenizer().insert(ns, "multi-deletion-spanned") == NS_table::LN_multi_deletion_spanned;
+ flag&=QName::tokenizer().insert(ns, "cut-offs") == NS_table::LN_cut_offs;
+ flag&=QName::tokenizer().insert(ns, "insertion-cut-off") == NS_table::LN_insertion_cut_off;
+ flag&=QName::tokenizer().insert(ns, "movement-cut-off") == NS_table::LN_movement_cut_off;
+ flag&=QName::tokenizer().insert(ns, "start-position") == NS_table::LN_start_position;
+ flag&=QName::tokenizer().insert(ns, "end-position") == NS_table::LN_end_position;
+ flag&=QName::tokenizer().insert(ns, "movement") == NS_table::LN_movement;
+ flag&=QName::tokenizer().insert(ns, "source-range-address") == NS_table::LN_source_range_address;
+ flag&=QName::tokenizer().insert(ns, "column") == NS_table::LN_column;
+ flag&=QName::tokenizer().insert(ns, "row") == NS_table::LN_row;
+ flag&=QName::tokenizer().insert(ns, "start-column") == NS_table::LN_start_column;
+ flag&=QName::tokenizer().insert(ns, "start-row") == NS_table::LN_start_row;
+ flag&=QName::tokenizer().insert(ns, "start-table") == NS_table::LN_start_table;
+ flag&=QName::tokenizer().insert(ns, "end-column") == NS_table::LN_end_column;
+ flag&=QName::tokenizer().insert(ns, "end-row") == NS_table::LN_end_row;
+ flag&=QName::tokenizer().insert(ns, "end-table") == NS_table::LN_end_table;
+ flag&=QName::tokenizer().insert(ns, "change-track-table-cell") == NS_table::LN_change_track_table_cell;
+ flag&=QName::tokenizer().insert(ns, "cell-address") == NS_table::LN_cell_address;
+ flag&=QName::tokenizer().insert(ns, "matrix-covered") == NS_table::LN_matrix_covered;
+ flag&=QName::tokenizer().insert(ns, "cell-content-change") == NS_table::LN_cell_content_change;
+ flag&=QName::tokenizer().insert(ns, "previous") == NS_table::LN_previous;
+ flag&=QName::tokenizer().insert(ns, "acceptance-state") == NS_table::LN_acceptance_state;
+ flag&=QName::tokenizer().insert(ns, "rejecting-change-id") == NS_table::LN_rejecting_change_id;
+ flag&=QName::tokenizer().insert(ns, "end-cell-address") == NS_table::LN_end_cell_address;
+ flag&=QName::tokenizer().insert(ns, "cell-range") == NS_table::LN_cell_range;
+ flag&=QName::tokenizer().insert(ns, "end-x") == NS_table::LN_end_x;
+ flag&=QName::tokenizer().insert(ns, "end-y") == NS_table::LN_end_y;
+ flag&=QName::tokenizer().insert(ns, "table-background") == NS_table::LN_table_background;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace table failed", flag);}
+ void test_rs11(){
+ bool flag=true;
+ static const char ns[] = "urn:schemas-microsoft-com:rowset";
+ flag&=QName::tokenizer().insert(ns, "data") == NS_rs11::LN_data;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace rs11 failed", flag);}
+ void test_sxr12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/sxref";
+ flag&=QName::tokenizer().insert(ns, "pivotRefs") == NS_sxr12::LN_pivotRefs;
+ flag&=QName::tokenizer().insert(ns, "pivotRef") == NS_sxr12::LN_pivotRef;
+ flag&=QName::tokenizer().insert(ns, "rule") == NS_sxr12::LN_rule;
+ flag&=QName::tokenizer().insert(ns, "pivotRefInternal") == NS_sxr12::LN_pivotRefInternal;
+ flag&=QName::tokenizer().insert(ns, "flags") == NS_sxr12::LN_flags;
+ flag&=QName::tokenizer().insert(ns, "slicers") == NS_sxr12::LN_slicers;
+ flag&=QName::tokenizer().insert(ns, "slicer") == NS_sxr12::LN_slicer;
+ flag&=QName::tokenizer().insert(ns, "elements") == NS_sxr12::LN_elements;
+ flag&=QName::tokenizer().insert(ns, "element") == NS_sxr12::LN_element;
+ flag&=QName::tokenizer().insert(ns, "n") == NS_sxr12::LN_n;
+ flag&=QName::tokenizer().insert(ns, "d") == NS_sxr12::LN_d;
+ flag&=QName::tokenizer().insert(ns, "x") == NS_sxr12::LN_x;
+ flag&=QName::tokenizer().insert(ns, "s") == NS_sxr12::LN_s;
+ flag&=QName::tokenizer().insert(ns, "b") == NS_sxr12::LN_b;
+ flag&=QName::tokenizer().insert(ns, "e") == NS_sxr12::LN_e;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace sxr12 failed", flag);}
+ void test_xldr12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/officeart/2005/8/xldr";
+ flag&=QName::tokenizer().insert(ns, "cdrElemPr") == NS_xldr12::LN_cdrElemPr;
+ flag&=QName::tokenizer().insert(ns, "spPr") == NS_xldr12::LN_spPr;
+ flag&=QName::tokenizer().insert(ns, "style") == NS_xldr12::LN_style;
+ flag&=QName::tokenizer().insert(ns, "txBody") == NS_xldr12::LN_txBody;
+ flag&=QName::tokenizer().insert(ns, "xfrm") == NS_xldr12::LN_xfrm;
+ flag&=QName::tokenizer().insert(ns, "stCxn") == NS_xldr12::LN_stCxn;
+ flag&=QName::tokenizer().insert(ns, "endCxn") == NS_xldr12::LN_endCxn;
+ flag&=QName::tokenizer().insert(ns, "graphic") == NS_xldr12::LN_graphic;
+ flag&=QName::tokenizer().insert(ns, "gspPr") == NS_xldr12::LN_gspPr;
+ flag&=QName::tokenizer().insert(ns, "sp") == NS_xldr12::LN_sp;
+ flag&=QName::tokenizer().insert(ns, "gsp") == NS_xldr12::LN_gsp;
+ flag&=QName::tokenizer().insert(ns, "graphicFrame") == NS_xldr12::LN_graphicFrame;
+ flag&=QName::tokenizer().insert(ns, "cxnsp") == NS_xldr12::LN_cxnsp;
+ flag&=QName::tokenizer().insert(ns, "col") == NS_xldr12::LN_col;
+ flag&=QName::tokenizer().insert(ns, "colOff") == NS_xldr12::LN_colOff;
+ flag&=QName::tokenizer().insert(ns, "row") == NS_xldr12::LN_row;
+ flag&=QName::tokenizer().insert(ns, "rowOff") == NS_xldr12::LN_rowOff;
+ flag&=QName::tokenizer().insert(ns, "from") == NS_xldr12::LN_from;
+ flag&=QName::tokenizer().insert(ns, "to") == NS_xldr12::LN_to;
+ flag&=QName::tokenizer().insert(ns, "clientData") == NS_xldr12::LN_clientData;
+ flag&=QName::tokenizer().insert(ns, "extents") == NS_xldr12::LN_extents;
+ flag&=QName::tokenizer().insert(ns, "pos") == NS_xldr12::LN_pos;
+ flag&=QName::tokenizer().insert(ns, "twoCellAnchor") == NS_xldr12::LN_twoCellAnchor;
+ flag&=QName::tokenizer().insert(ns, "oneCellAnchor") == NS_xldr12::LN_oneCellAnchor;
+ flag&=QName::tokenizer().insert(ns, "absoluteAnchor") == NS_xldr12::LN_absoluteAnchor;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace xldr12 failed", flag);}
+ void test_m12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/omml/2004/12/core";
+ flag&=QName::tokenizer().insert(ns, "nor") == NS_m12::LN_nor;
+ flag&=QName::tokenizer().insert(ns, "lit") == NS_m12::LN_lit;
+ flag&=QName::tokenizer().insert(ns, "scr") == NS_m12::LN_scr;
+ flag&=QName::tokenizer().insert(ns, "sty") == NS_m12::LN_sty;
+ flag&=QName::tokenizer().insert(ns, "brk") == NS_m12::LN_brk;
+ flag&=QName::tokenizer().insert(ns, "aln") == NS_m12::LN_aln;
+ flag&=QName::tokenizer().insert(ns, "rPr") == NS_m12::LN_rPr;
+ flag&=QName::tokenizer().insert(ns, "t") == NS_m12::LN_t;
+ flag&=QName::tokenizer().insert(ns, "chr") == NS_m12::LN_chr;
+ flag&=QName::tokenizer().insert(ns, "accPr") == NS_m12::LN_accPr;
+ flag&=QName::tokenizer().insert(ns, "e") == NS_m12::LN_e;
+ flag&=QName::tokenizer().insert(ns, "pos") == NS_m12::LN_pos;
+ flag&=QName::tokenizer().insert(ns, "barPr") == NS_m12::LN_barPr;
+ flag&=QName::tokenizer().insert(ns, "opEmu") == NS_m12::LN_opEmu;
+ flag&=QName::tokenizer().insert(ns, "noBreak") == NS_m12::LN_noBreak;
+ flag&=QName::tokenizer().insert(ns, "boxPr") == NS_m12::LN_boxPr;
+ flag&=QName::tokenizer().insert(ns, "hideTop") == NS_m12::LN_hideTop;
+ flag&=QName::tokenizer().insert(ns, "hideBot") == NS_m12::LN_hideBot;
+ flag&=QName::tokenizer().insert(ns, "hideLeft") == NS_m12::LN_hideLeft;
+ flag&=QName::tokenizer().insert(ns, "hideRight") == NS_m12::LN_hideRight;
+ flag&=QName::tokenizer().insert(ns, "strikeH") == NS_m12::LN_strikeH;
+ flag&=QName::tokenizer().insert(ns, "strikeV") == NS_m12::LN_strikeV;
+ flag&=QName::tokenizer().insert(ns, "strikeBLTR") == NS_m12::LN_strikeBLTR;
+ flag&=QName::tokenizer().insert(ns, "strikeTLBR") == NS_m12::LN_strikeTLBR;
+ flag&=QName::tokenizer().insert(ns, "boxFormPr") == NS_m12::LN_boxFormPr;
+ flag&=QName::tokenizer().insert(ns, "begChr") == NS_m12::LN_begChr;
+ flag&=QName::tokenizer().insert(ns, "sepChr") == NS_m12::LN_sepChr;
+ flag&=QName::tokenizer().insert(ns, "endChr") == NS_m12::LN_endChr;
+ flag&=QName::tokenizer().insert(ns, "grow") == NS_m12::LN_grow;
+ flag&=QName::tokenizer().insert(ns, "shp") == NS_m12::LN_shp;
+ flag&=QName::tokenizer().insert(ns, "dPr") == NS_m12::LN_dPr;
+ flag&=QName::tokenizer().insert(ns, "baseJc") == NS_m12::LN_baseJc;
+ flag&=QName::tokenizer().insert(ns, "maxDist") == NS_m12::LN_maxDist;
+ flag&=QName::tokenizer().insert(ns, "objDist") == NS_m12::LN_objDist;
+ flag&=QName::tokenizer().insert(ns, "rSpRule") == NS_m12::LN_rSpRule;
+ flag&=QName::tokenizer().insert(ns, "rSp") == NS_m12::LN_rSp;
+ flag&=QName::tokenizer().insert(ns, "eqArrPr") == NS_m12::LN_eqArrPr;
+ flag&=QName::tokenizer().insert(ns, "type") == NS_m12::LN_type;
+ flag&=QName::tokenizer().insert(ns, "numJc") == NS_m12::LN_numJc;
+ flag&=QName::tokenizer().insert(ns, "denJc") == NS_m12::LN_denJc;
+ flag&=QName::tokenizer().insert(ns, "fPr") == NS_m12::LN_fPr;
+ flag&=QName::tokenizer().insert(ns, "num") == NS_m12::LN_num;
+ flag&=QName::tokenizer().insert(ns, "den") == NS_m12::LN_den;
+ flag&=QName::tokenizer().insert(ns, "fName") == NS_m12::LN_fName;
+ flag&=QName::tokenizer().insert(ns, "groupChrPr") == NS_m12::LN_groupChrPr;
+ flag&=QName::tokenizer().insert(ns, "lim") == NS_m12::LN_lim;
+ flag&=QName::tokenizer().insert(ns, "count") == NS_m12::LN_count;
+ flag&=QName::tokenizer().insert(ns, "mcJc") == NS_m12::LN_mcJc;
+ flag&=QName::tokenizer().insert(ns, "mcPr") == NS_m12::LN_mcPr;
+ flag&=QName::tokenizer().insert(ns, "mc") == NS_m12::LN_mc;
+ flag&=QName::tokenizer().insert(ns, "plcHide") == NS_m12::LN_plcHide;
+ flag&=QName::tokenizer().insert(ns, "cGpRule") == NS_m12::LN_cGpRule;
+ flag&=QName::tokenizer().insert(ns, "cSp") == NS_m12::LN_cSp;
+ flag&=QName::tokenizer().insert(ns, "cGp") == NS_m12::LN_cGp;
+ flag&=QName::tokenizer().insert(ns, "mcs") == NS_m12::LN_mcs;
+ flag&=QName::tokenizer().insert(ns, "mPr") == NS_m12::LN_mPr;
+ flag&=QName::tokenizer().insert(ns, "mr") == NS_m12::LN_mr;
+ flag&=QName::tokenizer().insert(ns, "limLoc") == NS_m12::LN_limLoc;
+ flag&=QName::tokenizer().insert(ns, "subHide") == NS_m12::LN_subHide;
+ flag&=QName::tokenizer().insert(ns, "supHide") == NS_m12::LN_supHide;
+ flag&=QName::tokenizer().insert(ns, "naryPr") == NS_m12::LN_naryPr;
+ flag&=QName::tokenizer().insert(ns, "sub") == NS_m12::LN_sub;
+ flag&=QName::tokenizer().insert(ns, "sup") == NS_m12::LN_sup;
+ flag&=QName::tokenizer().insert(ns, "show") == NS_m12::LN_show;
+ flag&=QName::tokenizer().insert(ns, "zeroWid") == NS_m12::LN_zeroWid;
+ flag&=QName::tokenizer().insert(ns, "zeroAsc") == NS_m12::LN_zeroAsc;
+ flag&=QName::tokenizer().insert(ns, "zeroDesc") == NS_m12::LN_zeroDesc;
+ flag&=QName::tokenizer().insert(ns, "transp") == NS_m12::LN_transp;
+ flag&=QName::tokenizer().insert(ns, "phantPr") == NS_m12::LN_phantPr;
+ flag&=QName::tokenizer().insert(ns, "degHide") == NS_m12::LN_degHide;
+ flag&=QName::tokenizer().insert(ns, "radPr") == NS_m12::LN_radPr;
+ flag&=QName::tokenizer().insert(ns, "deg") == NS_m12::LN_deg;
+ flag&=QName::tokenizer().insert(ns, "acc") == NS_m12::LN_acc;
+ flag&=QName::tokenizer().insert(ns, "bar") == NS_m12::LN_bar;
+ flag&=QName::tokenizer().insert(ns, "box") == NS_m12::LN_box;
+ flag&=QName::tokenizer().insert(ns, "boxForm") == NS_m12::LN_boxForm;
+ flag&=QName::tokenizer().insert(ns, "d") == NS_m12::LN_d;
+ flag&=QName::tokenizer().insert(ns, "eqArr") == NS_m12::LN_eqArr;
+ flag&=QName::tokenizer().insert(ns, "f") == NS_m12::LN_f;
+ flag&=QName::tokenizer().insert(ns, "func") == NS_m12::LN_func;
+ flag&=QName::tokenizer().insert(ns, "groupChr") == NS_m12::LN_groupChr;
+ flag&=QName::tokenizer().insert(ns, "limLow") == NS_m12::LN_limLow;
+ flag&=QName::tokenizer().insert(ns, "limUpp") == NS_m12::LN_limUpp;
+ flag&=QName::tokenizer().insert(ns, "m") == NS_m12::LN_m;
+ flag&=QName::tokenizer().insert(ns, "nary") == NS_m12::LN_nary;
+ flag&=QName::tokenizer().insert(ns, "phant") == NS_m12::LN_phant;
+ flag&=QName::tokenizer().insert(ns, "rad") == NS_m12::LN_rad;
+ flag&=QName::tokenizer().insert(ns, "sPre") == NS_m12::LN_sPre;
+ flag&=QName::tokenizer().insert(ns, "sSub") == NS_m12::LN_sSub;
+ flag&=QName::tokenizer().insert(ns, "sSubSup") == NS_m12::LN_sSubSup;
+ flag&=QName::tokenizer().insert(ns, "sSup") == NS_m12::LN_sSup;
+ flag&=QName::tokenizer().insert(ns, "r") == NS_m12::LN_r;
+ flag&=QName::tokenizer().insert(ns, "argSz") == NS_m12::LN_argSz;
+ flag&=QName::tokenizer().insert(ns, "argPr") == NS_m12::LN_argPr;
+ flag&=QName::tokenizer().insert(ns, "jc") == NS_m12::LN_jc;
+ flag&=QName::tokenizer().insert(ns, "mathFont") == NS_m12::LN_mathFont;
+ flag&=QName::tokenizer().insert(ns, "defSz") == NS_m12::LN_defSz;
+ flag&=QName::tokenizer().insert(ns, "brkBin") == NS_m12::LN_brkBin;
+ flag&=QName::tokenizer().insert(ns, "brkBinSub") == NS_m12::LN_brkBinSub;
+ flag&=QName::tokenizer().insert(ns, "smallFrac") == NS_m12::LN_smallFrac;
+ flag&=QName::tokenizer().insert(ns, "dispDef") == NS_m12::LN_dispDef;
+ flag&=QName::tokenizer().insert(ns, "lMargin") == NS_m12::LN_lMargin;
+ flag&=QName::tokenizer().insert(ns, "rMargin") == NS_m12::LN_rMargin;
+ flag&=QName::tokenizer().insert(ns, "defJc") == NS_m12::LN_defJc;
+ flag&=QName::tokenizer().insert(ns, "preSp") == NS_m12::LN_preSp;
+ flag&=QName::tokenizer().insert(ns, "postSp") == NS_m12::LN_postSp;
+ flag&=QName::tokenizer().insert(ns, "intraSp") == NS_m12::LN_intraSp;
+ flag&=QName::tokenizer().insert(ns, "interSp") == NS_m12::LN_interSp;
+ flag&=QName::tokenizer().insert(ns, "wrapRight") == NS_m12::LN_wrapRight;
+ flag&=QName::tokenizer().insert(ns, "wrapIndent") == NS_m12::LN_wrapIndent;
+ flag&=QName::tokenizer().insert(ns, "naryGrow") == NS_m12::LN_naryGrow;
+ flag&=QName::tokenizer().insert(ns, "intLim") == NS_m12::LN_intLim;
+ flag&=QName::tokenizer().insert(ns, "naryLim") == NS_m12::LN_naryLim;
+ flag&=QName::tokenizer().insert(ns, "mathPr") == NS_m12::LN_mathPr;
+ flag&=QName::tokenizer().insert(ns, "oMathParaPr") == NS_m12::LN_oMathParaPr;
+ flag&=QName::tokenizer().insert(ns, "oMath") == NS_m12::LN_oMath;
+ flag&=QName::tokenizer().insert(ns, "oMathPara") == NS_m12::LN_oMathPara;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace m12 failed", flag);}
+ void test_number(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0";
+ flag&=QName::tokenizer().insert(ns, "number-style") == NS_number::LN_number_style;
+ flag&=QName::tokenizer().insert(ns, "number") == NS_number::LN_number;
+ flag&=QName::tokenizer().insert(ns, "decimal-replacement") == NS_number::LN_decimal_replacement;
+ flag&=QName::tokenizer().insert(ns, "display-factor") == NS_number::LN_display_factor;
+ flag&=QName::tokenizer().insert(ns, "embedded-text") == NS_number::LN_embedded_text;
+ flag&=QName::tokenizer().insert(ns, "position") == NS_number::LN_position;
+ flag&=QName::tokenizer().insert(ns, "scientific-number") == NS_number::LN_scientific_number;
+ flag&=QName::tokenizer().insert(ns, "min-exponent-digits") == NS_number::LN_min_exponent_digits;
+ flag&=QName::tokenizer().insert(ns, "fraction") == NS_number::LN_fraction;
+ flag&=QName::tokenizer().insert(ns, "min-numerator-digits") == NS_number::LN_min_numerator_digits;
+ flag&=QName::tokenizer().insert(ns, "min-denominator-digits") == NS_number::LN_min_denominator_digits;
+ flag&=QName::tokenizer().insert(ns, "denominator-value") == NS_number::LN_denominator_value;
+ flag&=QName::tokenizer().insert(ns, "currency-style") == NS_number::LN_currency_style;
+ flag&=QName::tokenizer().insert(ns, "currency-symbol") == NS_number::LN_currency_symbol;
+ flag&=QName::tokenizer().insert(ns, "language") == NS_number::LN_language;
+ flag&=QName::tokenizer().insert(ns, "country") == NS_number::LN_country;
+ flag&=QName::tokenizer().insert(ns, "percentage-style") == NS_number::LN_percentage_style;
+ flag&=QName::tokenizer().insert(ns, "date-style") == NS_number::LN_date_style;
+ flag&=QName::tokenizer().insert(ns, "day") == NS_number::LN_day;
+ flag&=QName::tokenizer().insert(ns, "style") == NS_number::LN_style;
+ flag&=QName::tokenizer().insert(ns, "month") == NS_number::LN_month;
+ flag&=QName::tokenizer().insert(ns, "textual") == NS_number::LN_textual;
+ flag&=QName::tokenizer().insert(ns, "possessive-form") == NS_number::LN_possessive_form;
+ flag&=QName::tokenizer().insert(ns, "year") == NS_number::LN_year;
+ flag&=QName::tokenizer().insert(ns, "era") == NS_number::LN_era;
+ flag&=QName::tokenizer().insert(ns, "day-of-week") == NS_number::LN_day_of_week;
+ flag&=QName::tokenizer().insert(ns, "week-of-year") == NS_number::LN_week_of_year;
+ flag&=QName::tokenizer().insert(ns, "quarter") == NS_number::LN_quarter;
+ flag&=QName::tokenizer().insert(ns, "time-style") == NS_number::LN_time_style;
+ flag&=QName::tokenizer().insert(ns, "truncate-on-overflow") == NS_number::LN_truncate_on_overflow;
+ flag&=QName::tokenizer().insert(ns, "hours") == NS_number::LN_hours;
+ flag&=QName::tokenizer().insert(ns, "minutes") == NS_number::LN_minutes;
+ flag&=QName::tokenizer().insert(ns, "seconds") == NS_number::LN_seconds;
+ flag&=QName::tokenizer().insert(ns, "decimal-places") == NS_number::LN_decimal_places;
+ flag&=QName::tokenizer().insert(ns, "am-pm") == NS_number::LN_am_pm;
+ flag&=QName::tokenizer().insert(ns, "boolean-style") == NS_number::LN_boolean_style;
+ flag&=QName::tokenizer().insert(ns, "boolean") == NS_number::LN_boolean;
+ flag&=QName::tokenizer().insert(ns, "text-style") == NS_number::LN_text_style;
+ flag&=QName::tokenizer().insert(ns, "text") == NS_number::LN_text;
+ flag&=QName::tokenizer().insert(ns, "text-content") == NS_number::LN_text_content;
+ flag&=QName::tokenizer().insert(ns, "title") == NS_number::LN_title;
+ flag&=QName::tokenizer().insert(ns, "automatic-order") == NS_number::LN_automatic_order;
+ flag&=QName::tokenizer().insert(ns, "format-source") == NS_number::LN_format_source;
+ flag&=QName::tokenizer().insert(ns, "transliteration-format") == NS_number::LN_transliteration_format;
+ flag&=QName::tokenizer().insert(ns, "transliteration-language") == NS_number::LN_transliteration_language;
+ flag&=QName::tokenizer().insert(ns, "transliteration-country") == NS_number::LN_transliteration_country;
+ flag&=QName::tokenizer().insert(ns, "transliteration-style") == NS_number::LN_transliteration_style;
+ flag&=QName::tokenizer().insert(ns, "min-integer-digits") == NS_number::LN_min_integer_digits;
+ flag&=QName::tokenizer().insert(ns, "grouping") == NS_number::LN_grouping;
+ flag&=QName::tokenizer().insert(ns, "calendar") == NS_number::LN_calendar;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace number failed", flag);}
+ void test_p12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/package/2005/06/content-types";
+ flag&=QName::tokenizer().insert(ns, "Types") == NS_p12::LN_Types;
+ flag&=QName::tokenizer().insert(ns, "Default") == NS_p12::LN_Default;
+ flag&=QName::tokenizer().insert(ns, "Override") == NS_p12::LN_Override;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace p12 failed", flag);}
+ void test_voldeps12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/voldeps";
+ flag&=QName::tokenizer().insert(ns, "volTypes") == NS_voldeps12::LN_volTypes;
+ flag&=QName::tokenizer().insert(ns, "volType") == NS_voldeps12::LN_volType;
+ flag&=QName::tokenizer().insert(ns, "main") == NS_voldeps12::LN_main;
+ flag&=QName::tokenizer().insert(ns, "topic") == NS_voldeps12::LN_topic;
+ flag&=QName::tokenizer().insert(ns, "value") == NS_voldeps12::LN_value;
+ flag&=QName::tokenizer().insert(ns, "subtopic") == NS_voldeps12::LN_subtopic;
+ flag&=QName::tokenizer().insert(ns, "ref") == NS_voldeps12::LN_ref;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace voldeps12 failed", flag);}
+ void test_pt12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/pivot";
+ flag&=QName::tokenizer().insert(ns, "pivotCacheDefinition") == NS_pt12::LN_pivotCacheDefinition;
+ flag&=QName::tokenizer().insert(ns, "pivotCacheRecords") == NS_pt12::LN_pivotCacheRecords;
+ flag&=QName::tokenizer().insert(ns, "pivotTableDefinition") == NS_pt12::LN_pivotTableDefinition;
+ flag&=QName::tokenizer().insert(ns, "cacheSource") == NS_pt12::LN_cacheSource;
+ flag&=QName::tokenizer().insert(ns, "fields") == NS_pt12::LN_fields;
+ flag&=QName::tokenizer().insert(ns, "hierarchies") == NS_pt12::LN_hierarchies;
+ flag&=QName::tokenizer().insert(ns, "kpis") == NS_pt12::LN_kpis;
+ flag&=QName::tokenizer().insert(ns, "sdTupleCache") == NS_pt12::LN_sdTupleCache;
+ flag&=QName::tokenizer().insert(ns, "ciFmlas") == NS_pt12::LN_ciFmlas;
+ flag&=QName::tokenizer().insert(ns, "calcMbrs") == NS_pt12::LN_calcMbrs;
+ flag&=QName::tokenizer().insert(ns, "fsb") == NS_pt12::LN_fsb;
+ flag&=QName::tokenizer().insert(ns, "field") == NS_pt12::LN_field;
+ flag&=QName::tokenizer().insert(ns, "shItems") == NS_pt12::LN_shItems;
+ flag&=QName::tokenizer().insert(ns, "group") == NS_pt12::LN_group;
+ flag&=QName::tokenizer().insert(ns, "wksht") == NS_pt12::LN_wksht;
+ flag&=QName::tokenizer().insert(ns, "consol") == NS_pt12::LN_consol;
+ flag&=QName::tokenizer().insert(ns, "pages") == NS_pt12::LN_pages;
+ flag&=QName::tokenizer().insert(ns, "rngSets") == NS_pt12::LN_rngSets;
+ flag&=QName::tokenizer().insert(ns, "page") == NS_pt12::LN_page;
+ flag&=QName::tokenizer().insert(ns, "item") == NS_pt12::LN_item;
+ flag&=QName::tokenizer().insert(ns, "rngSet") == NS_pt12::LN_rngSet;
+ flag&=QName::tokenizer().insert(ns, "m") == NS_pt12::LN_m;
+ flag&=QName::tokenizer().insert(ns, "n") == NS_pt12::LN_n;
+ flag&=QName::tokenizer().insert(ns, "b") == NS_pt12::LN_b;
+ flag&=QName::tokenizer().insert(ns, "e") == NS_pt12::LN_e;
+ flag&=QName::tokenizer().insert(ns, "s") == NS_pt12::LN_s;
+ flag&=QName::tokenizer().insert(ns, "d") == NS_pt12::LN_d;
+ flag&=QName::tokenizer().insert(ns, "mbrs") == NS_pt12::LN_mbrs;
+ flag&=QName::tokenizer().insert(ns, "mpm") == NS_pt12::LN_mpm;
+ flag&=QName::tokenizer().insert(ns, "mpn") == NS_pt12::LN_mpn;
+ flag&=QName::tokenizer().insert(ns, "mpb") == NS_pt12::LN_mpb;
+ flag&=QName::tokenizer().insert(ns, "mps") == NS_pt12::LN_mps;
+ flag&=QName::tokenizer().insert(ns, "mpd") == NS_pt12::LN_mpd;
+ flag&=QName::tokenizer().insert(ns, "rangeDesc") == NS_pt12::LN_rangeDesc;
+ flag&=QName::tokenizer().insert(ns, "discMapping") == NS_pt12::LN_discMapping;
+ flag&=QName::tokenizer().insert(ns, "grItems") == NS_pt12::LN_grItems;
+ flag&=QName::tokenizer().insert(ns, "x") == NS_pt12::LN_x;
+ flag&=QName::tokenizer().insert(ns, "r") == NS_pt12::LN_r;
+ flag&=QName::tokenizer().insert(ns, "kpi") == NS_pt12::LN_kpi;
+ flag&=QName::tokenizer().insert(ns, "hierarchy") == NS_pt12::LN_hierarchy;
+ flag&=QName::tokenizer().insert(ns, "flds") == NS_pt12::LN_flds;
+ flag&=QName::tokenizer().insert(ns, "grLvls") == NS_pt12::LN_grLvls;
+ flag&=QName::tokenizer().insert(ns, "fld") == NS_pt12::LN_fld;
+ flag&=QName::tokenizer().insert(ns, "grLvl") == NS_pt12::LN_grLvl;
+ flag&=QName::tokenizer().insert(ns, "grps") == NS_pt12::LN_grps;
+ flag&=QName::tokenizer().insert(ns, "grp") == NS_pt12::LN_grp;
+ flag&=QName::tokenizer().insert(ns, "grMbrs") == NS_pt12::LN_grMbrs;
+ flag&=QName::tokenizer().insert(ns, "grMbr") == NS_pt12::LN_grMbr;
+ flag&=QName::tokenizer().insert(ns, "entries") == NS_pt12::LN_entries;
+ flag&=QName::tokenizer().insert(ns, "sets") == NS_pt12::LN_sets;
+ flag&=QName::tokenizer().insert(ns, "qryCache") == NS_pt12::LN_qryCache;
+ flag&=QName::tokenizer().insert(ns, "mbr") == NS_pt12::LN_mbr;
+ flag&=QName::tokenizer().insert(ns, "set") == NS_pt12::LN_set;
+ flag&=QName::tokenizer().insert(ns, "tuples") == NS_pt12::LN_tuples;
+ flag&=QName::tokenizer().insert(ns, "sortByTuple") == NS_pt12::LN_sortByTuple;
+ flag&=QName::tokenizer().insert(ns, "qry") == NS_pt12::LN_qry;
+ flag&=QName::tokenizer().insert(ns, "ciFmla") == NS_pt12::LN_ciFmla;
+ flag&=QName::tokenizer().insert(ns, "rule") == NS_pt12::LN_rule;
+ flag&=QName::tokenizer().insert(ns, "calcMbr") == NS_pt12::LN_calcMbr;
+ flag&=QName::tokenizer().insert(ns, "filters") == NS_pt12::LN_filters;
+ flag&=QName::tokenizer().insert(ns, "filter") == NS_pt12::LN_filter;
+ flag&=QName::tokenizer().insert(ns, "location") == NS_pt12::LN_location;
+ flag&=QName::tokenizer().insert(ns, "rwFlds") == NS_pt12::LN_rwFlds;
+ flag&=QName::tokenizer().insert(ns, "rwItms") == NS_pt12::LN_rwItms;
+ flag&=QName::tokenizer().insert(ns, "rwDrills") == NS_pt12::LN_rwDrills;
+ flag&=QName::tokenizer().insert(ns, "colFlds") == NS_pt12::LN_colFlds;
+ flag&=QName::tokenizer().insert(ns, "colItms") == NS_pt12::LN_colItms;
+ flag&=QName::tokenizer().insert(ns, "colDrills") == NS_pt12::LN_colDrills;
+ flag&=QName::tokenizer().insert(ns, "pgFields") == NS_pt12::LN_pgFields;
+ flag&=QName::tokenizer().insert(ns, "datFields") == NS_pt12::LN_datFields;
+ flag&=QName::tokenizer().insert(ns, "fmts") == NS_pt12::LN_fmts;
+ flag&=QName::tokenizer().insert(ns, "condfmts") == NS_pt12::LN_condfmts;
+ flag&=QName::tokenizer().insert(ns, "crtfmts") == NS_pt12::LN_crtfmts;
+ flag&=QName::tokenizer().insert(ns, "drillSaved") == NS_pt12::LN_drillSaved;
+ flag&=QName::tokenizer().insert(ns, "strSelects") == NS_pt12::LN_strSelects;
+ flag&=QName::tokenizer().insert(ns, "dims") == NS_pt12::LN_dims;
+ flag&=QName::tokenizer().insert(ns, "mgs") == NS_pt12::LN_mgs;
+ flag&=QName::tokenizer().insert(ns, "tableStyle") == NS_pt12::LN_tableStyle;
+ flag&=QName::tokenizer().insert(ns, "sxfilters") == NS_pt12::LN_sxfilters;
+ flag&=QName::tokenizer().insert(ns, "items") == NS_pt12::LN_items;
+ flag&=QName::tokenizer().insert(ns, "cdls") == NS_pt12::LN_cdls;
+ flag&=QName::tokenizer().insert(ns, "autoSortScope") == NS_pt12::LN_autoSortScope;
+ flag&=QName::tokenizer().insert(ns, "cdl") == NS_pt12::LN_cdl;
+ flag&=QName::tokenizer().insert(ns, "pgField") == NS_pt12::LN_pgField;
+ flag&=QName::tokenizer().insert(ns, "datField") == NS_pt12::LN_datField;
+ flag&=QName::tokenizer().insert(ns, "i") == NS_pt12::LN_i;
+ flag&=QName::tokenizer().insert(ns, "fmt") == NS_pt12::LN_fmt;
+ flag&=QName::tokenizer().insert(ns, "cfmt") == NS_pt12::LN_cfmt;
+ flag&=QName::tokenizer().insert(ns, "crtfmt") == NS_pt12::LN_crtfmt;
+ flag&=QName::tokenizer().insert(ns, "drill") == NS_pt12::LN_drill;
+ flag&=QName::tokenizer().insert(ns, "strSelect") == NS_pt12::LN_strSelect;
+ flag&=QName::tokenizer().insert(ns, "mbrProps") == NS_pt12::LN_mbrProps;
+ flag&=QName::tokenizer().insert(ns, "itms") == NS_pt12::LN_itms;
+ flag&=QName::tokenizer().insert(ns, "selctPg") == NS_pt12::LN_selctPg;
+ flag&=QName::tokenizer().insert(ns, "mp") == NS_pt12::LN_mp;
+ flag&=QName::tokenizer().insert(ns, "dim") == NS_pt12::LN_dim;
+ flag&=QName::tokenizer().insert(ns, "mg") == NS_pt12::LN_mg;
+ flag&=QName::tokenizer().insert(ns, "map") == NS_pt12::LN_map;
+ flag&=QName::tokenizer().insert(ns, "sxfilter") == NS_pt12::LN_sxfilter;
+ flag&=QName::tokenizer().insert(ns, "autofilter") == NS_pt12::LN_autofilter;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace pt12 failed", flag);}
+ void test_xml(){
+ bool flag=true;
+ static const char ns[] = "http://www.w3.org/XML/1998/namespace";
+ flag&=QName::tokenizer().insert(ns, "lang") == NS_xml::LN_lang;
+ flag&=QName::tokenizer().insert(ns, "base") == NS_xml::LN_base;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace xml failed", flag);}
+ void test_w11(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/word/2003/wordml";
+ flag&=QName::tokenizer().insert(ns, "ilvl") == NS_w11::LN_ilvl;
+ flag&=QName::tokenizer().insert(ns, "ilfo") == NS_w11::LN_ilfo;
+ flag&=QName::tokenizer().insert(ns, "top") == NS_w11::LN_top;
+ flag&=QName::tokenizer().insert(ns, "left") == NS_w11::LN_left;
+ flag&=QName::tokenizer().insert(ns, "bottom") == NS_w11::LN_bottom;
+ flag&=QName::tokenizer().insert(ns, "right") == NS_w11::LN_right;
+ flag&=QName::tokenizer().insert(ns, "between") == NS_w11::LN_between;
+ flag&=QName::tokenizer().insert(ns, "bar") == NS_w11::LN_bar;
+ flag&=QName::tokenizer().insert(ns, "tab") == NS_w11::LN_tab;
+ flag&=QName::tokenizer().insert(ns, "pStyle") == NS_w11::LN_pStyle;
+ flag&=QName::tokenizer().insert(ns, "keepNext") == NS_w11::LN_keepNext;
+ flag&=QName::tokenizer().insert(ns, "keepLines") == NS_w11::LN_keepLines;
+ flag&=QName::tokenizer().insert(ns, "pageBreakBefore") == NS_w11::LN_pageBreakBefore;
+ flag&=QName::tokenizer().insert(ns, "framePr") == NS_w11::LN_framePr;
+ flag&=QName::tokenizer().insert(ns, "widowControl") == NS_w11::LN_widowControl;
+ flag&=QName::tokenizer().insert(ns, "listPr") == NS_w11::LN_listPr;
+ flag&=QName::tokenizer().insert(ns, "supressLineNumbers") == NS_w11::LN_supressLineNumbers;
+ flag&=QName::tokenizer().insert(ns, "pBdr") == NS_w11::LN_pBdr;
+ flag&=QName::tokenizer().insert(ns, "shd") == NS_w11::LN_shd;
+ flag&=QName::tokenizer().insert(ns, "tabs") == NS_w11::LN_tabs;
+ flag&=QName::tokenizer().insert(ns, "suppressAutoHyphens") == NS_w11::LN_suppressAutoHyphens;
+ flag&=QName::tokenizer().insert(ns, "kinsoku") == NS_w11::LN_kinsoku;
+ flag&=QName::tokenizer().insert(ns, "wordWrap") == NS_w11::LN_wordWrap;
+ flag&=QName::tokenizer().insert(ns, "overflowPunct") == NS_w11::LN_overflowPunct;
+ flag&=QName::tokenizer().insert(ns, "topLinePunct") == NS_w11::LN_topLinePunct;
+ flag&=QName::tokenizer().insert(ns, "autoSpaceDE") == NS_w11::LN_autoSpaceDE;
+ flag&=QName::tokenizer().insert(ns, "autoSpaceDN") == NS_w11::LN_autoSpaceDN;
+ flag&=QName::tokenizer().insert(ns, "bidi") == NS_w11::LN_bidi;
+ flag&=QName::tokenizer().insert(ns, "adjustRightInd") == NS_w11::LN_adjustRightInd;
+ flag&=QName::tokenizer().insert(ns, "snapToGrid") == NS_w11::LN_snapToGrid;
+ flag&=QName::tokenizer().insert(ns, "spacing") == NS_w11::LN_spacing;
+ flag&=QName::tokenizer().insert(ns, "ind") == NS_w11::LN_ind;
+ flag&=QName::tokenizer().insert(ns, "contextualSpacing") == NS_w11::LN_contextualSpacing;
+ flag&=QName::tokenizer().insert(ns, "suppressOverlap") == NS_w11::LN_suppressOverlap;
+ flag&=QName::tokenizer().insert(ns, "jc") == NS_w11::LN_jc;
+ flag&=QName::tokenizer().insert(ns, "textDirection") == NS_w11::LN_textDirection;
+ flag&=QName::tokenizer().insert(ns, "textAlignment") == NS_w11::LN_textAlignment;
+ flag&=QName::tokenizer().insert(ns, "outlineLvl") == NS_w11::LN_outlineLvl;
+ flag&=QName::tokenizer().insert(ns, "divId") == NS_w11::LN_divId;
+ flag&=QName::tokenizer().insert(ns, "cnfStyle") == NS_w11::LN_cnfStyle;
+ flag&=QName::tokenizer().insert(ns, "rPr") == NS_w11::LN_rPr;
+ flag&=QName::tokenizer().insert(ns, "sectPr") == NS_w11::LN_sectPr;
+ flag&=QName::tokenizer().insert(ns, "binData") == NS_w11::LN_binData;
+ flag&=QName::tokenizer().insert(ns, "movie") == NS_w11::LN_movie;
+ flag&=QName::tokenizer().insert(ns, "background") == NS_w11::LN_background;
+ flag&=QName::tokenizer().insert(ns, "applet") == NS_w11::LN_applet;
+ flag&=QName::tokenizer().insert(ns, "msAccessHTML") == NS_w11::LN_msAccessHTML;
+ flag&=QName::tokenizer().insert(ns, "scriptAnchor") == NS_w11::LN_scriptAnchor;
+ flag&=QName::tokenizer().insert(ns, "ocx") == NS_w11::LN_ocx;
+ flag&=QName::tokenizer().insert(ns, "args") == NS_w11::LN_args;
+ flag&=QName::tokenizer().insert(ns, "appletText") == NS_w11::LN_appletText;
+ flag&=QName::tokenizer().insert(ns, "scriptId") == NS_w11::LN_scriptId;
+ flag&=QName::tokenizer().insert(ns, "language") == NS_w11::LN_language;
+ flag&=QName::tokenizer().insert(ns, "scriptText") == NS_w11::LN_scriptText;
+ flag&=QName::tokenizer().insert(ns, "fldData") == NS_w11::LN_fldData;
+ flag&=QName::tokenizer().insert(ns, "r") == NS_w11::LN_r;
+ flag&=QName::tokenizer().insert(ns, "fldSimple") == NS_w11::LN_fldSimple;
+ flag&=QName::tokenizer().insert(ns, "hlink") == NS_w11::LN_hlink;
+ flag&=QName::tokenizer().insert(ns, "col") == NS_w11::LN_col;
+ flag&=QName::tokenizer().insert(ns, "hdr") == NS_w11::LN_hdr;
+ flag&=QName::tokenizer().insert(ns, "ftr") == NS_w11::LN_ftr;
+ flag&=QName::tokenizer().insert(ns, "footnotePr") == NS_w11::LN_footnotePr;
+ flag&=QName::tokenizer().insert(ns, "endnotePr") == NS_w11::LN_endnotePr;
+ flag&=QName::tokenizer().insert(ns, "type") == NS_w11::LN_type;
+ flag&=QName::tokenizer().insert(ns, "pgSz") == NS_w11::LN_pgSz;
+ flag&=QName::tokenizer().insert(ns, "pgMar") == NS_w11::LN_pgMar;
+ flag&=QName::tokenizer().insert(ns, "paperSrc") == NS_w11::LN_paperSrc;
+ flag&=QName::tokenizer().insert(ns, "pgBorders") == NS_w11::LN_pgBorders;
+ flag&=QName::tokenizer().insert(ns, "lnNumType") == NS_w11::LN_lnNumType;
+ flag&=QName::tokenizer().insert(ns, "pgNumType") == NS_w11::LN_pgNumType;
+ flag&=QName::tokenizer().insert(ns, "cols") == NS_w11::LN_cols;
+ flag&=QName::tokenizer().insert(ns, "formProt") == NS_w11::LN_formProt;
+ flag&=QName::tokenizer().insert(ns, "vAlign") == NS_w11::LN_vAlign;
+ flag&=QName::tokenizer().insert(ns, "noEndnote") == NS_w11::LN_noEndnote;
+ flag&=QName::tokenizer().insert(ns, "titlePg") == NS_w11::LN_titlePg;
+ flag&=QName::tokenizer().insert(ns, "textFlow") == NS_w11::LN_textFlow;
+ flag&=QName::tokenizer().insert(ns, "rtlGutter") == NS_w11::LN_rtlGutter;
+ flag&=QName::tokenizer().insert(ns, "docGrid") == NS_w11::LN_docGrid;
+ flag&=QName::tokenizer().insert(ns, "br") == NS_w11::LN_br;
+ flag&=QName::tokenizer().insert(ns, "t") == NS_w11::LN_t;
+ flag&=QName::tokenizer().insert(ns, "delText") == NS_w11::LN_delText;
+ flag&=QName::tokenizer().insert(ns, "instrText") == NS_w11::LN_instrText;
+ flag&=QName::tokenizer().insert(ns, "delInstrText") == NS_w11::LN_delInstrText;
+ flag&=QName::tokenizer().insert(ns, "noBreakHyphen") == NS_w11::LN_noBreakHyphen;
+ flag&=QName::tokenizer().insert(ns, "softHyphen") == NS_w11::LN_softHyphen;
+ flag&=QName::tokenizer().insert(ns, "annotationRef") == NS_w11::LN_annotationRef;
+ flag&=QName::tokenizer().insert(ns, "footnoteRef") == NS_w11::LN_footnoteRef;
+ flag&=QName::tokenizer().insert(ns, "endnoteRef") == NS_w11::LN_endnoteRef;
+ flag&=QName::tokenizer().insert(ns, "separator") == NS_w11::LN_separator;
+ flag&=QName::tokenizer().insert(ns, "continuationSeparator") == NS_w11::LN_continuationSeparator;
+ flag&=QName::tokenizer().insert(ns, "footnote") == NS_w11::LN_footnote;
+ flag&=QName::tokenizer().insert(ns, "endnote") == NS_w11::LN_endnote;
+ flag&=QName::tokenizer().insert(ns, "sym") == NS_w11::LN_sym;
+ flag&=QName::tokenizer().insert(ns, "pgNum") == NS_w11::LN_pgNum;
+ flag&=QName::tokenizer().insert(ns, "cr") == NS_w11::LN_cr;
+ flag&=QName::tokenizer().insert(ns, "pict") == NS_w11::LN_pict;
+ flag&=QName::tokenizer().insert(ns, "fldChar") == NS_w11::LN_fldChar;
+ flag&=QName::tokenizer().insert(ns, "ruby") == NS_w11::LN_ruby;
+ flag&=QName::tokenizer().insert(ns, "rStyle") == NS_w11::LN_rStyle;
+ flag&=QName::tokenizer().insert(ns, "rFonts") == NS_w11::LN_rFonts;
+ flag&=QName::tokenizer().insert(ns, "b") == NS_w11::LN_b;
+ flag&=QName::tokenizer().insert(ns, "b-cs") == NS_w11::LN_b_cs;
+ flag&=QName::tokenizer().insert(ns, "i") == NS_w11::LN_i;
+ flag&=QName::tokenizer().insert(ns, "i-cs") == NS_w11::LN_i_cs;
+ flag&=QName::tokenizer().insert(ns, "caps") == NS_w11::LN_caps;
+ flag&=QName::tokenizer().insert(ns, "smallCaps") == NS_w11::LN_smallCaps;
+ flag&=QName::tokenizer().insert(ns, "strike") == NS_w11::LN_strike;
+ flag&=QName::tokenizer().insert(ns, "dstrike") == NS_w11::LN_dstrike;
+ flag&=QName::tokenizer().insert(ns, "outline") == NS_w11::LN_outline;
+ flag&=QName::tokenizer().insert(ns, "shadow") == NS_w11::LN_shadow;
+ flag&=QName::tokenizer().insert(ns, "emboss") == NS_w11::LN_emboss;
+ flag&=QName::tokenizer().insert(ns, "imprint") == NS_w11::LN_imprint;
+ flag&=QName::tokenizer().insert(ns, "noProof") == NS_w11::LN_noProof;
+ flag&=QName::tokenizer().insert(ns, "vanish") == NS_w11::LN_vanish;
+ flag&=QName::tokenizer().insert(ns, "webHidden") == NS_w11::LN_webHidden;
+ flag&=QName::tokenizer().insert(ns, "color") == NS_w11::LN_color;
+ flag&=QName::tokenizer().insert(ns, "w") == NS_w11::LN_w;
+ flag&=QName::tokenizer().insert(ns, "kern") == NS_w11::LN_kern;
+ flag&=QName::tokenizer().insert(ns, "position") == NS_w11::LN_position;
+ flag&=QName::tokenizer().insert(ns, "sz") == NS_w11::LN_sz;
+ flag&=QName::tokenizer().insert(ns, "sz-cs") == NS_w11::LN_sz_cs;
+ flag&=QName::tokenizer().insert(ns, "highlight") == NS_w11::LN_highlight;
+ flag&=QName::tokenizer().insert(ns, "u") == NS_w11::LN_u;
+ flag&=QName::tokenizer().insert(ns, "effect") == NS_w11::LN_effect;
+ flag&=QName::tokenizer().insert(ns, "bdr") == NS_w11::LN_bdr;
+ flag&=QName::tokenizer().insert(ns, "fitText") == NS_w11::LN_fitText;
+ flag&=QName::tokenizer().insert(ns, "vertAlign") == NS_w11::LN_vertAlign;
+ flag&=QName::tokenizer().insert(ns, "rtl") == NS_w11::LN_rtl;
+ flag&=QName::tokenizer().insert(ns, "cs") == NS_w11::LN_cs;
+ flag&=QName::tokenizer().insert(ns, "em") == NS_w11::LN_em;
+ flag&=QName::tokenizer().insert(ns, "hyphen") == NS_w11::LN_hyphen;
+ flag&=QName::tokenizer().insert(ns, "lang") == NS_w11::LN_lang;
+ flag&=QName::tokenizer().insert(ns, "asianLayout") == NS_w11::LN_asianLayout;
+ flag&=QName::tokenizer().insert(ns, "specVanish") == NS_w11::LN_specVanish;
+ flag&=QName::tokenizer().insert(ns, "lists") == NS_w11::LN_lists;
+ flag&=QName::tokenizer().insert(ns, "styles") == NS_w11::LN_styles;
+ flag&=QName::tokenizer().insert(ns, "fonts") == NS_w11::LN_fonts;
+ flag&=QName::tokenizer().insert(ns, "rubyAlign") == NS_w11::LN_rubyAlign;
+ flag&=QName::tokenizer().insert(ns, "hps") == NS_w11::LN_hps;
+ flag&=QName::tokenizer().insert(ns, "hpsRaise") == NS_w11::LN_hpsRaise;
+ flag&=QName::tokenizer().insert(ns, "hpsBaseText") == NS_w11::LN_hpsBaseText;
+ flag&=QName::tokenizer().insert(ns, "lid") == NS_w11::LN_lid;
+ flag&=QName::tokenizer().insert(ns, "rubyPr") == NS_w11::LN_rubyPr;
+ flag&=QName::tokenizer().insert(ns, "rt") == NS_w11::LN_rt;
+ flag&=QName::tokenizer().insert(ns, "rubyBase") == NS_w11::LN_rubyBase;
+ flag&=QName::tokenizer().insert(ns, "pPr") == NS_w11::LN_pPr;
+ flag&=QName::tokenizer().insert(ns, "subDoc") == NS_w11::LN_subDoc;
+ flag&=QName::tokenizer().insert(ns, "gridCol") == NS_w11::LN_gridCol;
+ flag&=QName::tokenizer().insert(ns, "insideH") == NS_w11::LN_insideH;
+ flag&=QName::tokenizer().insert(ns, "insideV") == NS_w11::LN_insideV;
+ flag&=QName::tokenizer().insert(ns, "tl2br") == NS_w11::LN_tl2br;
+ flag&=QName::tokenizer().insert(ns, "tr2bl") == NS_w11::LN_tr2bl;
+ flag&=QName::tokenizer().insert(ns, "tcW") == NS_w11::LN_tcW;
+ flag&=QName::tokenizer().insert(ns, "gridSpan") == NS_w11::LN_gridSpan;
+ flag&=QName::tokenizer().insert(ns, "hmerge") == NS_w11::LN_hmerge;
+ flag&=QName::tokenizer().insert(ns, "vmerge") == NS_w11::LN_vmerge;
+ flag&=QName::tokenizer().insert(ns, "tcBorders") == NS_w11::LN_tcBorders;
+ flag&=QName::tokenizer().insert(ns, "noWrap") == NS_w11::LN_noWrap;
+ flag&=QName::tokenizer().insert(ns, "tcMar") == NS_w11::LN_tcMar;
+ flag&=QName::tokenizer().insert(ns, "tcFitText") == NS_w11::LN_tcFitText;
+ flag&=QName::tokenizer().insert(ns, "tcPr") == NS_w11::LN_tcPr;
+ flag&=QName::tokenizer().insert(ns, "gridBefore") == NS_w11::LN_gridBefore;
+ flag&=QName::tokenizer().insert(ns, "gridAfter") == NS_w11::LN_gridAfter;
+ flag&=QName::tokenizer().insert(ns, "wBefore") == NS_w11::LN_wBefore;
+ flag&=QName::tokenizer().insert(ns, "wAfter") == NS_w11::LN_wAfter;
+ flag&=QName::tokenizer().insert(ns, "cantSplit") == NS_w11::LN_cantSplit;
+ flag&=QName::tokenizer().insert(ns, "trHeight") == NS_w11::LN_trHeight;
+ flag&=QName::tokenizer().insert(ns, "tblHeader") == NS_w11::LN_tblHeader;
+ flag&=QName::tokenizer().insert(ns, "tblCellSpacing") == NS_w11::LN_tblCellSpacing;
+ flag&=QName::tokenizer().insert(ns, "tblPrEx") == NS_w11::LN_tblPrEx;
+ flag&=QName::tokenizer().insert(ns, "trPr") == NS_w11::LN_trPr;
+ flag&=QName::tokenizer().insert(ns, "tc") == NS_w11::LN_tc;
+ flag&=QName::tokenizer().insert(ns, "tblStyle") == NS_w11::LN_tblStyle;
+ flag&=QName::tokenizer().insert(ns, "tblpPr") == NS_w11::LN_tblpPr;
+ flag&=QName::tokenizer().insert(ns, "tblOverlap") == NS_w11::LN_tblOverlap;
+ flag&=QName::tokenizer().insert(ns, "tblRtl") == NS_w11::LN_tblRtl;
+ flag&=QName::tokenizer().insert(ns, "bidiVisual") == NS_w11::LN_bidiVisual;
+ flag&=QName::tokenizer().insert(ns, "tblStyleRowBandSize") == NS_w11::LN_tblStyleRowBandSize;
+ flag&=QName::tokenizer().insert(ns, "tblStyleColBandSize") == NS_w11::LN_tblStyleColBandSize;
+ flag&=QName::tokenizer().insert(ns, "tblW") == NS_w11::LN_tblW;
+ flag&=QName::tokenizer().insert(ns, "tblInd") == NS_w11::LN_tblInd;
+ flag&=QName::tokenizer().insert(ns, "tblBorders") == NS_w11::LN_tblBorders;
+ flag&=QName::tokenizer().insert(ns, "tblLayout") == NS_w11::LN_tblLayout;
+ flag&=QName::tokenizer().insert(ns, "tblCellMar") == NS_w11::LN_tblCellMar;
+ flag&=QName::tokenizer().insert(ns, "tblLook") == NS_w11::LN_tblLook;
+ flag&=QName::tokenizer().insert(ns, "tblPr") == NS_w11::LN_tblPr;
+ flag&=QName::tokenizer().insert(ns, "tblGrid") == NS_w11::LN_tblGrid;
+ flag&=QName::tokenizer().insert(ns, "tr") == NS_w11::LN_tr;
+ flag&=QName::tokenizer().insert(ns, "pos") == NS_w11::LN_pos;
+ flag&=QName::tokenizer().insert(ns, "numFmt") == NS_w11::LN_numFmt;
+ flag&=QName::tokenizer().insert(ns, "numStart") == NS_w11::LN_numStart;
+ flag&=QName::tokenizer().insert(ns, "numRestart") == NS_w11::LN_numRestart;
+ flag&=QName::tokenizer().insert(ns, "active") == NS_w11::LN_active;
+ flag&=QName::tokenizer().insert(ns, "hash") == NS_w11::LN_hash;
+ flag&=QName::tokenizer().insert(ns, "column") == NS_w11::LN_column;
+ flag&=QName::tokenizer().insert(ns, "uniqueTag") == NS_w11::LN_uniqueTag;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_w11::LN_name;
+ flag&=QName::tokenizer().insert(ns, "mappedName") == NS_w11::LN_mappedName;
+ flag&=QName::tokenizer().insert(ns, "dynamicAddress") == NS_w11::LN_dynamicAddress;
+ flag&=QName::tokenizer().insert(ns, "udl") == NS_w11::LN_udl;
+ flag&=QName::tokenizer().insert(ns, "table") == NS_w11::LN_table;
+ flag&=QName::tokenizer().insert(ns, "src") == NS_w11::LN_src;
+ flag&=QName::tokenizer().insert(ns, "filter") == NS_w11::LN_filter;
+ flag&=QName::tokenizer().insert(ns, "sort") == NS_w11::LN_sort;
+ flag&=QName::tokenizer().insert(ns, "fieldMapData") == NS_w11::LN_fieldMapData;
+ flag&=QName::tokenizer().insert(ns, "colDelim") == NS_w11::LN_colDelim;
+ flag&=QName::tokenizer().insert(ns, "jdsoType") == NS_w11::LN_jdsoType;
+ flag&=QName::tokenizer().insert(ns, "fHdr") == NS_w11::LN_fHdr;
+ flag&=QName::tokenizer().insert(ns, "recipientData") == NS_w11::LN_recipientData;
+ flag&=QName::tokenizer().insert(ns, "mainDocumentType") == NS_w11::LN_mainDocumentType;
+ flag&=QName::tokenizer().insert(ns, "linkToQuery") == NS_w11::LN_linkToQuery;
+ flag&=QName::tokenizer().insert(ns, "dataType") == NS_w11::LN_dataType;
+ flag&=QName::tokenizer().insert(ns, "defaultSQL") == NS_w11::LN_defaultSQL;
+ flag&=QName::tokenizer().insert(ns, "connectString") == NS_w11::LN_connectString;
+ flag&=QName::tokenizer().insert(ns, "query") == NS_w11::LN_query;
+ flag&=QName::tokenizer().insert(ns, "dataSource") == NS_w11::LN_dataSource;
+ flag&=QName::tokenizer().insert(ns, "headerSource") == NS_w11::LN_headerSource;
+ flag&=QName::tokenizer().insert(ns, "doNotSuppressBlankLines") == NS_w11::LN_doNotSuppressBlankLines;
+ flag&=QName::tokenizer().insert(ns, "destination") == NS_w11::LN_destination;
+ flag&=QName::tokenizer().insert(ns, "addressFieldName") == NS_w11::LN_addressFieldName;
+ flag&=QName::tokenizer().insert(ns, "mailSubject") == NS_w11::LN_mailSubject;
+ flag&=QName::tokenizer().insert(ns, "mailAsAttachment") == NS_w11::LN_mailAsAttachment;
+ flag&=QName::tokenizer().insert(ns, "viewMergedData") == NS_w11::LN_viewMergedData;
+ flag&=QName::tokenizer().insert(ns, "activeRecord") == NS_w11::LN_activeRecord;
+ flag&=QName::tokenizer().insert(ns, "checkErrors") == NS_w11::LN_checkErrors;
+ flag&=QName::tokenizer().insert(ns, "odso") == NS_w11::LN_odso;
+ flag&=QName::tokenizer().insert(ns, "origWordTableRules") == NS_w11::LN_origWordTableRules;
+ flag&=QName::tokenizer().insert(ns, "wpJustification") == NS_w11::LN_wpJustification;
+ flag&=QName::tokenizer().insert(ns, "noTabHangInd") == NS_w11::LN_noTabHangInd;
+ flag&=QName::tokenizer().insert(ns, "noLeading") == NS_w11::LN_noLeading;
+ flag&=QName::tokenizer().insert(ns, "spaceForUL") == NS_w11::LN_spaceForUL;
+ flag&=QName::tokenizer().insert(ns, "noColumnBalance") == NS_w11::LN_noColumnBalance;
+ flag&=QName::tokenizer().insert(ns, "balanceSingleByteDoubleByteWidth") == NS_w11::LN_balanceSingleByteDoubleByteWidth;
+ flag&=QName::tokenizer().insert(ns, "transparentMetafiles") == NS_w11::LN_transparentMetafiles;
+ flag&=QName::tokenizer().insert(ns, "noExtraLineSpacing") == NS_w11::LN_noExtraLineSpacing;
+ flag&=QName::tokenizer().insert(ns, "doNotLeaveBackslashAlone") == NS_w11::LN_doNotLeaveBackslashAlone;
+ flag&=QName::tokenizer().insert(ns, "ulTrailSpace") == NS_w11::LN_ulTrailSpace;
+ flag&=QName::tokenizer().insert(ns, "doNotExpandShiftReturn") == NS_w11::LN_doNotExpandShiftReturn;
+ flag&=QName::tokenizer().insert(ns, "spacingInWholePoints") == NS_w11::LN_spacingInWholePoints;
+ flag&=QName::tokenizer().insert(ns, "lineWrapLikeWord6") == NS_w11::LN_lineWrapLikeWord6;
+ flag&=QName::tokenizer().insert(ns, "printBodyTextBeforeHeader") == NS_w11::LN_printBodyTextBeforeHeader;
+ flag&=QName::tokenizer().insert(ns, "printColBlack") == NS_w11::LN_printColBlack;
+ flag&=QName::tokenizer().insert(ns, "wpSpaceWidth") == NS_w11::LN_wpSpaceWidth;
+ flag&=QName::tokenizer().insert(ns, "showBreaksInFrames") == NS_w11::LN_showBreaksInFrames;
+ flag&=QName::tokenizer().insert(ns, "subFontBySize") == NS_w11::LN_subFontBySize;
+ flag&=QName::tokenizer().insert(ns, "suppressBottomSpacing") == NS_w11::LN_suppressBottomSpacing;
+ flag&=QName::tokenizer().insert(ns, "suppressTopSpacing") == NS_w11::LN_suppressTopSpacing;
+ flag&=QName::tokenizer().insert(ns, "suppressTopSpacingMac5") == NS_w11::LN_suppressTopSpacingMac5;
+ flag&=QName::tokenizer().insert(ns, "suppressTopSpacingWP") == NS_w11::LN_suppressTopSpacingWP;
+ flag&=QName::tokenizer().insert(ns, "suppressSpBfAfterPgBrk") == NS_w11::LN_suppressSpBfAfterPgBrk;
+ flag&=QName::tokenizer().insert(ns, "swapBordersFacingPages") == NS_w11::LN_swapBordersFacingPages;
+ flag&=QName::tokenizer().insert(ns, "convMailMergeEsc") == NS_w11::LN_convMailMergeEsc;
+ flag&=QName::tokenizer().insert(ns, "truncateFontHeight") == NS_w11::LN_truncateFontHeight;
+ flag&=QName::tokenizer().insert(ns, "mwSmallCaps") == NS_w11::LN_mwSmallCaps;
+ flag&=QName::tokenizer().insert(ns, "usePrinterMetrics") == NS_w11::LN_usePrinterMetrics;
+ flag&=QName::tokenizer().insert(ns, "ww6BorderRules") == NS_w11::LN_ww6BorderRules;
+ flag&=QName::tokenizer().insert(ns, "wrapTrailSpaces") == NS_w11::LN_wrapTrailSpaces;
+ flag&=QName::tokenizer().insert(ns, "footnoteLayoutLikeWW8") == NS_w11::LN_footnoteLayoutLikeWW8;
+ flag&=QName::tokenizer().insert(ns, "shapeLayoutLikeWW8") == NS_w11::LN_shapeLayoutLikeWW8;
+ flag&=QName::tokenizer().insert(ns, "alignTablesRowByRow") == NS_w11::LN_alignTablesRowByRow;
+ flag&=QName::tokenizer().insert(ns, "forgetLastTabAlignment") == NS_w11::LN_forgetLastTabAlignment;
+ flag&=QName::tokenizer().insert(ns, "adjustLineHeightInTable") == NS_w11::LN_adjustLineHeightInTable;
+ flag&=QName::tokenizer().insert(ns, "autoSpaceLikeWord95") == NS_w11::LN_autoSpaceLikeWord95;
+ flag&=QName::tokenizer().insert(ns, "noSpaceRaiseLower") == NS_w11::LN_noSpaceRaiseLower;
+ flag&=QName::tokenizer().insert(ns, "doNotUseHTMLParagraphAutoSpacing") == NS_w11::LN_doNotUseHTMLParagraphAutoSpacing;
+ flag&=QName::tokenizer().insert(ns, "layoutRawTableWidth") == NS_w11::LN_layoutRawTableWidth;
+ flag&=QName::tokenizer().insert(ns, "layoutTableRowsApart") == NS_w11::LN_layoutTableRowsApart;
+ flag&=QName::tokenizer().insert(ns, "useWord97LineBreakingRules") == NS_w11::LN_useWord97LineBreakingRules;
+ flag&=QName::tokenizer().insert(ns, "breakWrappedTables") == NS_w11::LN_breakWrappedTables;
+ flag&=QName::tokenizer().insert(ns, "snapToGridInCell") == NS_w11::LN_snapToGridInCell;
+ flag&=QName::tokenizer().insert(ns, "dontAllowFieldEndSelect") == NS_w11::LN_dontAllowFieldEndSelect;
+ flag&=QName::tokenizer().insert(ns, "applyBreakingRules") == NS_w11::LN_applyBreakingRules;
+ flag&=QName::tokenizer().insert(ns, "wrapTextWithPunct") == NS_w11::LN_wrapTextWithPunct;
+ flag&=QName::tokenizer().insert(ns, "useAsianBreakRules") == NS_w11::LN_useAsianBreakRules;
+ flag&=QName::tokenizer().insert(ns, "useWord2002TableStyleRules") == NS_w11::LN_useWord2002TableStyleRules;
+ flag&=QName::tokenizer().insert(ns, "dontGrowAutofit") == NS_w11::LN_dontGrowAutofit;
+ flag&=QName::tokenizer().insert(ns, "useFELayout") == NS_w11::LN_useFELayout;
+ flag&=QName::tokenizer().insert(ns, "docVar") == NS_w11::LN_docVar;
+ flag&=QName::tokenizer().insert(ns, "view") == NS_w11::LN_view;
+ flag&=QName::tokenizer().insert(ns, "zoom") == NS_w11::LN_zoom;
+ flag&=QName::tokenizer().insert(ns, "removePersonalInformation") == NS_w11::LN_removePersonalInformation;
+ flag&=QName::tokenizer().insert(ns, "dontDisplayPageBoundaries") == NS_w11::LN_dontDisplayPageBoundaries;
+ flag&=QName::tokenizer().insert(ns, "displayBackgroundShape") == NS_w11::LN_displayBackgroundShape;
+ flag&=QName::tokenizer().insert(ns, "printPostScriptOverText") == NS_w11::LN_printPostScriptOverText;
+ flag&=QName::tokenizer().insert(ns, "printFractionalCharacterWidth") == NS_w11::LN_printFractionalCharacterWidth;
+ flag&=QName::tokenizer().insert(ns, "printFormsData") == NS_w11::LN_printFormsData;
+ flag&=QName::tokenizer().insert(ns, "embedTrueTypeFonts") == NS_w11::LN_embedTrueTypeFonts;
+ flag&=QName::tokenizer().insert(ns, "doNotEmbedSystemFonts") == NS_w11::LN_doNotEmbedSystemFonts;
+ flag&=QName::tokenizer().insert(ns, "saveSubsetFonts") == NS_w11::LN_saveSubsetFonts;
+ flag&=QName::tokenizer().insert(ns, "saveFormsData") == NS_w11::LN_saveFormsData;
+ flag&=QName::tokenizer().insert(ns, "mirrorMargins") == NS_w11::LN_mirrorMargins;
+ flag&=QName::tokenizer().insert(ns, "alignBordersAndEdges") == NS_w11::LN_alignBordersAndEdges;
+ flag&=QName::tokenizer().insert(ns, "bordersDontSurroundHeader") == NS_w11::LN_bordersDontSurroundHeader;
+ flag&=QName::tokenizer().insert(ns, "bordersDontSurroundFooter") == NS_w11::LN_bordersDontSurroundFooter;
+ flag&=QName::tokenizer().insert(ns, "gutterAtTop") == NS_w11::LN_gutterAtTop;
+ flag&=QName::tokenizer().insert(ns, "hideSpellingErrors") == NS_w11::LN_hideSpellingErrors;
+ flag&=QName::tokenizer().insert(ns, "hideGrammaticalErrors") == NS_w11::LN_hideGrammaticalErrors;
+ flag&=QName::tokenizer().insert(ns, "activeWritingStyle") == NS_w11::LN_activeWritingStyle;
+ flag&=QName::tokenizer().insert(ns, "proofState") == NS_w11::LN_proofState;
+ flag&=QName::tokenizer().insert(ns, "formsDesign") == NS_w11::LN_formsDesign;
+ flag&=QName::tokenizer().insert(ns, "attachedTemplate") == NS_w11::LN_attachedTemplate;
+ flag&=QName::tokenizer().insert(ns, "linkStyles") == NS_w11::LN_linkStyles;
+ flag&=QName::tokenizer().insert(ns, "stylePaneFormatFilter") == NS_w11::LN_stylePaneFormatFilter;
+ flag&=QName::tokenizer().insert(ns, "documentType") == NS_w11::LN_documentType;
+ flag&=QName::tokenizer().insert(ns, "mailMerge") == NS_w11::LN_mailMerge;
+ flag&=QName::tokenizer().insert(ns, "revisionView") == NS_w11::LN_revisionView;
+ flag&=QName::tokenizer().insert(ns, "trackRevisions") == NS_w11::LN_trackRevisions;
+ flag&=QName::tokenizer().insert(ns, "documentProtection") == NS_w11::LN_documentProtection;
+ flag&=QName::tokenizer().insert(ns, "autoFormatOverride") == NS_w11::LN_autoFormatOverride;
+ flag&=QName::tokenizer().insert(ns, "defaultTabStop") == NS_w11::LN_defaultTabStop;
+ flag&=QName::tokenizer().insert(ns, "autoHyphenation") == NS_w11::LN_autoHyphenation;
+ flag&=QName::tokenizer().insert(ns, "consecutiveHyphenLimit") == NS_w11::LN_consecutiveHyphenLimit;
+ flag&=QName::tokenizer().insert(ns, "hyphenationZone") == NS_w11::LN_hyphenationZone;
+ flag&=QName::tokenizer().insert(ns, "doNotHyphenateCaps") == NS_w11::LN_doNotHyphenateCaps;
+ flag&=QName::tokenizer().insert(ns, "showEnvelope") == NS_w11::LN_showEnvelope;
+ flag&=QName::tokenizer().insert(ns, "summaryLength") == NS_w11::LN_summaryLength;
+ flag&=QName::tokenizer().insert(ns, "clickAndTypeStyle") == NS_w11::LN_clickAndTypeStyle;
+ flag&=QName::tokenizer().insert(ns, "defaultTableStyle") == NS_w11::LN_defaultTableStyle;
+ flag&=QName::tokenizer().insert(ns, "evenAndOddHeaders") == NS_w11::LN_evenAndOddHeaders;
+ flag&=QName::tokenizer().insert(ns, "bookFoldRevPrinting") == NS_w11::LN_bookFoldRevPrinting;
+ flag&=QName::tokenizer().insert(ns, "bookFoldPrinting") == NS_w11::LN_bookFoldPrinting;
+ flag&=QName::tokenizer().insert(ns, "bookFoldPrintingSheets") == NS_w11::LN_bookFoldPrintingSheets;
+ flag&=QName::tokenizer().insert(ns, "drawingGridHorizontalSpacing") == NS_w11::LN_drawingGridHorizontalSpacing;
+ flag&=QName::tokenizer().insert(ns, "drawingGridVerticalSpacing") == NS_w11::LN_drawingGridVerticalSpacing;
+ flag&=QName::tokenizer().insert(ns, "displayHorizontalDrawingGridEvery") == NS_w11::LN_displayHorizontalDrawingGridEvery;
+ flag&=QName::tokenizer().insert(ns, "displayVerticalDrawingGridEvery") == NS_w11::LN_displayVerticalDrawingGridEvery;
+ flag&=QName::tokenizer().insert(ns, "useMarginsForDrawingGridOrigin") == NS_w11::LN_useMarginsForDrawingGridOrigin;
+ flag&=QName::tokenizer().insert(ns, "drawingGridHorizontalOrigin") == NS_w11::LN_drawingGridHorizontalOrigin;
+ flag&=QName::tokenizer().insert(ns, "drawingGridVerticalOrigin") == NS_w11::LN_drawingGridVerticalOrigin;
+ flag&=QName::tokenizer().insert(ns, "doNotShadeFormData") == NS_w11::LN_doNotShadeFormData;
+ flag&=QName::tokenizer().insert(ns, "punctuationKerning") == NS_w11::LN_punctuationKerning;
+ flag&=QName::tokenizer().insert(ns, "characterSpacingControl") == NS_w11::LN_characterSpacingControl;
+ flag&=QName::tokenizer().insert(ns, "printTwoOnOne") == NS_w11::LN_printTwoOnOne;
+ flag&=QName::tokenizer().insert(ns, "strictFirstAndLastChars") == NS_w11::LN_strictFirstAndLastChars;
+ flag&=QName::tokenizer().insert(ns, "noLineBreaksAfter") == NS_w11::LN_noLineBreaksAfter;
+ flag&=QName::tokenizer().insert(ns, "noLineBreaksBefore") == NS_w11::LN_noLineBreaksBefore;
+ flag&=QName::tokenizer().insert(ns, "webPageEncoding") == NS_w11::LN_webPageEncoding;
+ flag&=QName::tokenizer().insert(ns, "optimizeForBrowser") == NS_w11::LN_optimizeForBrowser;
+ flag&=QName::tokenizer().insert(ns, "relyOnVML") == NS_w11::LN_relyOnVML;
+ flag&=QName::tokenizer().insert(ns, "allowPNG") == NS_w11::LN_allowPNG;
+ flag&=QName::tokenizer().insert(ns, "doNotRelyOnCSS") == NS_w11::LN_doNotRelyOnCSS;
+ flag&=QName::tokenizer().insert(ns, "doNotSaveWebPagesAsSingleFile") == NS_w11::LN_doNotSaveWebPagesAsSingleFile;
+ flag&=QName::tokenizer().insert(ns, "doNotOrganizeInFolder") == NS_w11::LN_doNotOrganizeInFolder;
+ flag&=QName::tokenizer().insert(ns, "doNotUseLongFileNames") == NS_w11::LN_doNotUseLongFileNames;
+ flag&=QName::tokenizer().insert(ns, "pixelsPerInch") == NS_w11::LN_pixelsPerInch;
+ flag&=QName::tokenizer().insert(ns, "targetScreenSz") == NS_w11::LN_targetScreenSz;
+ flag&=QName::tokenizer().insert(ns, "savePreviewPicture") == NS_w11::LN_savePreviewPicture;
+ flag&=QName::tokenizer().insert(ns, "validateAgainstSchema") == NS_w11::LN_validateAgainstSchema;
+ flag&=QName::tokenizer().insert(ns, "saveInvalidXML") == NS_w11::LN_saveInvalidXML;
+ flag&=QName::tokenizer().insert(ns, "ignoreMixedContent") == NS_w11::LN_ignoreMixedContent;
+ flag&=QName::tokenizer().insert(ns, "alwaysShowPlaceholderText") == NS_w11::LN_alwaysShowPlaceholderText;
+ flag&=QName::tokenizer().insert(ns, "doNotUnderlineInvalidXML") == NS_w11::LN_doNotUnderlineInvalidXML;
+ flag&=QName::tokenizer().insert(ns, "removeWordSchemaOnSave") == NS_w11::LN_removeWordSchemaOnSave;
+ flag&=QName::tokenizer().insert(ns, "useXSLTWhenSaving") == NS_w11::LN_useXSLTWhenSaving;
+ flag&=QName::tokenizer().insert(ns, "saveThroughXSLT") == NS_w11::LN_saveThroughXSLT;
+ flag&=QName::tokenizer().insert(ns, "showXMLTags") == NS_w11::LN_showXMLTags;
+ flag&=QName::tokenizer().insert(ns, "alwaysMergeEmptyNamespace") == NS_w11::LN_alwaysMergeEmptyNamespace;
+ flag&=QName::tokenizer().insert(ns, "hdrShapeDefaults") == NS_w11::LN_hdrShapeDefaults;
+ flag&=QName::tokenizer().insert(ns, "compat") == NS_w11::LN_compat;
+ flag&=QName::tokenizer().insert(ns, "docVars") == NS_w11::LN_docVars;
+ flag&=QName::tokenizer().insert(ns, "sourceFileName") == NS_w11::LN_sourceFileName;
+ flag&=QName::tokenizer().insert(ns, "marW") == NS_w11::LN_marW;
+ flag&=QName::tokenizer().insert(ns, "marH") == NS_w11::LN_marH;
+ flag&=QName::tokenizer().insert(ns, "scrollbar") == NS_w11::LN_scrollbar;
+ flag&=QName::tokenizer().insert(ns, "noResizeAllowed") == NS_w11::LN_noResizeAllowed;
+ flag&=QName::tokenizer().insert(ns, "linkedToFile") == NS_w11::LN_linkedToFile;
+ flag&=QName::tokenizer().insert(ns, "noBorder") == NS_w11::LN_noBorder;
+ flag&=QName::tokenizer().insert(ns, "flatBorders") == NS_w11::LN_flatBorders;
+ flag&=QName::tokenizer().insert(ns, "framesetSplitbar") == NS_w11::LN_framesetSplitbar;
+ flag&=QName::tokenizer().insert(ns, "frameLayout") == NS_w11::LN_frameLayout;
+ flag&=QName::tokenizer().insert(ns, "frameset") == NS_w11::LN_frameset;
+ flag&=QName::tokenizer().insert(ns, "frame") == NS_w11::LN_frame;
+ flag&=QName::tokenizer().insert(ns, "start") == NS_w11::LN_start;
+ flag&=QName::tokenizer().insert(ns, "nfc") == NS_w11::LN_nfc;
+ flag&=QName::tokenizer().insert(ns, "lvlRestart") == NS_w11::LN_lvlRestart;
+ flag&=QName::tokenizer().insert(ns, "isLgl") == NS_w11::LN_isLgl;
+ flag&=QName::tokenizer().insert(ns, "suff") == NS_w11::LN_suff;
+ flag&=QName::tokenizer().insert(ns, "lvlText") == NS_w11::LN_lvlText;
+ flag&=QName::tokenizer().insert(ns, "lvlPicBulletId") == NS_w11::LN_lvlPicBulletId;
+ flag&=QName::tokenizer().insert(ns, "legacy") == NS_w11::LN_legacy;
+ flag&=QName::tokenizer().insert(ns, "lvlJc") == NS_w11::LN_lvlJc;
+ flag&=QName::tokenizer().insert(ns, "lsid") == NS_w11::LN_lsid;
+ flag&=QName::tokenizer().insert(ns, "plt") == NS_w11::LN_plt;
+ flag&=QName::tokenizer().insert(ns, "tmpl") == NS_w11::LN_tmpl;
+ flag&=QName::tokenizer().insert(ns, "styleLink") == NS_w11::LN_styleLink;
+ flag&=QName::tokenizer().insert(ns, "listStyleLink") == NS_w11::LN_listStyleLink;
+ flag&=QName::tokenizer().insert(ns, "lvl") == NS_w11::LN_lvl;
+ flag&=QName::tokenizer().insert(ns, "startOverride") == NS_w11::LN_startOverride;
+ flag&=QName::tokenizer().insert(ns, "ilst") == NS_w11::LN_ilst;
+ flag&=QName::tokenizer().insert(ns, "lvlOverride") == NS_w11::LN_lvlOverride;
+ flag&=QName::tokenizer().insert(ns, "listPicBullet") == NS_w11::LN_listPicBullet;
+ flag&=QName::tokenizer().insert(ns, "listDef") == NS_w11::LN_listDef;
+ flag&=QName::tokenizer().insert(ns, "list") == NS_w11::LN_list;
+ flag&=QName::tokenizer().insert(ns, "ilfoMacAtCleanup") == NS_w11::LN_ilfoMacAtCleanup;
+ flag&=QName::tokenizer().insert(ns, "aliases") == NS_w11::LN_aliases;
+ flag&=QName::tokenizer().insert(ns, "sti") == NS_w11::LN_sti;
+ flag&=QName::tokenizer().insert(ns, "basedOn") == NS_w11::LN_basedOn;
+ flag&=QName::tokenizer().insert(ns, "next") == NS_w11::LN_next;
+ flag&=QName::tokenizer().insert(ns, "link") == NS_w11::LN_link;
+ flag&=QName::tokenizer().insert(ns, "autoRedefine") == NS_w11::LN_autoRedefine;
+ flag&=QName::tokenizer().insert(ns, "hidden") == NS_w11::LN_hidden;
+ flag&=QName::tokenizer().insert(ns, "semiHidden") == NS_w11::LN_semiHidden;
+ flag&=QName::tokenizer().insert(ns, "locked") == NS_w11::LN_locked;
+ flag&=QName::tokenizer().insert(ns, "personal") == NS_w11::LN_personal;
+ flag&=QName::tokenizer().insert(ns, "personalCompose") == NS_w11::LN_personalCompose;
+ flag&=QName::tokenizer().insert(ns, "personalReply") == NS_w11::LN_personalReply;
+ flag&=QName::tokenizer().insert(ns, "rsid") == NS_w11::LN_rsid;
+ flag&=QName::tokenizer().insert(ns, "tblStylePr") == NS_w11::LN_tblStylePr;
+ flag&=QName::tokenizer().insert(ns, "lsdException") == NS_w11::LN_lsdException;
+ flag&=QName::tokenizer().insert(ns, "versionOfBuiltInStylenames") == NS_w11::LN_versionOfBuiltInStylenames;
+ flag&=QName::tokenizer().insert(ns, "latentStyles") == NS_w11::LN_latentStyles;
+ flag&=QName::tokenizer().insert(ns, "style") == NS_w11::LN_style;
+ flag&=QName::tokenizer().insert(ns, "altName") == NS_w11::LN_altName;
+ flag&=QName::tokenizer().insert(ns, "panose-1") == NS_w11::LN_panose_1;
+ flag&=QName::tokenizer().insert(ns, "charset") == NS_w11::LN_charset;
+ flag&=QName::tokenizer().insert(ns, "family") == NS_w11::LN_family;
+ flag&=QName::tokenizer().insert(ns, "notTrueType") == NS_w11::LN_notTrueType;
+ flag&=QName::tokenizer().insert(ns, "pitch") == NS_w11::LN_pitch;
+ flag&=QName::tokenizer().insert(ns, "sig") == NS_w11::LN_sig;
+ flag&=QName::tokenizer().insert(ns, "defaultFonts") == NS_w11::LN_defaultFonts;
+ flag&=QName::tokenizer().insert(ns, "font") == NS_w11::LN_font;
+ flag&=QName::tokenizer().insert(ns, "blockQuote") == NS_w11::LN_blockQuote;
+ flag&=QName::tokenizer().insert(ns, "bodyDiv") == NS_w11::LN_bodyDiv;
+ flag&=QName::tokenizer().insert(ns, "marLeft") == NS_w11::LN_marLeft;
+ flag&=QName::tokenizer().insert(ns, "marRight") == NS_w11::LN_marRight;
+ flag&=QName::tokenizer().insert(ns, "marTop") == NS_w11::LN_marTop;
+ flag&=QName::tokenizer().insert(ns, "marBottom") == NS_w11::LN_marBottom;
+ flag&=QName::tokenizer().insert(ns, "divBdr") == NS_w11::LN_divBdr;
+ flag&=QName::tokenizer().insert(ns, "divsChild") == NS_w11::LN_divsChild;
+ flag&=QName::tokenizer().insert(ns, "div") == NS_w11::LN_div;
+ flag&=QName::tokenizer().insert(ns, "txbxContent") == NS_w11::LN_txbxContent;
+ flag&=QName::tokenizer().insert(ns, "p") == NS_w11::LN_p;
+ flag&=QName::tokenizer().insert(ns, "tbl") == NS_w11::LN_tbl;
+ flag&=QName::tokenizer().insert(ns, "cfChunk") == NS_w11::LN_cfChunk;
+ flag&=QName::tokenizer().insert(ns, "proofErr") == NS_w11::LN_proofErr;
+ flag&=QName::tokenizer().insert(ns, "permStart") == NS_w11::LN_permStart;
+ flag&=QName::tokenizer().insert(ns, "permEnd") == NS_w11::LN_permEnd;
+ flag&=QName::tokenizer().insert(ns, "ignoreSubtree") == NS_w11::LN_ignoreSubtree;
+ flag&=QName::tokenizer().insert(ns, "ignoreElements") == NS_w11::LN_ignoreElements;
+ flag&=QName::tokenizer().insert(ns, "divs") == NS_w11::LN_divs;
+ flag&=QName::tokenizer().insert(ns, "docOleData") == NS_w11::LN_docOleData;
+ flag&=QName::tokenizer().insert(ns, "docSuppData") == NS_w11::LN_docSuppData;
+ flag&=QName::tokenizer().insert(ns, "shapeDefaults") == NS_w11::LN_shapeDefaults;
+ flag&=QName::tokenizer().insert(ns, "bgPict") == NS_w11::LN_bgPict;
+ flag&=QName::tokenizer().insert(ns, "docPr") == NS_w11::LN_docPr;
+ flag&=QName::tokenizer().insert(ns, "body") == NS_w11::LN_body;
+ flag&=QName::tokenizer().insert(ns, "wordDocument") == NS_w11::LN_wordDocument;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace w11 failed", flag);}
+ void test_sl12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/schemaLibrary/2003/core";
+ flag&=QName::tokenizer().insert(ns, "schemaLibrary") == NS_sl12::LN_schemaLibrary;
+ flag&=QName::tokenizer().insert(ns, "schema") == NS_sl12::LN_schema;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace sl12 failed", flag);}
+ void test_s12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/styles";
+ flag&=QName::tokenizer().insert(ns, "Styles") == NS_s12::LN_Styles;
+ flag&=QName::tokenizer().insert(ns, "fmts") == NS_s12::LN_fmts;
+ flag&=QName::tokenizer().insert(ns, "fonts") == NS_s12::LN_fonts;
+ flag&=QName::tokenizer().insert(ns, "fills") == NS_s12::LN_fills;
+ flag&=QName::tokenizer().insert(ns, "borders") == NS_s12::LN_borders;
+ flag&=QName::tokenizer().insert(ns, "xfs") == NS_s12::LN_xfs;
+ flag&=QName::tokenizer().insert(ns, "styles") == NS_s12::LN_styles;
+ flag&=QName::tokenizer().insert(ns, "dxfs") == NS_s12::LN_dxfs;
+ flag&=QName::tokenizer().insert(ns, "tableStyles") == NS_s12::LN_tableStyles;
+ flag&=QName::tokenizer().insert(ns, "colorpalette") == NS_s12::LN_colorpalette;
+ flag&=QName::tokenizer().insert(ns, "fsb") == NS_s12::LN_fsb;
+ flag&=QName::tokenizer().insert(ns, "color") == NS_s12::LN_color;
+ flag&=QName::tokenizer().insert(ns, "left") == NS_s12::LN_left;
+ flag&=QName::tokenizer().insert(ns, "right") == NS_s12::LN_right;
+ flag&=QName::tokenizer().insert(ns, "top") == NS_s12::LN_top;
+ flag&=QName::tokenizer().insert(ns, "bottom") == NS_s12::LN_bottom;
+ flag&=QName::tokenizer().insert(ns, "diag") == NS_s12::LN_diag;
+ flag&=QName::tokenizer().insert(ns, "vertical") == NS_s12::LN_vertical;
+ flag&=QName::tokenizer().insert(ns, "horizontal") == NS_s12::LN_horizontal;
+ flag&=QName::tokenizer().insert(ns, "fontPr") == NS_s12::LN_fontPr;
+ flag&=QName::tokenizer().insert(ns, "fill") == NS_s12::LN_fill;
+ flag&=QName::tokenizer().insert(ns, "pattern") == NS_s12::LN_pattern;
+ flag&=QName::tokenizer().insert(ns, "gradient") == NS_s12::LN_gradient;
+ flag&=QName::tokenizer().insert(ns, "image") == NS_s12::LN_image;
+ flag&=QName::tokenizer().insert(ns, "fgColor") == NS_s12::LN_fgColor;
+ flag&=QName::tokenizer().insert(ns, "bgColor") == NS_s12::LN_bgColor;
+ flag&=QName::tokenizer().insert(ns, "stop") == NS_s12::LN_stop;
+ flag&=QName::tokenizer().insert(ns, "fmt") == NS_s12::LN_fmt;
+ flag&=QName::tokenizer().insert(ns, "xf") == NS_s12::LN_xf;
+ flag&=QName::tokenizer().insert(ns, "alignment") == NS_s12::LN_alignment;
+ flag&=QName::tokenizer().insert(ns, "protection") == NS_s12::LN_protection;
+ flag&=QName::tokenizer().insert(ns, "styleInfo") == NS_s12::LN_styleInfo;
+ flag&=QName::tokenizer().insert(ns, "style") == NS_s12::LN_style;
+ flag&=QName::tokenizer().insert(ns, "dxf") == NS_s12::LN_dxf;
+ flag&=QName::tokenizer().insert(ns, "font") == NS_s12::LN_font;
+ flag&=QName::tokenizer().insert(ns, "indexedColors") == NS_s12::LN_indexedColors;
+ flag&=QName::tokenizer().insert(ns, "themeColors") == NS_s12::LN_themeColors;
+ flag&=QName::tokenizer().insert(ns, "mruColors") == NS_s12::LN_mruColors;
+ flag&=QName::tokenizer().insert(ns, "rgbcolor") == NS_s12::LN_rgbcolor;
+ flag&=QName::tokenizer().insert(ns, "tableStyle") == NS_s12::LN_tableStyle;
+ flag&=QName::tokenizer().insert(ns, "tableStyleElement") == NS_s12::LN_tableStyleElement;
+ flag&=QName::tokenizer().insert(ns, "charset") == NS_s12::LN_charset;
+ flag&=QName::tokenizer().insert(ns, "family") == NS_s12::LN_family;
+ flag&=QName::tokenizer().insert(ns, "b") == NS_s12::LN_b;
+ flag&=QName::tokenizer().insert(ns, "i") == NS_s12::LN_i;
+ flag&=QName::tokenizer().insert(ns, "strike") == NS_s12::LN_strike;
+ flag&=QName::tokenizer().insert(ns, "outline") == NS_s12::LN_outline;
+ flag&=QName::tokenizer().insert(ns, "shadow") == NS_s12::LN_shadow;
+ flag&=QName::tokenizer().insert(ns, "condense") == NS_s12::LN_condense;
+ flag&=QName::tokenizer().insert(ns, "extend") == NS_s12::LN_extend;
+ flag&=QName::tokenizer().insert(ns, "sz") == NS_s12::LN_sz;
+ flag&=QName::tokenizer().insert(ns, "u") == NS_s12::LN_u;
+ flag&=QName::tokenizer().insert(ns, "vertAlign") == NS_s12::LN_vertAlign;
+ flag&=QName::tokenizer().insert(ns, "fontScheme") == NS_s12::LN_fontScheme;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace s12 failed", flag);}
+ void test_udc(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/data/udc";
+ flag&=QName::tokenizer().insert(ns, "DataSource") == NS_udc::LN_DataSource;
+ flag&=QName::tokenizer().insert(ns, "Type") == NS_udc::LN_Type;
+ flag&=QName::tokenizer().insert(ns, "SubType") == NS_udc::LN_SubType;
+ flag&=QName::tokenizer().insert(ns, "Name") == NS_udc::LN_Name;
+ flag&=QName::tokenizer().insert(ns, "ConnectionInfo") == NS_udc::LN_ConnectionInfo;
+ flag&=QName::tokenizer().insert(ns, "Description") == NS_udc::LN_Description;
+ flag&=QName::tokenizer().insert(ns, "Keywords") == NS_udc::LN_Keywords;
+ flag&=QName::tokenizer().insert(ns, "TooltipInfo") == NS_udc::LN_TooltipInfo;
+ flag&=QName::tokenizer().insert(ns, "ClientParameterBindings") == NS_udc::LN_ClientParameterBindings;
+ flag&=QName::tokenizer().insert(ns, "ClientParameterBinding") == NS_udc::LN_ClientParameterBinding;
+ flag&=QName::tokenizer().insert(ns, "CredentialBinding") == NS_udc::LN_CredentialBinding;
+ flag&=QName::tokenizer().insert(ns, "Credential") == NS_udc::LN_Credential;
+ flag&=QName::tokenizer().insert(ns, "Attribute") == NS_udc::LN_Attribute;
+ flag&=QName::tokenizer().insert(ns, "If") == NS_udc::LN_If;
+ flag&=QName::tokenizer().insert(ns, "ClientParameterValue") == NS_udc::LN_ClientParameterValue;
+ flag&=QName::tokenizer().insert(ns, "CredentialValue") == NS_udc::LN_CredentialValue;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace udc failed", flag);}
+ void test_dr3d(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0";
+ flag&=QName::tokenizer().insert(ns, "distance") == NS_dr3d::LN_distance;
+ flag&=QName::tokenizer().insert(ns, "focal-length") == NS_dr3d::LN_focal_length;
+ flag&=QName::tokenizer().insert(ns, "shadow-slant") == NS_dr3d::LN_shadow_slant;
+ flag&=QName::tokenizer().insert(ns, "shade-mode") == NS_dr3d::LN_shade_mode;
+ flag&=QName::tokenizer().insert(ns, "ambient-color") == NS_dr3d::LN_ambient_color;
+ flag&=QName::tokenizer().insert(ns, "lighting-mode") == NS_dr3d::LN_lighting_mode;
+ flag&=QName::tokenizer().insert(ns, "transform") == NS_dr3d::LN_transform;
+ flag&=QName::tokenizer().insert(ns, "light") == NS_dr3d::LN_light;
+ flag&=QName::tokenizer().insert(ns, "diffuse-color") == NS_dr3d::LN_diffuse_color;
+ flag&=QName::tokenizer().insert(ns, "direction") == NS_dr3d::LN_direction;
+ flag&=QName::tokenizer().insert(ns, "enabled") == NS_dr3d::LN_enabled;
+ flag&=QName::tokenizer().insert(ns, "specular") == NS_dr3d::LN_specular;
+ flag&=QName::tokenizer().insert(ns, "cube") == NS_dr3d::LN_cube;
+ flag&=QName::tokenizer().insert(ns, "min-edge") == NS_dr3d::LN_min_edge;
+ flag&=QName::tokenizer().insert(ns, "max-edge") == NS_dr3d::LN_max_edge;
+ flag&=QName::tokenizer().insert(ns, "sphere") == NS_dr3d::LN_sphere;
+ flag&=QName::tokenizer().insert(ns, "center") == NS_dr3d::LN_center;
+ flag&=QName::tokenizer().insert(ns, "size") == NS_dr3d::LN_size;
+ flag&=QName::tokenizer().insert(ns, "extrude") == NS_dr3d::LN_extrude;
+ flag&=QName::tokenizer().insert(ns, "rotate") == NS_dr3d::LN_rotate;
+ flag&=QName::tokenizer().insert(ns, "horizontal-segments") == NS_dr3d::LN_horizontal_segments;
+ flag&=QName::tokenizer().insert(ns, "vertical-segments") == NS_dr3d::LN_vertical_segments;
+ flag&=QName::tokenizer().insert(ns, "edge-rounding") == NS_dr3d::LN_edge_rounding;
+ flag&=QName::tokenizer().insert(ns, "edge-rounding-mode") == NS_dr3d::LN_edge_rounding_mode;
+ flag&=QName::tokenizer().insert(ns, "back-scale") == NS_dr3d::LN_back_scale;
+ flag&=QName::tokenizer().insert(ns, "depth") == NS_dr3d::LN_depth;
+ flag&=QName::tokenizer().insert(ns, "backface-culling") == NS_dr3d::LN_backface_culling;
+ flag&=QName::tokenizer().insert(ns, "end-angle") == NS_dr3d::LN_end_angle;
+ flag&=QName::tokenizer().insert(ns, "close-front") == NS_dr3d::LN_close_front;
+ flag&=QName::tokenizer().insert(ns, "close-back") == NS_dr3d::LN_close_back;
+ flag&=QName::tokenizer().insert(ns, "normals-kind") == NS_dr3d::LN_normals_kind;
+ flag&=QName::tokenizer().insert(ns, "normals-direction") == NS_dr3d::LN_normals_direction;
+ flag&=QName::tokenizer().insert(ns, "texture-generation-mode-x") == NS_dr3d::LN_texture_generation_mode_x;
+ flag&=QName::tokenizer().insert(ns, "texture-generation-mode-y") == NS_dr3d::LN_texture_generation_mode_y;
+ flag&=QName::tokenizer().insert(ns, "texture-kind") == NS_dr3d::LN_texture_kind;
+ flag&=QName::tokenizer().insert(ns, "texture-filter") == NS_dr3d::LN_texture_filter;
+ flag&=QName::tokenizer().insert(ns, "texture-mode") == NS_dr3d::LN_texture_mode;
+ flag&=QName::tokenizer().insert(ns, "emissive-color") == NS_dr3d::LN_emissive_color;
+ flag&=QName::tokenizer().insert(ns, "specular-color") == NS_dr3d::LN_specular_color;
+ flag&=QName::tokenizer().insert(ns, "shininess") == NS_dr3d::LN_shininess;
+ flag&=QName::tokenizer().insert(ns, "shadow") == NS_dr3d::LN_shadow;
+ flag&=QName::tokenizer().insert(ns, "scene") == NS_dr3d::LN_scene;
+ flag&=QName::tokenizer().insert(ns, "vrp") == NS_dr3d::LN_vrp;
+ flag&=QName::tokenizer().insert(ns, "vpn") == NS_dr3d::LN_vpn;
+ flag&=QName::tokenizer().insert(ns, "vup") == NS_dr3d::LN_vup;
+ flag&=QName::tokenizer().insert(ns, "projection") == NS_dr3d::LN_projection;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace dr3d failed", flag);}
+ void test_rdf(){
+ bool flag=true;
+ static const char ns[] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+ flag&=QName::tokenizer().insert(ns, "RDF") == NS_rdf::LN_RDF;
+ flag&=QName::tokenizer().insert(ns, "ID") == NS_rdf::LN_ID;
+ flag&=QName::tokenizer().insert(ns, "nodeID") == NS_rdf::LN_nodeID;
+ flag&=QName::tokenizer().insert(ns, "about") == NS_rdf::LN_about;
+ flag&=QName::tokenizer().insert(ns, "resource") == NS_rdf::LN_resource;
+ flag&=QName::tokenizer().insert(ns, "datatype") == NS_rdf::LN_datatype;
+ flag&=QName::tokenizer().insert(ns, "parseType") == NS_rdf::LN_parseType;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace rdf failed", flag);}
+ void test_sb12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/supbook";
+ flag&=QName::tokenizer().insert(ns, "supBook") == NS_sb12::LN_supBook;
+ flag&=QName::tokenizer().insert(ns, "sheetNames") == NS_sb12::LN_sheetNames;
+ flag&=QName::tokenizer().insert(ns, "namedLinks") == NS_sb12::LN_namedLinks;
+ flag&=QName::tokenizer().insert(ns, "supSheet") == NS_sb12::LN_supSheet;
+ flag&=QName::tokenizer().insert(ns, "sheetName") == NS_sb12::LN_sheetName;
+ flag&=QName::tokenizer().insert(ns, "xrow") == NS_sb12::LN_xrow;
+ flag&=QName::tokenizer().insert(ns, "xc") == NS_sb12::LN_xc;
+ flag&=QName::tokenizer().insert(ns, "xv") == NS_sb12::LN_xv;
+ flag&=QName::tokenizer().insert(ns, "namedRange") == NS_sb12::LN_namedRange;
+ flag&=QName::tokenizer().insert(ns, "DDELink") == NS_sb12::LN_DDELink;
+ flag&=QName::tokenizer().insert(ns, "OLELink") == NS_sb12::LN_OLELink;
+ flag&=QName::tokenizer().insert(ns, "values") == NS_sb12::LN_values;
+ flag&=QName::tokenizer().insert(ns, "value") == NS_sb12::LN_value;
+ flag&=QName::tokenizer().insert(ns, "val") == NS_sb12::LN_val;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace sb12 failed", flag);}
+ void test_wb12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/workbook";
+ flag&=QName::tokenizer().insert(ns, "supBookSource") == NS_wb12::LN_supBookSource;
+ flag&=QName::tokenizer().insert(ns, "imageRelation") == NS_wb12::LN_imageRelation;
+ flag&=QName::tokenizer().insert(ns, "pivotCache") == NS_wb12::LN_pivotCache;
+ flag&=QName::tokenizer().insert(ns, "docRouteInfo") == NS_wb12::LN_docRouteInfo;
+ flag&=QName::tokenizer().insert(ns, "docRouteOriginator") == NS_wb12::LN_docRouteOriginator;
+ flag&=QName::tokenizer().insert(ns, "docRouteRecipient") == NS_wb12::LN_docRouteRecipient;
+ flag&=QName::tokenizer().insert(ns, "book") == NS_wb12::LN_book;
+ flag&=QName::tokenizer().insert(ns, "fileVersion") == NS_wb12::LN_fileVersion;
+ flag&=QName::tokenizer().insert(ns, "fileSharing") == NS_wb12::LN_fileSharing;
+ flag&=QName::tokenizer().insert(ns, "bookViews") == NS_wb12::LN_bookViews;
+ flag&=QName::tokenizer().insert(ns, "userBookViews") == NS_wb12::LN_userBookViews;
+ flag&=QName::tokenizer().insert(ns, "sheets") == NS_wb12::LN_sheets;
+ flag&=QName::tokenizer().insert(ns, "wbPr") == NS_wb12::LN_wbPr;
+ flag&=QName::tokenizer().insert(ns, "webPub") == NS_wb12::LN_webPub;
+ flag&=QName::tokenizer().insert(ns, "webPubItems") == NS_wb12::LN_webPubItems;
+ flag&=QName::tokenizer().insert(ns, "smartTag") == NS_wb12::LN_smartTag;
+ flag&=QName::tokenizer().insert(ns, "smartTagTypes") == NS_wb12::LN_smartTagTypes;
+ flag&=QName::tokenizer().insert(ns, "fileRecovery") == NS_wb12::LN_fileRecovery;
+ flag&=QName::tokenizer().insert(ns, "calcPr") == NS_wb12::LN_calcPr;
+ flag&=QName::tokenizer().insert(ns, "extRefs") == NS_wb12::LN_extRefs;
+ flag&=QName::tokenizer().insert(ns, "namedRanges") == NS_wb12::LN_namedRanges;
+ flag&=QName::tokenizer().insert(ns, "pivotCaches") == NS_wb12::LN_pivotCaches;
+ flag&=QName::tokenizer().insert(ns, "docRoute") == NS_wb12::LN_docRoute;
+ flag&=QName::tokenizer().insert(ns, "oleSize") == NS_wb12::LN_oleSize;
+ flag&=QName::tokenizer().insert(ns, "bookProtection") == NS_wb12::LN_bookProtection;
+ flag&=QName::tokenizer().insert(ns, "image") == NS_wb12::LN_image;
+ flag&=QName::tokenizer().insert(ns, "fsb") == NS_wb12::LN_fsb;
+ flag&=QName::tokenizer().insert(ns, "bookView") == NS_wb12::LN_bookView;
+ flag&=QName::tokenizer().insert(ns, "userBookView") == NS_wb12::LN_userBookView;
+ flag&=QName::tokenizer().insert(ns, "sheet") == NS_wb12::LN_sheet;
+ flag&=QName::tokenizer().insert(ns, "smartTagType") == NS_wb12::LN_smartTagType;
+ flag&=QName::tokenizer().insert(ns, "namedRange") == NS_wb12::LN_namedRange;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_wb12::LN_name;
+ flag&=QName::tokenizer().insert(ns, "value") == NS_wb12::LN_value;
+ flag&=QName::tokenizer().insert(ns, "comment") == NS_wb12::LN_comment;
+ flag&=QName::tokenizer().insert(ns, "customMenu") == NS_wb12::LN_customMenu;
+ flag&=QName::tokenizer().insert(ns, "description") == NS_wb12::LN_description;
+ flag&=QName::tokenizer().insert(ns, "help") == NS_wb12::LN_help;
+ flag&=QName::tokenizer().insert(ns, "statusBar") == NS_wb12::LN_statusBar;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace wb12 failed", flag);}
+ void test_RowsetSchema(){
+ bool flag=true;
+ static const char ns[] = "#RowsetSchema";
+ flag&=QName::tokenizer().insert(ns, "row") == NS_RowsetSchema::LN_row;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace RowsetSchema failed", flag);}
+ void test_ec12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/externalconnection";
+ flag&=QName::tokenizer().insert(ns, "webqProps") == NS_ec12::LN_webqProps;
+ flag&=QName::tokenizer().insert(ns, "txtWiz") == NS_ec12::LN_txtWiz;
+ flag&=QName::tokenizer().insert(ns, "qParams") == NS_ec12::LN_qParams;
+ flag&=QName::tokenizer().insert(ns, "fsb") == NS_ec12::LN_fsb;
+ flag&=QName::tokenizer().insert(ns, "tables") == NS_ec12::LN_tables;
+ flag&=QName::tokenizer().insert(ns, "qParam") == NS_ec12::LN_qParam;
+ flag&=QName::tokenizer().insert(ns, "m") == NS_ec12::LN_m;
+ flag&=QName::tokenizer().insert(ns, "s") == NS_ec12::LN_s;
+ flag&=QName::tokenizer().insert(ns, "x") == NS_ec12::LN_x;
+ flag&=QName::tokenizer().insert(ns, "fldInfos") == NS_ec12::LN_fldInfos;
+ flag&=QName::tokenizer().insert(ns, "fldInfo") == NS_ec12::LN_fldInfo;
+ flag&=QName::tokenizer().insert(ns, "extConns") == NS_ec12::LN_extConns;
+ flag&=QName::tokenizer().insert(ns, "extConn") == NS_ec12::LN_extConn;
+ flag&=QName::tokenizer().insert(ns, "dbProps") == NS_ec12::LN_dbProps;
+ flag&=QName::tokenizer().insert(ns, "olapProps") == NS_ec12::LN_olapProps;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace ec12 failed", flag);}
+ void test_qt12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/querytable";
+ flag&=QName::tokenizer().insert(ns, "querytable") == NS_qt12::LN_querytable;
+ flag&=QName::tokenizer().insert(ns, "qtRefr") == NS_qt12::LN_qtRefr;
+ flag&=QName::tokenizer().insert(ns, "fsb") == NS_qt12::LN_fsb;
+ flag&=QName::tokenizer().insert(ns, "delNms") == NS_qt12::LN_delNms;
+ flag&=QName::tokenizer().insert(ns, "qtflds") == NS_qt12::LN_qtflds;
+ flag&=QName::tokenizer().insert(ns, "delNm") == NS_qt12::LN_delNm;
+ flag&=QName::tokenizer().insert(ns, "qtfld") == NS_qt12::LN_qtfld;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace qt12 failed", flag);}
+ void test_o12(){
+ bool flag=true;
+ static const char ns[] = "urn:schemas-microsoft-com:office:office";
+ flag&=QName::tokenizer().insert(ns, "DocumentProperties") == NS_o12::LN_DocumentProperties;
+ flag&=QName::tokenizer().insert(ns, "Name") == NS_o12::LN_Name;
+ flag&=QName::tokenizer().insert(ns, "Description") == NS_o12::LN_Description;
+ flag&=QName::tokenizer().insert(ns, "Keywords") == NS_o12::LN_Keywords;
+ flag&=QName::tokenizer().insert(ns, "File") == NS_o12::LN_File;
+ flag&=QName::tokenizer().insert(ns, "MainFile") == NS_o12::LN_MainFile;
+ flag&=QName::tokenizer().insert(ns, "Title") == NS_o12::LN_Title;
+ flag&=QName::tokenizer().insert(ns, "Subject") == NS_o12::LN_Subject;
+ flag&=QName::tokenizer().insert(ns, "Author") == NS_o12::LN_Author;
+ flag&=QName::tokenizer().insert(ns, "LastAuthor") == NS_o12::LN_LastAuthor;
+ flag&=QName::tokenizer().insert(ns, "Revision") == NS_o12::LN_Revision;
+ flag&=QName::tokenizer().insert(ns, "AppName") == NS_o12::LN_AppName;
+ flag&=QName::tokenizer().insert(ns, "TotalTime") == NS_o12::LN_TotalTime;
+ flag&=QName::tokenizer().insert(ns, "LastPrinted") == NS_o12::LN_LastPrinted;
+ flag&=QName::tokenizer().insert(ns, "Created") == NS_o12::LN_Created;
+ flag&=QName::tokenizer().insert(ns, "LastSaved") == NS_o12::LN_LastSaved;
+ flag&=QName::tokenizer().insert(ns, "Pages") == NS_o12::LN_Pages;
+ flag&=QName::tokenizer().insert(ns, "Words") == NS_o12::LN_Words;
+ flag&=QName::tokenizer().insert(ns, "Characters") == NS_o12::LN_Characters;
+ flag&=QName::tokenizer().insert(ns, "Category") == NS_o12::LN_Category;
+ flag&=QName::tokenizer().insert(ns, "PresentationFormat") == NS_o12::LN_PresentationFormat;
+ flag&=QName::tokenizer().insert(ns, "Manager") == NS_o12::LN_Manager;
+ flag&=QName::tokenizer().insert(ns, "Company") == NS_o12::LN_Company;
+ flag&=QName::tokenizer().insert(ns, "Guid") == NS_o12::LN_Guid;
+ flag&=QName::tokenizer().insert(ns, "HyperlinkBase") == NS_o12::LN_HyperlinkBase;
+ flag&=QName::tokenizer().insert(ns, "Bytes") == NS_o12::LN_Bytes;
+ flag&=QName::tokenizer().insert(ns, "Lines") == NS_o12::LN_Lines;
+ flag&=QName::tokenizer().insert(ns, "Paragraphs") == NS_o12::LN_Paragraphs;
+ flag&=QName::tokenizer().insert(ns, "CharactersWithSpaces") == NS_o12::LN_CharactersWithSpaces;
+ flag&=QName::tokenizer().insert(ns, "Version") == NS_o12::LN_Version;
+ flag&=QName::tokenizer().insert(ns, "SmartTagType") == NS_o12::LN_SmartTagType;
+ flag&=QName::tokenizer().insert(ns, "SmartTags") == NS_o12::LN_SmartTags;
+ flag&=QName::tokenizer().insert(ns, "CustomDocumentProperties") == NS_o12::LN_CustomDocumentProperties;
+ flag&=QName::tokenizer().insert(ns, "OfficeDocumentSettings") == NS_o12::LN_OfficeDocumentSettings;
+ flag&=QName::tokenizer().insert(ns, "DownloadComponents") == NS_o12::LN_DownloadComponents;
+ flag&=QName::tokenizer().insert(ns, "LocationOfComponents") == NS_o12::LN_LocationOfComponents;
+ flag&=QName::tokenizer().insert(ns, "shapedefaults") == NS_o12::LN_shapedefaults;
+ flag&=QName::tokenizer().insert(ns, "colormru") == NS_o12::LN_colormru;
+ flag&=QName::tokenizer().insert(ns, "colormenu") == NS_o12::LN_colormenu;
+ flag&=QName::tokenizer().insert(ns, "colors") == NS_o12::LN_colors;
+ flag&=QName::tokenizer().insert(ns, "shapelayout") == NS_o12::LN_shapelayout;
+ flag&=QName::tokenizer().insert(ns, "idmap") == NS_o12::LN_idmap;
+ flag&=QName::tokenizer().insert(ns, "regrouptable") == NS_o12::LN_regrouptable;
+ flag&=QName::tokenizer().insert(ns, "rules") == NS_o12::LN_rules;
+ flag&=QName::tokenizer().insert(ns, "entry") == NS_o12::LN_entry;
+ flag&=QName::tokenizer().insert(ns, "r") == NS_o12::LN_r;
+ flag&=QName::tokenizer().insert(ns, "proxy") == NS_o12::LN_proxy;
+ flag&=QName::tokenizer().insert(ns, "skew") == NS_o12::LN_skew;
+ flag&=QName::tokenizer().insert(ns, "extrusion") == NS_o12::LN_extrusion;
+ flag&=QName::tokenizer().insert(ns, "callout") == NS_o12::LN_callout;
+ flag&=QName::tokenizer().insert(ns, "lock") == NS_o12::LN_lock;
+ flag&=QName::tokenizer().insert(ns, "OLEObject") == NS_o12::LN_OLEObject;
+ flag&=QName::tokenizer().insert(ns, "complex") == NS_o12::LN_complex;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace o12 failed", flag);}
+ void test_s11(){
+ bool flag=true;
+ static const char ns[] = "uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882";
+ flag&=QName::tokenizer().insert(ns, "Schema") == NS_s11::LN_Schema;
+ flag&=QName::tokenizer().insert(ns, "ElementType") == NS_s11::LN_ElementType;
+ flag&=QName::tokenizer().insert(ns, "attribute") == NS_s11::LN_attribute;
+ flag&=QName::tokenizer().insert(ns, "extends") == NS_s11::LN_extends;
+ flag&=QName::tokenizer().insert(ns, "AttributeType") == NS_s11::LN_AttributeType;
+ flag&=QName::tokenizer().insert(ns, "datatype") == NS_s11::LN_datatype;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace s11 failed", flag);}
+ void test_x11(){
+ bool flag=true;
+ static const char ns[] = "urn:schemas-microsoft-com:office:excel";
+ flag&=QName::tokenizer().insert(ns, "CacheDetails") == NS_x11::LN_CacheDetails;
+ flag&=QName::tokenizer().insert(ns, "FieldListTop") == NS_x11::LN_FieldListTop;
+ flag&=QName::tokenizer().insert(ns, "FieldListBottom") == NS_x11::LN_FieldListBottom;
+ flag&=QName::tokenizer().insert(ns, "FieldListRight") == NS_x11::LN_FieldListRight;
+ flag&=QName::tokenizer().insert(ns, "FieldListLeft") == NS_x11::LN_FieldListLeft;
+ flag&=QName::tokenizer().insert(ns, "PivotAxis") == NS_x11::LN_PivotAxis;
+ flag&=QName::tokenizer().insert(ns, "VersionUpdateableMin") == NS_x11::LN_VersionUpdateableMin;
+ flag&=QName::tokenizer().insert(ns, "VersionLastUpdate") == NS_x11::LN_VersionLastUpdate;
+ flag&=QName::tokenizer().insert(ns, "VersionRefreshableMin") == NS_x11::LN_VersionRefreshableMin;
+ flag&=QName::tokenizer().insert(ns, "DefaultVersion") == NS_x11::LN_DefaultVersion;
+ flag&=QName::tokenizer().insert(ns, "PivotField") == NS_x11::LN_PivotField;
+ flag&=QName::tokenizer().insert(ns, "CubeField") == NS_x11::LN_CubeField;
+ flag&=QName::tokenizer().insert(ns, "CalculatedMember") == NS_x11::LN_CalculatedMember;
+ flag&=QName::tokenizer().insert(ns, "MemberName") == NS_x11::LN_MemberName;
+ flag&=QName::tokenizer().insert(ns, "ParentUniqueName") == NS_x11::LN_ParentUniqueName;
+ flag&=QName::tokenizer().insert(ns, "SolveOrder") == NS_x11::LN_SolveOrder;
+ flag&=QName::tokenizer().insert(ns, "Invalid") == NS_x11::LN_Invalid;
+ flag&=QName::tokenizer().insert(ns, "Set") == NS_x11::LN_Set;
+ flag&=QName::tokenizer().insert(ns, "PTLineItems") == NS_x11::LN_PTLineItems;
+ flag&=QName::tokenizer().insert(ns, "PTSource") == NS_x11::LN_PTSource;
+ flag&=QName::tokenizer().insert(ns, "PTFormula") == NS_x11::LN_PTFormula;
+ flag&=QName::tokenizer().insert(ns, "PTFormat") == NS_x11::LN_PTFormat;
+ flag&=QName::tokenizer().insert(ns, "CacheFile") == NS_x11::LN_CacheFile;
+ flag&=QName::tokenizer().insert(ns, "QuerySource") == NS_x11::LN_QuerySource;
+ flag&=QName::tokenizer().insert(ns, "DefaultItem") == NS_x11::LN_DefaultItem;
+ flag&=QName::tokenizer().insert(ns, "AllItemName") == NS_x11::LN_AllItemName;
+ flag&=QName::tokenizer().insert(ns, "Dimension") == NS_x11::LN_Dimension;
+ flag&=QName::tokenizer().insert(ns, "DontShowInFieldList") == NS_x11::LN_DontShowInFieldList;
+ flag&=QName::tokenizer().insert(ns, "Measure") == NS_x11::LN_Measure;
+ flag&=QName::tokenizer().insert(ns, "EnableMultiplePageItems") == NS_x11::LN_EnableMultiplePageItems;
+ flag&=QName::tokenizer().insert(ns, "GroupLevel") == NS_x11::LN_GroupLevel;
+ flag&=QName::tokenizer().insert(ns, "IsGroupLevel") == NS_x11::LN_IsGroupLevel;
+ flag&=QName::tokenizer().insert(ns, "GroupDefinition") == NS_x11::LN_GroupDefinition;
+ flag&=QName::tokenizer().insert(ns, "LengthLevelUniqueName") == NS_x11::LN_LengthLevelUniqueName;
+ flag&=QName::tokenizer().insert(ns, "DisplayIn") == NS_x11::LN_DisplayIn;
+ flag&=QName::tokenizer().insert(ns, "GroupNumber") == NS_x11::LN_GroupNumber;
+ flag&=QName::tokenizer().insert(ns, "ParentName") == NS_x11::LN_ParentName;
+ flag&=QName::tokenizer().insert(ns, "ParentIsOther") == NS_x11::LN_ParentIsOther;
+ flag&=QName::tokenizer().insert(ns, "GroupMember") == NS_x11::LN_GroupMember;
+ flag&=QName::tokenizer().insert(ns, "IsNotFiltered") == NS_x11::LN_IsNotFiltered;
+ flag&=QName::tokenizer().insert(ns, "TotalAllMembers") == NS_x11::LN_TotalAllMembers;
+ flag&=QName::tokenizer().insert(ns, "DetailMaxHeight") == NS_x11::LN_DetailMaxHeight;
+ flag&=QName::tokenizer().insert(ns, "DetailMaxWidth") == NS_x11::LN_DetailMaxWidth;
+ flag&=QName::tokenizer().insert(ns, "NoDetailAutoFit") == NS_x11::LN_NoDetailAutoFit;
+ flag&=QName::tokenizer().insert(ns, "DetailRowHeight") == NS_x11::LN_DetailRowHeight;
+ flag&=QName::tokenizer().insert(ns, "TotalFormat") == NS_x11::LN_TotalFormat;
+ flag&=QName::tokenizer().insert(ns, "MemberFormat") == NS_x11::LN_MemberFormat;
+ flag&=QName::tokenizer().insert(ns, "FieldLabelFormat") == NS_x11::LN_FieldLabelFormat;
+ flag&=QName::tokenizer().insert(ns, "DetailSortOrder") == NS_x11::LN_DetailSortOrder;
+ flag&=QName::tokenizer().insert(ns, "CellsExpanded") == NS_x11::LN_CellsExpanded;
+ flag&=QName::tokenizer().insert(ns, "CellsNotExpanded") == NS_x11::LN_CellsNotExpanded;
+ flag&=QName::tokenizer().insert(ns, "CellsExpandedSeqNum") == NS_x11::LN_CellsExpandedSeqNum;
+ flag&=QName::tokenizer().insert(ns, "Operator") == NS_x11::LN_Operator;
+ flag&=QName::tokenizer().insert(ns, "Alignment") == NS_x11::LN_Alignment;
+ flag&=QName::tokenizer().insert(ns, "CaptionAlignment") == NS_x11::LN_CaptionAlignment;
+ flag&=QName::tokenizer().insert(ns, "FitWidth") == NS_x11::LN_FitWidth;
+ flag&=QName::tokenizer().insert(ns, "FitHeight") == NS_x11::LN_FitHeight;
+ flag&=QName::tokenizer().insert(ns, "LeftToRight") == NS_x11::LN_LeftToRight;
+ flag&=QName::tokenizer().insert(ns, "BlackAndWhite") == NS_x11::LN_BlackAndWhite;
+ flag&=QName::tokenizer().insert(ns, "NoPrinterInfo") == NS_x11::LN_NoPrinterInfo;
+ flag&=QName::tokenizer().insert(ns, "DraftQuality") == NS_x11::LN_DraftQuality;
+ flag&=QName::tokenizer().insert(ns, "CommentsLayout") == NS_x11::LN_CommentsLayout;
+ flag&=QName::tokenizer().insert(ns, "Scale") == NS_x11::LN_Scale;
+ flag&=QName::tokenizer().insert(ns, "PrintErrors") == NS_x11::LN_PrintErrors;
+ flag&=QName::tokenizer().insert(ns, "ValidPrinterInfo") == NS_x11::LN_ValidPrinterInfo;
+ flag&=QName::tokenizer().insert(ns, "PaperSizeIndex") == NS_x11::LN_PaperSizeIndex;
+ flag&=QName::tokenizer().insert(ns, "HorizontalResolution") == NS_x11::LN_HorizontalResolution;
+ flag&=QName::tokenizer().insert(ns, "VerticalResolution") == NS_x11::LN_VerticalResolution;
+ flag&=QName::tokenizer().insert(ns, "Gridlines") == NS_x11::LN_Gridlines;
+ flag&=QName::tokenizer().insert(ns, "NumberOfCopies") == NS_x11::LN_NumberOfCopies;
+ flag&=QName::tokenizer().insert(ns, "RowColHeadings") == NS_x11::LN_RowColHeadings;
+ flag&=QName::tokenizer().insert(ns, "PTRule") == NS_x11::LN_PTRule;
+ flag&=QName::tokenizer().insert(ns, "FormatType") == NS_x11::LN_FormatType;
+ flag&=QName::tokenizer().insert(ns, "IndividualCellBorders") == NS_x11::LN_IndividualCellBorders;
+ flag&=QName::tokenizer().insert(ns, "ItemType") == NS_x11::LN_ItemType;
+ flag&=QName::tokenizer().insert(ns, "BlockTotal") == NS_x11::LN_BlockTotal;
+ flag&=QName::tokenizer().insert(ns, "CountOfSameItems") == NS_x11::LN_CountOfSameItems;
+ flag&=QName::tokenizer().insert(ns, "PTLineItem") == NS_x11::LN_PTLineItem;
+ flag&=QName::tokenizer().insert(ns, "RuleType") == NS_x11::LN_RuleType;
+ flag&=QName::tokenizer().insert(ns, "Rule") == NS_x11::LN_Rule;
+ flag&=QName::tokenizer().insert(ns, "RuleV10") == NS_x11::LN_RuleV10;
+ flag&=QName::tokenizer().insert(ns, "ParseRuleAsV10") == NS_x11::LN_ParseRuleAsV10;
+ flag&=QName::tokenizer().insert(ns, "Area") == NS_x11::LN_Area;
+ flag&=QName::tokenizer().insert(ns, "Outline") == NS_x11::LN_Outline;
+ flag&=QName::tokenizer().insert(ns, "MissingItemsLimit") == NS_x11::LN_MissingItemsLimit;
+ flag&=QName::tokenizer().insert(ns, "VersionLastRefresh") == NS_x11::LN_VersionLastRefresh;
+ flag&=QName::tokenizer().insert(ns, "RefreshName") == NS_x11::LN_RefreshName;
+ flag&=QName::tokenizer().insert(ns, "RefreshDate") == NS_x11::LN_RefreshDate;
+ flag&=QName::tokenizer().insert(ns, "RefreshDateCopy") == NS_x11::LN_RefreshDateCopy;
+ flag&=QName::tokenizer().insert(ns, "ConsolidationReference") == NS_x11::LN_ConsolidationReference;
+ flag&=QName::tokenizer().insert(ns, "NoSaveData") == NS_x11::LN_NoSaveData;
+ flag&=QName::tokenizer().insert(ns, "SourceConsolidation") == NS_x11::LN_SourceConsolidation;
+ flag&=QName::tokenizer().insert(ns, "BackgroundQuery") == NS_x11::LN_BackgroundQuery;
+ flag&=QName::tokenizer().insert(ns, "CubeSource") == NS_x11::LN_CubeSource;
+ flag&=QName::tokenizer().insert(ns, "DisableRefresh") == NS_x11::LN_DisableRefresh;
+ flag&=QName::tokenizer().insert(ns, "HasNoRecords") == NS_x11::LN_HasNoRecords;
+ flag&=QName::tokenizer().insert(ns, "OptimizeCache") == NS_x11::LN_OptimizeCache;
+ flag&=QName::tokenizer().insert(ns, "RefreshOnFileOpen") == NS_x11::LN_RefreshOnFileOpen;
+ flag&=QName::tokenizer().insert(ns, "PublishObject") == NS_x11::LN_PublishObject;
+ flag&=QName::tokenizer().insert(ns, "DivID") == NS_x11::LN_DivID;
+ flag&=QName::tokenizer().insert(ns, "SourceType") == NS_x11::LN_SourceType;
+ flag&=QName::tokenizer().insert(ns, "HtmlType") == NS_x11::LN_HtmlType;
+ flag&=QName::tokenizer().insert(ns, "AutoRepublish") == NS_x11::LN_AutoRepublish;
+ flag&=QName::tokenizer().insert(ns, "QueryType") == NS_x11::LN_QueryType;
+ flag&=QName::tokenizer().insert(ns, "CommandText") == NS_x11::LN_CommandText;
+ flag&=QName::tokenizer().insert(ns, "CommandType") == NS_x11::LN_CommandType;
+ flag&=QName::tokenizer().insert(ns, "Maintain") == NS_x11::LN_Maintain;
+ flag&=QName::tokenizer().insert(ns, "Connection") == NS_x11::LN_Connection;
+ flag&=QName::tokenizer().insert(ns, "Parameter") == NS_x11::LN_Parameter;
+ flag&=QName::tokenizer().insert(ns, "CommandTextOrignal") == NS_x11::LN_CommandTextOrignal;
+ flag&=QName::tokenizer().insert(ns, "SourceConnectionFile") == NS_x11::LN_SourceConnectionFile;
+ flag&=QName::tokenizer().insert(ns, "SourceDataFile") == NS_x11::LN_SourceDataFile;
+ flag&=QName::tokenizer().insert(ns, "RobustConnect") == NS_x11::LN_RobustConnect;
+ flag&=QName::tokenizer().insert(ns, "RefreshTimeSpan") == NS_x11::LN_RefreshTimeSpan;
+ flag&=QName::tokenizer().insert(ns, "LocalConnection") == NS_x11::LN_LocalConnection;
+ flag&=QName::tokenizer().insert(ns, "NoRefreshCache") == NS_x11::LN_NoRefreshCache;
+ flag&=QName::tokenizer().insert(ns, "UseLocalConnection") == NS_x11::LN_UseLocalConnection;
+ flag&=QName::tokenizer().insert(ns, "VersionLastEdit") == NS_x11::LN_VersionLastEdit;
+ flag&=QName::tokenizer().insert(ns, "DoNotJoinDelimiters") == NS_x11::LN_DoNotJoinDelimiters;
+ flag&=QName::tokenizer().insert(ns, "NoTextToColumns") == NS_x11::LN_NoTextToColumns;
+ flag&=QName::tokenizer().insert(ns, "DisableDateRecognition") == NS_x11::LN_DisableDateRecognition;
+ flag&=QName::tokenizer().insert(ns, "EnableRedirections") == NS_x11::LN_EnableRedirections;
+ flag&=QName::tokenizer().insert(ns, "EditWebPage") == NS_x11::LN_EditWebPage;
+ flag&=QName::tokenizer().insert(ns, "RefreshedInXl9") == NS_x11::LN_RefreshedInXl9;
+ flag&=QName::tokenizer().insert(ns, "EntirePage") == NS_x11::LN_EntirePage;
+ flag&=QName::tokenizer().insert(ns, "HTMLFormat") == NS_x11::LN_HTMLFormat;
+ flag&=QName::tokenizer().insert(ns, "URLString") == NS_x11::LN_URLString;
+ flag&=QName::tokenizer().insert(ns, "WebPostString") == NS_x11::LN_WebPostString;
+ flag&=QName::tokenizer().insert(ns, "RefreshInfo") == NS_x11::LN_RefreshInfo;
+ flag&=QName::tokenizer().insert(ns, "TextWizardSettings") == NS_x11::LN_TextWizardSettings;
+ flag&=QName::tokenizer().insert(ns, "HTMLTables") == NS_x11::LN_HTMLTables;
+ flag&=QName::tokenizer().insert(ns, "UseSameSettings") == NS_x11::LN_UseSameSettings;
+ flag&=QName::tokenizer().insert(ns, "Query97") == NS_x11::LN_Query97;
+ flag&=QName::tokenizer().insert(ns, "DoNotPromptForFile") == NS_x11::LN_DoNotPromptForFile;
+ flag&=QName::tokenizer().insert(ns, "AutoFormatWidth") == NS_x11::LN_AutoFormatWidth;
+ flag&=QName::tokenizer().insert(ns, "DisableEdit") == NS_x11::LN_DisableEdit;
+ flag&=QName::tokenizer().insert(ns, "Filled") == NS_x11::LN_Filled;
+ flag&=QName::tokenizer().insert(ns, "InsertEntireRows") == NS_x11::LN_InsertEntireRows;
+ flag&=QName::tokenizer().insert(ns, "NewAsync") == NS_x11::LN_NewAsync;
+ flag&=QName::tokenizer().insert(ns, "NoAutofit") == NS_x11::LN_NoAutofit;
+ flag&=QName::tokenizer().insert(ns, "NoTitles") == NS_x11::LN_NoTitles;
+ flag&=QName::tokenizer().insert(ns, "OverwriteCells") == NS_x11::LN_OverwriteCells;
+ flag&=QName::tokenizer().insert(ns, "Synchronous") == NS_x11::LN_Synchronous;
+ flag&=QName::tokenizer().insert(ns, "NextId") == NS_x11::LN_NextId;
+ flag&=QName::tokenizer().insert(ns, "ColumnInfo") == NS_x11::LN_ColumnInfo;
+ flag&=QName::tokenizer().insert(ns, "DoNotPersist") == NS_x11::LN_DoNotPersist;
+ flag&=QName::tokenizer().insert(ns, "DoNotPersistSort") == NS_x11::LN_DoNotPersistSort;
+ flag&=QName::tokenizer().insert(ns, "DoNotPersstAF") == NS_x11::LN_DoNotPersstAF;
+ flag&=QName::tokenizer().insert(ns, "Sort") == NS_x11::LN_Sort;
+ flag&=QName::tokenizer().insert(ns, "CaseSensitive") == NS_x11::LN_CaseSensitive;
+ flag&=QName::tokenizer().insert(ns, "FuturePersist") == NS_x11::LN_FuturePersist;
+ flag&=QName::tokenizer().insert(ns, "HeaderRow") == NS_x11::LN_HeaderRow;
+ flag&=QName::tokenizer().insert(ns, "IdWrapped") == NS_x11::LN_IdWrapped;
+ flag&=QName::tokenizer().insert(ns, "AlertVersion") == NS_x11::LN_AlertVersion;
+ flag&=QName::tokenizer().insert(ns, "SortOrder") == NS_x11::LN_SortOrder;
+ flag&=QName::tokenizer().insert(ns, "ExtraLeftColumns") == NS_x11::LN_ExtraLeftColumns;
+ flag&=QName::tokenizer().insert(ns, "ExtraRightColumns") == NS_x11::LN_ExtraRightColumns;
+ flag&=QName::tokenizer().insert(ns, "DeletedTitle") == NS_x11::LN_DeletedTitle;
+ flag&=QName::tokenizer().insert(ns, "NoToggleDataHeader") == NS_x11::LN_NoToggleDataHeader;
+ flag&=QName::tokenizer().insert(ns, "AlternateMethod") == NS_x11::LN_AlternateMethod;
+ flag&=QName::tokenizer().insert(ns, "NoAutoPage") == NS_x11::LN_NoAutoPage;
+ flag&=QName::tokenizer().insert(ns, "SheetName") == NS_x11::LN_SheetName;
+ flag&=QName::tokenizer().insert(ns, "ExternName") == NS_x11::LN_ExternName;
+ flag&=QName::tokenizer().insert(ns, "Xct") == NS_x11::LN_Xct;
+ flag&=QName::tokenizer().insert(ns, "FormatSettings") == NS_x11::LN_FormatSettings;
+ flag&=QName::tokenizer().insert(ns, "Delimiters") == NS_x11::LN_Delimiters;
+ flag&=QName::tokenizer().insert(ns, "Comma") == NS_x11::LN_Comma;
+ flag&=QName::tokenizer().insert(ns, "Consecutive") == NS_x11::LN_Consecutive;
+ flag&=QName::tokenizer().insert(ns, "Custom") == NS_x11::LN_Custom;
+ flag&=QName::tokenizer().insert(ns, "SemiColon") == NS_x11::LN_SemiColon;
+ flag&=QName::tokenizer().insert(ns, "Space") == NS_x11::LN_Space;
+ flag&=QName::tokenizer().insert(ns, "Tab") == NS_x11::LN_Tab;
+ flag&=QName::tokenizer().insert(ns, "TextQualifier") == NS_x11::LN_TextQualifier;
+ flag&=QName::tokenizer().insert(ns, "StartRow") == NS_x11::LN_StartRow;
+ flag&=QName::tokenizer().insert(ns, "Decimal") == NS_x11::LN_Decimal;
+ flag&=QName::tokenizer().insert(ns, "ThousandSeparator") == NS_x11::LN_ThousandSeparator;
+ flag&=QName::tokenizer().insert(ns, "FitToPage") == NS_x11::LN_FitToPage;
+ flag&=QName::tokenizer().insert(ns, "DoNotDisplayColHeaders") == NS_x11::LN_DoNotDisplayColHeaders;
+ flag&=QName::tokenizer().insert(ns, "DoNotDisplayRowHeaders") == NS_x11::LN_DoNotDisplayRowHeaders;
+ flag&=QName::tokenizer().insert(ns, "ViewableRange") == NS_x11::LN_ViewableRange;
+ flag&=QName::tokenizer().insert(ns, "GridlineColor") == NS_x11::LN_GridlineColor;
+ flag&=QName::tokenizer().insert(ns, "ExcelWorksheetType") == NS_x11::LN_ExcelWorksheetType;
+ flag&=QName::tokenizer().insert(ns, "IntlMacro") == NS_x11::LN_IntlMacro;
+ flag&=QName::tokenizer().insert(ns, "Unsynced") == NS_x11::LN_Unsynced;
+ flag&=QName::tokenizer().insert(ns, "Selected") == NS_x11::LN_Selected;
+ flag&=QName::tokenizer().insert(ns, "CodeName") == NS_x11::LN_CodeName;
+ flag&=QName::tokenizer().insert(ns, "PageSetup") == NS_x11::LN_PageSetup;
+ flag&=QName::tokenizer().insert(ns, "DisplayPageBreak") == NS_x11::LN_DisplayPageBreak;
+ flag&=QName::tokenizer().insert(ns, "TransitionExpressionEvaluation") == NS_x11::LN_TransitionExpressionEvaluation;
+ flag&=QName::tokenizer().insert(ns, "TransitionFormulaEntry") == NS_x11::LN_TransitionFormulaEntry;
+ flag&=QName::tokenizer().insert(ns, "Print") == NS_x11::LN_Print;
+ flag&=QName::tokenizer().insert(ns, "Zoom") == NS_x11::LN_Zoom;
+ flag&=QName::tokenizer().insert(ns, "PageBreakZoom") == NS_x11::LN_PageBreakZoom;
+ flag&=QName::tokenizer().insert(ns, "ShowPageBreakZoom") == NS_x11::LN_ShowPageBreakZoom;
+ flag&=QName::tokenizer().insert(ns, "DefaultRowHeight") == NS_x11::LN_DefaultRowHeight;
+ flag&=QName::tokenizer().insert(ns, "DefaultColumnWidth") == NS_x11::LN_DefaultColumnWidth;
+ flag&=QName::tokenizer().insert(ns, "StandardWidth") == NS_x11::LN_StandardWidth;
+ flag&=QName::tokenizer().insert(ns, "Visible") == NS_x11::LN_Visible;
+ flag&=QName::tokenizer().insert(ns, "LeftColumnVisible") == NS_x11::LN_LeftColumnVisible;
+ flag&=QName::tokenizer().insert(ns, "DisplayRightToLeft") == NS_x11::LN_DisplayRightToLeft;
+ flag&=QName::tokenizer().insert(ns, "GridlineColorIndex") == NS_x11::LN_GridlineColorIndex;
+ flag&=QName::tokenizer().insert(ns, "DisplayFormulas") == NS_x11::LN_DisplayFormulas;
+ flag&=QName::tokenizer().insert(ns, "DoNotDisplayGridlines") == NS_x11::LN_DoNotDisplayGridlines;
+ flag&=QName::tokenizer().insert(ns, "DoNotDisplayHeadings") == NS_x11::LN_DoNotDisplayHeadings;
+ flag&=QName::tokenizer().insert(ns, "DoNotDisplayOutline") == NS_x11::LN_DoNotDisplayOutline;
+ flag&=QName::tokenizer().insert(ns, "ApplyAutomaticOutlineStyles") == NS_x11::LN_ApplyAutomaticOutlineStyles;
+ flag&=QName::tokenizer().insert(ns, "NoSummaryRowsBelowDetail") == NS_x11::LN_NoSummaryRowsBelowDetail;
+ flag&=QName::tokenizer().insert(ns, "NoSummaryColumnsRightDetail") == NS_x11::LN_NoSummaryColumnsRightDetail;
+ flag&=QName::tokenizer().insert(ns, "DoNotDisplayZeros") == NS_x11::LN_DoNotDisplayZeros;
+ flag&=QName::tokenizer().insert(ns, "ActiveColumn") == NS_x11::LN_ActiveColumn;
+ flag&=QName::tokenizer().insert(ns, "FilterOn") == NS_x11::LN_FilterOn;
+ flag&=QName::tokenizer().insert(ns, "TopRowVisible") == NS_x11::LN_TopRowVisible;
+ flag&=QName::tokenizer().insert(ns, "TopRowBottomPane") == NS_x11::LN_TopRowBottomPane;
+ flag&=QName::tokenizer().insert(ns, "LeftColumnRightPane") == NS_x11::LN_LeftColumnRightPane;
+ flag&=QName::tokenizer().insert(ns, "ActivePane") == NS_x11::LN_ActivePane;
+ flag&=QName::tokenizer().insert(ns, "SplitHorizontal") == NS_x11::LN_SplitHorizontal;
+ flag&=QName::tokenizer().insert(ns, "SplitVertical") == NS_x11::LN_SplitVertical;
+ flag&=QName::tokenizer().insert(ns, "FreezePanes") == NS_x11::LN_FreezePanes;
+ flag&=QName::tokenizer().insert(ns, "FrozenNoSplit") == NS_x11::LN_FrozenNoSplit;
+ flag&=QName::tokenizer().insert(ns, "TabColorIndex") == NS_x11::LN_TabColorIndex;
+ flag&=QName::tokenizer().insert(ns, "Panes") == NS_x11::LN_Panes;
+ flag&=QName::tokenizer().insert(ns, "ProtectContents") == NS_x11::LN_ProtectContents;
+ flag&=QName::tokenizer().insert(ns, "ProtectObjects") == NS_x11::LN_ProtectObjects;
+ flag&=QName::tokenizer().insert(ns, "ProtectScenarios") == NS_x11::LN_ProtectScenarios;
+ flag&=QName::tokenizer().insert(ns, "EnableSelection") == NS_x11::LN_EnableSelection;
+ flag&=QName::tokenizer().insert(ns, "AllowFormatCells") == NS_x11::LN_AllowFormatCells;
+ flag&=QName::tokenizer().insert(ns, "AllowSizeCols") == NS_x11::LN_AllowSizeCols;
+ flag&=QName::tokenizer().insert(ns, "AllowSizeRows") == NS_x11::LN_AllowSizeRows;
+ flag&=QName::tokenizer().insert(ns, "AllowInsertCols") == NS_x11::LN_AllowInsertCols;
+ flag&=QName::tokenizer().insert(ns, "AllowInsertRows") == NS_x11::LN_AllowInsertRows;
+ flag&=QName::tokenizer().insert(ns, "AllowInsertHyperlinks") == NS_x11::LN_AllowInsertHyperlinks;
+ flag&=QName::tokenizer().insert(ns, "AllowDeleteCols") == NS_x11::LN_AllowDeleteCols;
+ flag&=QName::tokenizer().insert(ns, "AllowDeleteRows") == NS_x11::LN_AllowDeleteRows;
+ flag&=QName::tokenizer().insert(ns, "AllowSort") == NS_x11::LN_AllowSort;
+ flag&=QName::tokenizer().insert(ns, "AllowFilter") == NS_x11::LN_AllowFilter;
+ flag&=QName::tokenizer().insert(ns, "AllowUsePivotTables") == NS_x11::LN_AllowUsePivotTables;
+ flag&=QName::tokenizer().insert(ns, "SpaceAbove") == NS_x11::LN_SpaceAbove;
+ flag&=QName::tokenizer().insert(ns, "SpaceBelow") == NS_x11::LN_SpaceBelow;
+ flag&=QName::tokenizer().insert(ns, "ZeroHeight") == NS_x11::LN_ZeroHeight;
+ flag&=QName::tokenizer().insert(ns, "Layout") == NS_x11::LN_Layout;
+ flag&=QName::tokenizer().insert(ns, "Header") == NS_x11::LN_Header;
+ flag&=QName::tokenizer().insert(ns, "Footer") == NS_x11::LN_Footer;
+ flag&=QName::tokenizer().insert(ns, "PageMargins") == NS_x11::LN_PageMargins;
+ flag&=QName::tokenizer().insert(ns, "Count") == NS_x11::LN_Count;
+ flag&=QName::tokenizer().insert(ns, "SheetIndex") == NS_x11::LN_SheetIndex;
+ flag&=QName::tokenizer().insert(ns, "Crn") == NS_x11::LN_Crn;
+ flag&=QName::tokenizer().insert(ns, "Moper") == NS_x11::LN_Moper;
+ flag&=QName::tokenizer().insert(ns, "ExcelName") == NS_x11::LN_ExcelName;
+ flag&=QName::tokenizer().insert(ns, "FunctionGroup") == NS_x11::LN_FunctionGroup;
+ flag&=QName::tokenizer().insert(ns, "FunctionGroupIndex") == NS_x11::LN_FunctionGroupIndex;
+ flag&=QName::tokenizer().insert(ns, "KeyboardShortcut") == NS_x11::LN_KeyboardShortcut;
+ flag&=QName::tokenizer().insert(ns, "Macro") == NS_x11::LN_Macro;
+ flag&=QName::tokenizer().insert(ns, "phonetictext") == NS_x11::LN_phonetictext;
+ flag&=QName::tokenizer().insert(ns, "AutoFilterColumn") == NS_x11::LN_AutoFilterColumn;
+ flag&=QName::tokenizer().insert(ns, "WorkbookOptions") == NS_x11::LN_WorkbookOptions;
+ flag&=QName::tokenizer().insert(ns, "MoveAfterReturn") == NS_x11::LN_MoveAfterReturn;
+ flag&=QName::tokenizer().insert(ns, "ParameterValue") == NS_x11::LN_ParameterValue;
+ flag&=QName::tokenizer().insert(ns, "PromptString") == NS_x11::LN_PromptString;
+ flag&=QName::tokenizer().insert(ns, "NonDefaultName") == NS_x11::LN_NonDefaultName;
+ flag&=QName::tokenizer().insert(ns, "SQLType") == NS_x11::LN_SQLType;
+ flag&=QName::tokenizer().insert(ns, "RefreshOnChange") == NS_x11::LN_RefreshOnChange;
+ flag&=QName::tokenizer().insert(ns, "DisplayEmptyMembers") == NS_x11::LN_DisplayEmptyMembers;
+ flag&=QName::tokenizer().insert(ns, "Label") == NS_x11::LN_Label;
+ flag&=QName::tokenizer().insert(ns, "Caption") == NS_x11::LN_Caption;
+ flag&=QName::tokenizer().insert(ns, "NotVisible") == NS_x11::LN_NotVisible;
+ flag&=QName::tokenizer().insert(ns, "Orientation") == NS_x11::LN_Orientation;
+ flag&=QName::tokenizer().insert(ns, "PivotCache") == NS_x11::LN_PivotCache;
+ flag&=QName::tokenizer().insert(ns, "CacheIndex") == NS_x11::LN_CacheIndex;
+ flag&=QName::tokenizer().insert(ns, "PTPivotData") == NS_x11::LN_PTPivotData;
+ flag&=QName::tokenizer().insert(ns, "InvertedRowMember") == NS_x11::LN_InvertedRowMember;
+ flag&=QName::tokenizer().insert(ns, "InvertedColumnMember") == NS_x11::LN_InvertedColumnMember;
+ flag&=QName::tokenizer().insert(ns, "LeafRowMember") == NS_x11::LN_LeafRowMember;
+ flag&=QName::tokenizer().insert(ns, "LeafColumnMember") == NS_x11::LN_LeafColumnMember;
+ flag&=QName::tokenizer().insert(ns, "Item") == NS_x11::LN_Item;
+ flag&=QName::tokenizer().insert(ns, "SourceName") == NS_x11::LN_SourceName;
+ flag&=QName::tokenizer().insert(ns, "BoundField") == NS_x11::LN_BoundField;
+ flag&=QName::tokenizer().insert(ns, "DataType") == NS_x11::LN_DataType;
+ flag&=QName::tokenizer().insert(ns, "FilterCaption") == NS_x11::LN_FilterCaption;
+ flag&=QName::tokenizer().insert(ns, "PLDataOrientation") == NS_x11::LN_PLDataOrientation;
+ flag&=QName::tokenizer().insert(ns, "PLPosition") == NS_x11::LN_PLPosition;
+ flag&=QName::tokenizer().insert(ns, "Position") == NS_x11::LN_Position;
+ flag&=QName::tokenizer().insert(ns, "ShowAllItems") == NS_x11::LN_ShowAllItems;
+ flag&=QName::tokenizer().insert(ns, "NumberFormat") == NS_x11::LN_NumberFormat;
+ flag&=QName::tokenizer().insert(ns, "CurrentPage") == NS_x11::LN_CurrentPage;
+ flag&=QName::tokenizer().insert(ns, "NewItemsHidden") == NS_x11::LN_NewItemsHidden;
+ flag&=QName::tokenizer().insert(ns, "DataTable") == NS_x11::LN_DataTable;
+ flag&=QName::tokenizer().insert(ns, "Subtotal") == NS_x11::LN_Subtotal;
+ flag&=QName::tokenizer().insert(ns, "Range") == NS_x11::LN_Range;
+ flag&=QName::tokenizer().insert(ns, "PLSubtotal") == NS_x11::LN_PLSubtotal;
+ flag&=QName::tokenizer().insert(ns, "RowInputCell") == NS_x11::LN_RowInputCell;
+ flag&=QName::tokenizer().insert(ns, "DetailFormat") == NS_x11::LN_DetailFormat;
+ flag&=QName::tokenizer().insert(ns, "ColumnInputCell") == NS_x11::LN_ColumnInputCell;
+ flag&=QName::tokenizer().insert(ns, "SubtotalFormat") == NS_x11::LN_SubtotalFormat;
+ flag&=QName::tokenizer().insert(ns, "ExcelWorkbook") == NS_x11::LN_ExcelWorkbook;
+ flag&=QName::tokenizer().insert(ns, "DetailWidth") == NS_x11::LN_DetailWidth;
+ flag&=QName::tokenizer().insert(ns, "PublishObjects") == NS_x11::LN_PublishObjects;
+ flag&=QName::tokenizer().insert(ns, "GroupedWidth") == NS_x11::LN_GroupedWidth;
+ flag&=QName::tokenizer().insert(ns, "SupBook") == NS_x11::LN_SupBook;
+ flag&=QName::tokenizer().insert(ns, "TotalWidth") == NS_x11::LN_TotalWidth;
+ flag&=QName::tokenizer().insert(ns, "SelectedSheets") == NS_x11::LN_SelectedSheets;
+ flag&=QName::tokenizer().insert(ns, "PivotItem") == NS_x11::LN_PivotItem;
+ flag&=QName::tokenizer().insert(ns, "DataField") == NS_x11::LN_DataField;
+ flag&=QName::tokenizer().insert(ns, "WindowHidden") == NS_x11::LN_WindowHidden;
+ flag&=QName::tokenizer().insert(ns, "MapChildItems") == NS_x11::LN_MapChildItems;
+ flag&=QName::tokenizer().insert(ns, "HideHorizontalScrollBar") == NS_x11::LN_HideHorizontalScrollBar;
+ flag&=QName::tokenizer().insert(ns, "AutoShowCount") == NS_x11::LN_AutoShowCount;
+ flag&=QName::tokenizer().insert(ns, "HideVerticalScrollBar") == NS_x11::LN_HideVerticalScrollBar;
+ flag&=QName::tokenizer().insert(ns, "AutoShowField") == NS_x11::LN_AutoShowField;
+ flag&=QName::tokenizer().insert(ns, "AutoShowRange") == NS_x11::LN_AutoShowRange;
+ flag&=QName::tokenizer().insert(ns, "HideWorkbookTabs") == NS_x11::LN_HideWorkbookTabs;
+ flag&=QName::tokenizer().insert(ns, "AutoShowType") == NS_x11::LN_AutoShowType;
+ flag&=QName::tokenizer().insert(ns, "WindowHeight") == NS_x11::LN_WindowHeight;
+ flag&=QName::tokenizer().insert(ns, "WindowWidth") == NS_x11::LN_WindowWidth;
+ flag&=QName::tokenizer().insert(ns, "AutoSortOrder") == NS_x11::LN_AutoSortOrder;
+ flag&=QName::tokenizer().insert(ns, "WindowTopX") == NS_x11::LN_WindowTopX;
+ flag&=QName::tokenizer().insert(ns, "AutoSortField") == NS_x11::LN_AutoSortField;
+ flag&=QName::tokenizer().insert(ns, "WindowTopY") == NS_x11::LN_WindowTopY;
+ flag&=QName::tokenizer().insert(ns, "BaseField") == NS_x11::LN_BaseField;
+ flag&=QName::tokenizer().insert(ns, "BaseItem") == NS_x11::LN_BaseItem;
+ flag&=QName::tokenizer().insert(ns, "ActiveSheet") == NS_x11::LN_ActiveSheet;
+ flag&=QName::tokenizer().insert(ns, "ActiveChart") == NS_x11::LN_ActiveChart;
+ flag&=QName::tokenizer().insert(ns, "BlankLineAfterItems") == NS_x11::LN_BlankLineAfterItems;
+ flag&=QName::tokenizer().insert(ns, "FirstVisibleSheet") == NS_x11::LN_FirstVisibleSheet;
+ flag&=QName::tokenizer().insert(ns, "CantGetUniqueItems") == NS_x11::LN_CantGetUniqueItems;
+ flag&=QName::tokenizer().insert(ns, "GroupBy") == NS_x11::LN_GroupBy;
+ flag&=QName::tokenizer().insert(ns, "HidePivotTableFieldList") == NS_x11::LN_HidePivotTableFieldList;
+ flag&=QName::tokenizer().insert(ns, "GroupStart") == NS_x11::LN_GroupStart;
+ flag&=QName::tokenizer().insert(ns, "ProtectStructure") == NS_x11::LN_ProtectStructure;
+ flag&=QName::tokenizer().insert(ns, "GroupEnd") == NS_x11::LN_GroupEnd;
+ flag&=QName::tokenizer().insert(ns, "ProtectWindows") == NS_x11::LN_ProtectWindows;
+ flag&=QName::tokenizer().insert(ns, "GroupStartAuto") == NS_x11::LN_GroupStartAuto;
+ flag&=QName::tokenizer().insert(ns, "DisplayInkNotes") == NS_x11::LN_DisplayInkNotes;
+ flag&=QName::tokenizer().insert(ns, "GroupEndAuto") == NS_x11::LN_GroupEndAuto;
+ flag&=QName::tokenizer().insert(ns, "GroupType") == NS_x11::LN_GroupType;
+ flag&=QName::tokenizer().insert(ns, "EmbedSaveSmartTags") == NS_x11::LN_EmbedSaveSmartTags;
+ flag&=QName::tokenizer().insert(ns, "LayoutPageBreak") == NS_x11::LN_LayoutPageBreak;
+ flag&=QName::tokenizer().insert(ns, "FutureVer") == NS_x11::LN_FutureVer;
+ flag&=QName::tokenizer().insert(ns, "TabRatio") == NS_x11::LN_TabRatio;
+ flag&=QName::tokenizer().insert(ns, "ParentField") == NS_x11::LN_ParentField;
+ flag&=QName::tokenizer().insert(ns, "Function") == NS_x11::LN_Function;
+ flag&=QName::tokenizer().insert(ns, "WindowIconic") == NS_x11::LN_WindowIconic;
+ flag&=QName::tokenizer().insert(ns, "LayoutForm") == NS_x11::LN_LayoutForm;
+ flag&=QName::tokenizer().insert(ns, "DisplayDrawingObjects") == NS_x11::LN_DisplayDrawingObjects;
+ flag&=QName::tokenizer().insert(ns, "LayoutSubtotalLocation") == NS_x11::LN_LayoutSubtotalLocation;
+ flag&=QName::tokenizer().insert(ns, "CreateBackup") == NS_x11::LN_CreateBackup;
+ flag&=QName::tokenizer().insert(ns, "NoDragToRow") == NS_x11::LN_NoDragToRow;
+ flag&=QName::tokenizer().insert(ns, "Calculation") == NS_x11::LN_Calculation;
+ flag&=QName::tokenizer().insert(ns, "NoDragToColumn") == NS_x11::LN_NoDragToColumn;
+ flag&=QName::tokenizer().insert(ns, "DoNotCalculateBeforeSave") == NS_x11::LN_DoNotCalculateBeforeSave;
+ flag&=QName::tokenizer().insert(ns, "NoDragToData") == NS_x11::LN_NoDragToData;
+ flag&=QName::tokenizer().insert(ns, "Date1904") == NS_x11::LN_Date1904;
+ flag&=QName::tokenizer().insert(ns, "NoDragToHide") == NS_x11::LN_NoDragToHide;
+ flag&=QName::tokenizer().insert(ns, "RefModeR1C1") == NS_x11::LN_RefModeR1C1;
+ flag&=QName::tokenizer().insert(ns, "NoDragToPage") == NS_x11::LN_NoDragToPage;
+ flag&=QName::tokenizer().insert(ns, "Iteration") == NS_x11::LN_Iteration;
+ flag&=QName::tokenizer().insert(ns, "MemberProperty") == NS_x11::LN_MemberProperty;
+ flag&=QName::tokenizer().insert(ns, "MaxIterations") == NS_x11::LN_MaxIterations;
+ flag&=QName::tokenizer().insert(ns, "MaxChange") == NS_x11::LN_MaxChange;
+ flag&=QName::tokenizer().insert(ns, "MemberPropertiesOrder") == NS_x11::LN_MemberPropertiesOrder;
+ flag&=QName::tokenizer().insert(ns, "HideDropDowns") == NS_x11::LN_HideDropDowns;
+ flag&=QName::tokenizer().insert(ns, "PrecisionAsDisplayed") == NS_x11::LN_PrecisionAsDisplayed;
+ flag&=QName::tokenizer().insert(ns, "DrilledLevel") == NS_x11::LN_DrilledLevel;
+ flag&=QName::tokenizer().insert(ns, "DoNotSaveLinkValues") == NS_x11::LN_DoNotSaveLinkValues;
+ flag&=QName::tokenizer().insert(ns, "ServerSortOrder") == NS_x11::LN_ServerSortOrder;
+ flag&=QName::tokenizer().insert(ns, "NoAutoRecover") == NS_x11::LN_NoAutoRecover;
+ flag&=QName::tokenizer().insert(ns, "IsMemberProperty") == NS_x11::LN_IsMemberProperty;
+ flag&=QName::tokenizer().insert(ns, "AcceptLabelsInFormulas") == NS_x11::LN_AcceptLabelsInFormulas;
+ flag&=QName::tokenizer().insert(ns, "FilterMember") == NS_x11::LN_FilterMember;
+ flag&=QName::tokenizer().insert(ns, "Uncalced") == NS_x11::LN_Uncalced;
+ flag&=QName::tokenizer().insert(ns, "Name") == NS_x11::LN_Name;
+ flag&=QName::tokenizer().insert(ns, "UniqueName") == NS_x11::LN_UniqueName;
+ flag&=QName::tokenizer().insert(ns, "Level") == NS_x11::LN_Level;
+ flag&=QName::tokenizer().insert(ns, "DataValidation") == NS_x11::LN_DataValidation;
+ flag&=QName::tokenizer().insert(ns, "ServerBased") == NS_x11::LN_ServerBased;
+ flag&=QName::tokenizer().insert(ns, "AutoFilter") == NS_x11::LN_AutoFilter;
+ flag&=QName::tokenizer().insert(ns, "SubtotalName") == NS_x11::LN_SubtotalName;
+ flag&=QName::tokenizer().insert(ns, "PLTPivotItem") == NS_x11::LN_PLTPivotItem;
+ flag&=QName::tokenizer().insert(ns, "AutoFilterCondition") == NS_x11::LN_AutoFilterCondition;
+ flag&=QName::tokenizer().insert(ns, "FormulaV10") == NS_x11::LN_FormulaV10;
+ flag&=QName::tokenizer().insert(ns, "AutoFilterOr") == NS_x11::LN_AutoFilterOr;
+ flag&=QName::tokenizer().insert(ns, "ParseFormulaAsV10") == NS_x11::LN_ParseFormulaAsV10;
+ flag&=QName::tokenizer().insert(ns, "AutoFilterAnd") == NS_x11::LN_AutoFilterAnd;
+ flag&=QName::tokenizer().insert(ns, "PLCaption") == NS_x11::LN_PLCaption;
+ flag&=QName::tokenizer().insert(ns, "Sorting") == NS_x11::LN_Sorting;
+ flag&=QName::tokenizer().insert(ns, "PLGroupType") == NS_x11::LN_PLGroupType;
+ flag&=QName::tokenizer().insert(ns, "ConditionalFormatting") == NS_x11::LN_ConditionalFormatting;
+ flag&=QName::tokenizer().insert(ns, "PLName") == NS_x11::LN_PLName;
+ flag&=QName::tokenizer().insert(ns, "QueryTable") == NS_x11::LN_QueryTable;
+ flag&=QName::tokenizer().insert(ns, "SourceHierarchy") == NS_x11::LN_SourceHierarchy;
+ flag&=QName::tokenizer().insert(ns, "PivotTable") == NS_x11::LN_PivotTable;
+ flag&=QName::tokenizer().insert(ns, "MemberPropertyParent") == NS_x11::LN_MemberPropertyParent;
+ flag&=QName::tokenizer().insert(ns, "WorksheetSource") == NS_x11::LN_WorksheetSource;
+ flag&=QName::tokenizer().insert(ns, "SourceHierarchyLevel") == NS_x11::LN_SourceHierarchyLevel;
+ flag&=QName::tokenizer().insert(ns, "WorksheetOptions") == NS_x11::LN_WorksheetOptions;
+ flag&=QName::tokenizer().insert(ns, "Watches") == NS_x11::LN_Watches;
+ flag&=QName::tokenizer().insert(ns, "TotalAlignment") == NS_x11::LN_TotalAlignment;
+ flag&=QName::tokenizer().insert(ns, "Watch") == NS_x11::LN_Watch;
+ flag&=QName::tokenizer().insert(ns, "Source") == NS_x11::LN_Source;
+ flag&=QName::tokenizer().insert(ns, "TotalCaptionAlignment") == NS_x11::LN_TotalCaptionAlignment;
+ flag&=QName::tokenizer().insert(ns, "PageBreaks") == NS_x11::LN_PageBreaks;
+ flag&=QName::tokenizer().insert(ns, "FormulaIndex") == NS_x11::LN_FormulaIndex;
+ flag&=QName::tokenizer().insert(ns, "ColBreaks") == NS_x11::LN_ColBreaks;
+ flag&=QName::tokenizer().insert(ns, "Hidden") == NS_x11::LN_Hidden;
+ flag&=QName::tokenizer().insert(ns, "ColBreak") == NS_x11::LN_ColBreak;
+ flag&=QName::tokenizer().insert(ns, "HideDetail") == NS_x11::LN_HideDetail;
+ flag&=QName::tokenizer().insert(ns, "Column") == NS_x11::LN_Column;
+ flag&=QName::tokenizer().insert(ns, "CachePosition") == NS_x11::LN_CachePosition;
+ flag&=QName::tokenizer().insert(ns, "RowBreaks") == NS_x11::LN_RowBreaks;
+ flag&=QName::tokenizer().insert(ns, "Member") == NS_x11::LN_Member;
+ flag&=QName::tokenizer().insert(ns, "RowBreak") == NS_x11::LN_RowBreak;
+ flag&=QName::tokenizer().insert(ns, "Row") == NS_x11::LN_Row;
+ flag&=QName::tokenizer().insert(ns, "DrilledMember") == NS_x11::LN_DrilledMember;
+ flag&=QName::tokenizer().insert(ns, "ColFirst") == NS_x11::LN_ColFirst;
+ flag&=QName::tokenizer().insert(ns, "DataValueEditing") == NS_x11::LN_DataValueEditing;
+ flag&=QName::tokenizer().insert(ns, "ColLast") == NS_x11::LN_ColLast;
+ flag&=QName::tokenizer().insert(ns, "Number") == NS_x11::LN_Number;
+ flag&=QName::tokenizer().insert(ns, "QTSource") == NS_x11::LN_QTSource;
+ flag&=QName::tokenizer().insert(ns, "Text") == NS_x11::LN_Text;
+ flag&=QName::tokenizer().insert(ns, "Boolean") == NS_x11::LN_Boolean;
+ flag&=QName::tokenizer().insert(ns, "ErrorString") == NS_x11::LN_ErrorString;
+ flag&=QName::tokenizer().insert(ns, "Error") == NS_x11::LN_Error;
+ flag&=QName::tokenizer().insert(ns, "NullString") == NS_x11::LN_NullString;
+ flag&=QName::tokenizer().insert(ns, "Horizontal") == NS_x11::LN_Horizontal;
+ flag&=QName::tokenizer().insert(ns, "PageFieldOrder") == NS_x11::LN_PageFieldOrder;
+ flag&=QName::tokenizer().insert(ns, "Rotation") == NS_x11::LN_Rotation;
+ flag&=QName::tokenizer().insert(ns, "Vertical") == NS_x11::LN_Vertical;
+ flag&=QName::tokenizer().insert(ns, "PageFieldWrapCount") == NS_x11::LN_PageFieldWrapCount;
+ flag&=QName::tokenizer().insert(ns, "ReadingOrder") == NS_x11::LN_ReadingOrder;
+ flag&=QName::tokenizer().insert(ns, "DisableDrillDown") == NS_x11::LN_DisableDrillDown;
+ flag&=QName::tokenizer().insert(ns, "Path") == NS_x11::LN_Path;
+ flag&=QName::tokenizer().insert(ns, "Left") == NS_x11::LN_Left;
+ flag&=QName::tokenizer().insert(ns, "DisableFieldDialog") == NS_x11::LN_DisableFieldDialog;
+ flag&=QName::tokenizer().insert(ns, "Cell") == NS_x11::LN_Cell;
+ flag&=QName::tokenizer().insert(ns, "Top") == NS_x11::LN_Top;
+ flag&=QName::tokenizer().insert(ns, "DisableWizard") == NS_x11::LN_DisableWizard;
+ flag&=QName::tokenizer().insert(ns, "NotInverted") == NS_x11::LN_NotInverted;
+ flag&=QName::tokenizer().insert(ns, "Id") == NS_x11::LN_Id;
+ flag&=QName::tokenizer().insert(ns, "DisplayErrorString") == NS_x11::LN_DisplayErrorString;
+ flag&=QName::tokenizer().insert(ns, "Clipped") == NS_x11::LN_Clipped;
+ flag&=QName::tokenizer().insert(ns, "NoPreserveFormatting") == NS_x11::LN_NoPreserveFormatting;
+ flag&=QName::tokenizer().insert(ns, "Descending") == NS_x11::LN_Descending;
+ flag&=QName::tokenizer().insert(ns, "FillDown") == NS_x11::LN_FillDown;
+ flag&=QName::tokenizer().insert(ns, "HasNoAutoFormat") == NS_x11::LN_HasNoAutoFormat;
+ flag&=QName::tokenizer().insert(ns, "RowNumbers") == NS_x11::LN_RowNumbers;
+ flag&=QName::tokenizer().insert(ns, "SortKey") == NS_x11::LN_SortKey;
+ flag&=QName::tokenizer().insert(ns, "User") == NS_x11::LN_User;
+ flag&=QName::tokenizer().insert(ns, "SubtotalHiddenPageItems") == NS_x11::LN_SubtotalHiddenPageItems;
+ flag&=QName::tokenizer().insert(ns, "Condition") == NS_x11::LN_Condition;
+ flag&=QName::tokenizer().insert(ns, "NoAutoFormatWidth") == NS_x11::LN_NoAutoFormatWidth;
+ flag&=QName::tokenizer().insert(ns, "Qualifier") == NS_x11::LN_Qualifier;
+ flag&=QName::tokenizer().insert(ns, "NoRowGrand") == NS_x11::LN_NoRowGrand;
+ flag&=QName::tokenizer().insert(ns, "Value1") == NS_x11::LN_Value1;
+ flag&=QName::tokenizer().insert(ns, "Value2") == NS_x11::LN_Value2;
+ flag&=QName::tokenizer().insert(ns, "NoColumnGrand") == NS_x11::LN_NoColumnGrand;
+ flag&=QName::tokenizer().insert(ns, "Format") == NS_x11::LN_Format;
+ flag&=QName::tokenizer().insert(ns, "FileName") == NS_x11::LN_FileName;
+ flag&=QName::tokenizer().insert(ns, "NoDisplayNullString") == NS_x11::LN_NoDisplayNullString;
+ flag&=QName::tokenizer().insert(ns, "Reference") == NS_x11::LN_Reference;
+ flag&=QName::tokenizer().insert(ns, "Type") == NS_x11::LN_Type;
+ flag&=QName::tokenizer().insert(ns, "NoPrintRepeatItems") == NS_x11::LN_NoPrintRepeatItems;
+ flag&=QName::tokenizer().insert(ns, "CellRangeList") == NS_x11::LN_CellRangeList;
+ flag&=QName::tokenizer().insert(ns, "PivotView") == NS_x11::LN_PivotView;
+ flag&=QName::tokenizer().insert(ns, "UseBlank") == NS_x11::LN_UseBlank;
+ flag&=QName::tokenizer().insert(ns, "Min") == NS_x11::LN_Min;
+ flag&=QName::tokenizer().insert(ns, "AutoFormatAlignment") == NS_x11::LN_AutoFormatAlignment;
+ flag&=QName::tokenizer().insert(ns, "Max") == NS_x11::LN_Max;
+ flag&=QName::tokenizer().insert(ns, "Value") == NS_x11::LN_Value;
+ flag&=QName::tokenizer().insert(ns, "AutoFormatBorder") == NS_x11::LN_AutoFormatBorder;
+ flag&=QName::tokenizer().insert(ns, "ComboHide") == NS_x11::LN_ComboHide;
+ flag&=QName::tokenizer().insert(ns, "AutoFormatFont") == NS_x11::LN_AutoFormatFont;
+ flag&=QName::tokenizer().insert(ns, "IMEMode") == NS_x11::LN_IMEMode;
+ flag&=QName::tokenizer().insert(ns, "AutoFormatName") == NS_x11::LN_AutoFormatName;
+ flag&=QName::tokenizer().insert(ns, "InputHide") == NS_x11::LN_InputHide;
+ flag&=QName::tokenizer().insert(ns, "InputTitle") == NS_x11::LN_InputTitle;
+ flag&=QName::tokenizer().insert(ns, "AutoFormatNumber") == NS_x11::LN_AutoFormatNumber;
+ flag&=QName::tokenizer().insert(ns, "InputMessage") == NS_x11::LN_InputMessage;
+ flag&=QName::tokenizer().insert(ns, "AutoFormatPattern") == NS_x11::LN_AutoFormatPattern;
+ flag&=QName::tokenizer().insert(ns, "ErrorHide") == NS_x11::LN_ErrorHide;
+ flag&=QName::tokenizer().insert(ns, "GrandTotalString") == NS_x11::LN_GrandTotalString;
+ flag&=QName::tokenizer().insert(ns, "ErrorStyle") == NS_x11::LN_ErrorStyle;
+ flag&=QName::tokenizer().insert(ns, "ErrorMessage") == NS_x11::LN_ErrorMessage;
+ flag&=QName::tokenizer().insert(ns, "PrintSetTitles") == NS_x11::LN_PrintSetTitles;
+ flag&=QName::tokenizer().insert(ns, "ErrorTitle") == NS_x11::LN_ErrorTitle;
+ flag&=QName::tokenizer().insert(ns, "MergeLabels") == NS_x11::LN_MergeLabels;
+ flag&=QName::tokenizer().insert(ns, "Formula") == NS_x11::LN_Formula;
+ flag&=QName::tokenizer().insert(ns, "OleLink") == NS_x11::LN_OleLink;
+ flag&=QName::tokenizer().insert(ns, "PageFieldStyle") == NS_x11::LN_PageFieldStyle;
+ flag&=QName::tokenizer().insert(ns, "PLExport") == NS_x11::LN_PLExport;
+ flag&=QName::tokenizer().insert(ns, "WantAdvise") == NS_x11::LN_WantAdvise;
+ flag&=QName::tokenizer().insert(ns, "WantPict") == NS_x11::LN_WantPict;
+ flag&=QName::tokenizer().insert(ns, "ImmediateItemsOnDrop") == NS_x11::LN_ImmediateItemsOnDrop;
+ flag&=QName::tokenizer().insert(ns, "Cf") == NS_x11::LN_Cf;
+ flag&=QName::tokenizer().insert(ns, "FieldType") == NS_x11::LN_FieldType;
+ flag&=QName::tokenizer().insert(ns, "ShowPageMultipleItemLabel") == NS_x11::LN_ShowPageMultipleItemLabel;
+ flag&=QName::tokenizer().insert(ns, "FieldStart") == NS_x11::LN_FieldStart;
+ flag&=QName::tokenizer().insert(ns, "SmallGrid") == NS_x11::LN_SmallGrid;
+ flag&=QName::tokenizer().insert(ns, "Missing") == NS_x11::LN_Missing;
+ flag&=QName::tokenizer().insert(ns, "SeqNum") == NS_x11::LN_SeqNum;
+ flag&=QName::tokenizer().insert(ns, "TableStyle") == NS_x11::LN_TableStyle;
+ flag&=QName::tokenizer().insert(ns, "Tag") == NS_x11::LN_Tag;
+ flag&=QName::tokenizer().insert(ns, "Expanded") == NS_x11::LN_Expanded;
+ flag&=QName::tokenizer().insert(ns, "RowLast") == NS_x11::LN_RowLast;
+ flag&=QName::tokenizer().insert(ns, "VacatedStyle") == NS_x11::LN_VacatedStyle;
+ flag&=QName::tokenizer().insert(ns, "Pane") == NS_x11::LN_Pane;
+ flag&=QName::tokenizer().insert(ns, "ActiveRow") == NS_x11::LN_ActiveRow;
+ flag&=QName::tokenizer().insert(ns, "HideTotalsAnnotation") == NS_x11::LN_HideTotalsAnnotation;
+ flag&=QName::tokenizer().insert(ns, "ActiveCol") == NS_x11::LN_ActiveCol;
+ flag&=QName::tokenizer().insert(ns, "ShowCellBackgroundFromOLAP") == NS_x11::LN_ShowCellBackgroundFromOLAP;
+ flag&=QName::tokenizer().insert(ns, "RangeSelection") == NS_x11::LN_RangeSelection;
+ flag&=QName::tokenizer().insert(ns, "Selection") == NS_x11::LN_Selection;
+ flag&=QName::tokenizer().insert(ns, "NoViewCalculatedMembers") == NS_x11::LN_NoViewCalculatedMembers;
+ flag&=QName::tokenizer().insert(ns, "ExcelType") == NS_x11::LN_ExcelType;
+ flag&=QName::tokenizer().insert(ns, "VisualTotals") == NS_x11::LN_VisualTotals;
+ flag&=QName::tokenizer().insert(ns, "ParameterType") == NS_x11::LN_ParameterType;
+ flag&=QName::tokenizer().insert(ns, "Location") == NS_x11::LN_Location;
+ flag&=QName::tokenizer().insert(ns, "PLPivotField") == NS_x11::LN_PLPivotField;
+ flag&=QName::tokenizer().insert(ns, "PLTotal") == NS_x11::LN_PLTotal;
+ flag&=QName::tokenizer().insert(ns, "DataMember") == NS_x11::LN_DataMember;
+ flag&=QName::tokenizer().insert(ns, "DataAxisEmpty") == NS_x11::LN_DataAxisEmpty;
+ flag&=QName::tokenizer().insert(ns, "DisplayFieldList") == NS_x11::LN_DisplayFieldList;
+ flag&=QName::tokenizer().insert(ns, "NoAutoFit") == NS_x11::LN_NoAutoFit;
+ flag&=QName::tokenizer().insert(ns, "Height") == NS_x11::LN_Height;
+ flag&=QName::tokenizer().insert(ns, "Width") == NS_x11::LN_Width;
+ flag&=QName::tokenizer().insert(ns, "MaxHeight") == NS_x11::LN_MaxHeight;
+ flag&=QName::tokenizer().insert(ns, "MaxWidth") == NS_x11::LN_MaxWidth;
+ flag&=QName::tokenizer().insert(ns, "MemberExpand") == NS_x11::LN_MemberExpand;
+ flag&=QName::tokenizer().insert(ns, "ConnectionString") == NS_x11::LN_ConnectionString;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace x11 failed", flag);}
+ void test_ss11(){
+ bool flag=true;
+ static const char ns[] = "urn:schemas-microsoft-com:office:spreadsheet";
+ flag&=QName::tokenizer().insert(ns, "Workbook") == NS_ss11::LN_Workbook;
+ flag&=QName::tokenizer().insert(ns, "Styles") == NS_ss11::LN_Styles;
+ flag&=QName::tokenizer().insert(ns, "Style") == NS_ss11::LN_Style;
+ flag&=QName::tokenizer().insert(ns, "Names") == NS_ss11::LN_Names;
+ flag&=QName::tokenizer().insert(ns, "Worksheet") == NS_ss11::LN_Worksheet;
+ flag&=QName::tokenizer().insert(ns, "NamedRange") == NS_ss11::LN_NamedRange;
+ flag&=QName::tokenizer().insert(ns, "Alignment") == NS_ss11::LN_Alignment;
+ flag&=QName::tokenizer().insert(ns, "Borders") == NS_ss11::LN_Borders;
+ flag&=QName::tokenizer().insert(ns, "Font") == NS_ss11::LN_Font;
+ flag&=QName::tokenizer().insert(ns, "Interior") == NS_ss11::LN_Interior;
+ flag&=QName::tokenizer().insert(ns, "NumberFormat") == NS_ss11::LN_NumberFormat;
+ flag&=QName::tokenizer().insert(ns, "Protection") == NS_ss11::LN_Protection;
+ flag&=QName::tokenizer().insert(ns, "Border") == NS_ss11::LN_Border;
+ flag&=QName::tokenizer().insert(ns, "Column") == NS_ss11::LN_Column;
+ flag&=QName::tokenizer().insert(ns, "Row") == NS_ss11::LN_Row;
+ flag&=QName::tokenizer().insert(ns, "Cell") == NS_ss11::LN_Cell;
+ flag&=QName::tokenizer().insert(ns, "Data") == NS_ss11::LN_Data;
+ flag&=QName::tokenizer().insert(ns, "Comment") == NS_ss11::LN_Comment;
+ flag&=QName::tokenizer().insert(ns, "NamedCell") == NS_ss11::LN_NamedCell;
+ flag&=QName::tokenizer().insert(ns, "Table") == NS_ss11::LN_Table;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace ss11 failed", flag);}
+ void test_rtf(){
+ bool flag=true;
+ static const char ns[] = "urn:rtf:1.7";
+ flag&=QName::tokenizer().insert(ns, "tsvertalb") == NS_rtf::LN_tsvertalb;
+ flag&=QName::tokenizer().insert(ns, "tsvertalc") == NS_rtf::LN_tsvertalc;
+ flag&=QName::tokenizer().insert(ns, "tsvertalt") == NS_rtf::LN_tsvertalt;
+ flag&=QName::tokenizer().insert(ns, "twoonone") == NS_rtf::LN_twoonone;
+ flag&=QName::tokenizer().insert(ns, "tx") == NS_rtf::LN_tx;
+ flag&=QName::tokenizer().insert(ns, "txe") == NS_rtf::LN_txe;
+ flag&=QName::tokenizer().insert(ns, "uc") == NS_rtf::LN_uc;
+ flag&=QName::tokenizer().insert(ns, "ud") == NS_rtf::LN_ud;
+ flag&=QName::tokenizer().insert(ns, "ul") == NS_rtf::LN_ul;
+ flag&=QName::tokenizer().insert(ns, "ulc") == NS_rtf::LN_ulc;
+ flag&=QName::tokenizer().insert(ns, "uld") == NS_rtf::LN_uld;
+ flag&=QName::tokenizer().insert(ns, "uldash") == NS_rtf::LN_uldash;
+ flag&=QName::tokenizer().insert(ns, "uldashd") == NS_rtf::LN_uldashd;
+ flag&=QName::tokenizer().insert(ns, "uldashdd") == NS_rtf::LN_uldashdd;
+ flag&=QName::tokenizer().insert(ns, "uldb") == NS_rtf::LN_uldb;
+ flag&=QName::tokenizer().insert(ns, "ulhair") == NS_rtf::LN_ulhair;
+ flag&=QName::tokenizer().insert(ns, "ulhwave") == NS_rtf::LN_ulhwave;
+ flag&=QName::tokenizer().insert(ns, "ulldash") == NS_rtf::LN_ulldash;
+ flag&=QName::tokenizer().insert(ns, "ulnone") == NS_rtf::LN_ulnone;
+ flag&=QName::tokenizer().insert(ns, "ulth") == NS_rtf::LN_ulth;
+ flag&=QName::tokenizer().insert(ns, "ulthd") == NS_rtf::LN_ulthd;
+ flag&=QName::tokenizer().insert(ns, "ulthdash") == NS_rtf::LN_ulthdash;
+ flag&=QName::tokenizer().insert(ns, "ulthdashd") == NS_rtf::LN_ulthdashd;
+ flag&=QName::tokenizer().insert(ns, "ulthdashdd") == NS_rtf::LN_ulthdashdd;
+ flag&=QName::tokenizer().insert(ns, "ulthldash") == NS_rtf::LN_ulthldash;
+ flag&=QName::tokenizer().insert(ns, "ululdbwave") == NS_rtf::LN_ululdbwave;
+ flag&=QName::tokenizer().insert(ns, "ulw") == NS_rtf::LN_ulw;
+ flag&=QName::tokenizer().insert(ns, "ulwave") == NS_rtf::LN_ulwave;
+ flag&=QName::tokenizer().insert(ns, "u") == NS_rtf::LN_u;
+ flag&=QName::tokenizer().insert(ns, "up") == NS_rtf::LN_up;
+ flag&=QName::tokenizer().insert(ns, "upr") == NS_rtf::LN_upr;
+ flag&=QName::tokenizer().insert(ns, "urtf") == NS_rtf::LN_urtf;
+ flag&=QName::tokenizer().insert(ns, "useltbaln") == NS_rtf::LN_useltbaln;
+ flag&=QName::tokenizer().insert(ns, "userprops") == NS_rtf::LN_userprops;
+ flag&=QName::tokenizer().insert(ns, "v") == NS_rtf::LN_v;
+ flag&=QName::tokenizer().insert(ns, "vern") == NS_rtf::LN_vern;
+ flag&=QName::tokenizer().insert(ns, "version") == NS_rtf::LN_version;
+ flag&=QName::tokenizer().insert(ns, "vertalb") == NS_rtf::LN_vertalb;
+ flag&=QName::tokenizer().insert(ns, "vertalc") == NS_rtf::LN_vertalc;
+ flag&=QName::tokenizer().insert(ns, "vertalj") == NS_rtf::LN_vertalj;
+ flag&=QName::tokenizer().insert(ns, "vertalt") == NS_rtf::LN_vertalt;
+ flag&=QName::tokenizer().insert(ns, "vertdoc") == NS_rtf::LN_vertdoc;
+ flag&=QName::tokenizer().insert(ns, "vertsect") == NS_rtf::LN_vertsect;
+ flag&=QName::tokenizer().insert(ns, "viewkind") == NS_rtf::LN_viewkind;
+ flag&=QName::tokenizer().insert(ns, "viewnobound") == NS_rtf::LN_viewnobound;
+ flag&=QName::tokenizer().insert(ns, "viewscale") == NS_rtf::LN_viewscale;
+ flag&=QName::tokenizer().insert(ns, "viewzk") == NS_rtf::LN_viewzk;
+ flag&=QName::tokenizer().insert(ns, "wbitmap") == NS_rtf::LN_wbitmap;
+ flag&=QName::tokenizer().insert(ns, "wbmbitspixel") == NS_rtf::LN_wbmbitspixel;
+ flag&=QName::tokenizer().insert(ns, "wbmplanes") == NS_rtf::LN_wbmplanes;
+ flag&=QName::tokenizer().insert(ns, "wbmwidthbytes") == NS_rtf::LN_wbmwidthbytes;
+ flag&=QName::tokenizer().insert(ns, "webhidden") == NS_rtf::LN_webhidden;
+ flag&=QName::tokenizer().insert(ns, "widctlpar") == NS_rtf::LN_widctlpar;
+ flag&=QName::tokenizer().insert(ns, "widowctrl") == NS_rtf::LN_widowctrl;
+ flag&=QName::tokenizer().insert(ns, "windowcaption") == NS_rtf::LN_windowcaption;
+ flag&=QName::tokenizer().insert(ns, "wmetafile") == NS_rtf::LN_wmetafile;
+ flag&=QName::tokenizer().insert(ns, "wpeqn") == NS_rtf::LN_wpeqn;
+ flag&=QName::tokenizer().insert(ns, "wpjst") == NS_rtf::LN_wpjst;
+ flag&=QName::tokenizer().insert(ns, "wpsp") == NS_rtf::LN_wpsp;
+ flag&=QName::tokenizer().insert(ns, "wraptrsp") == NS_rtf::LN_wraptrsp;
+ flag&=QName::tokenizer().insert(ns, "wrppunct") == NS_rtf::LN_wrppunct;
+ flag&=QName::tokenizer().insert(ns, "xe") == NS_rtf::LN_xe;
+ flag&=QName::tokenizer().insert(ns, "xef") == NS_rtf::LN_xef;
+ flag&=QName::tokenizer().insert(ns, "yr") == NS_rtf::LN_yr;
+ flag&=QName::tokenizer().insert(ns, "yts") == NS_rtf::LN_yts;
+ flag&=QName::tokenizer().insert(ns, "yxe") == NS_rtf::LN_yxe;
+ flag&=QName::tokenizer().insert(ns, "zwbo") == NS_rtf::LN_zwbo;
+ flag&=QName::tokenizer().insert(ns, "zwj") == NS_rtf::LN_zwj;
+ flag&=QName::tokenizer().insert(ns, "zwnbo") == NS_rtf::LN_zwnbo;
+ flag&=QName::tokenizer().insert(ns, "zwnj") == NS_rtf::LN_zwnj;
+ flag&=QName::tokenizer().insert(ns, "dobypara") == NS_rtf::LN_dobypara;
+ flag&=QName::tokenizer().insert(ns, "doccomm") == NS_rtf::LN_doccomm;
+ flag&=QName::tokenizer().insert(ns, "doctemp") == NS_rtf::LN_doctemp;
+ flag&=QName::tokenizer().insert(ns, "doctype") == NS_rtf::LN_doctype;
+ flag&=QName::tokenizer().insert(ns, "docvar") == NS_rtf::LN_docvar;
+ flag&=QName::tokenizer().insert(ns, "dodhgt") == NS_rtf::LN_dodhgt;
+ flag&=QName::tokenizer().insert(ns, "dolock") == NS_rtf::LN_dolock;
+ flag&=QName::tokenizer().insert(ns, "donotshowcomments") == NS_rtf::LN_donotshowcomments;
+ flag&=QName::tokenizer().insert(ns, "donotshowinsdel") == NS_rtf::LN_donotshowinsdel;
+ flag&=QName::tokenizer().insert(ns, "donotshowmarkup") == NS_rtf::LN_donotshowmarkup;
+ flag&=QName::tokenizer().insert(ns, "donotshowprops") == NS_rtf::LN_donotshowprops;
+ flag&=QName::tokenizer().insert(ns, "dpaendhol") == NS_rtf::LN_dpaendhol;
+ flag&=QName::tokenizer().insert(ns, "dpaendl") == NS_rtf::LN_dpaendl;
+ flag&=QName::tokenizer().insert(ns, "dpaendsol") == NS_rtf::LN_dpaendsol;
+ flag&=QName::tokenizer().insert(ns, "dpaendw") == NS_rtf::LN_dpaendw;
+ flag&=QName::tokenizer().insert(ns, "dparc") == NS_rtf::LN_dparc;
+ flag&=QName::tokenizer().insert(ns, "dparcflipx") == NS_rtf::LN_dparcflipx;
+ flag&=QName::tokenizer().insert(ns, "dparcflipy") == NS_rtf::LN_dparcflipy;
+ flag&=QName::tokenizer().insert(ns, "dpastarthol") == NS_rtf::LN_dpastarthol;
+ flag&=QName::tokenizer().insert(ns, "dpastartl") == NS_rtf::LN_dpastartl;
+ flag&=QName::tokenizer().insert(ns, "dpastartsol") == NS_rtf::LN_dpastartsol;
+ flag&=QName::tokenizer().insert(ns, "dpastartw") == NS_rtf::LN_dpastartw;
+ flag&=QName::tokenizer().insert(ns, "dpcallout") == NS_rtf::LN_dpcallout;
+ flag&=QName::tokenizer().insert(ns, "dpcoa") == NS_rtf::LN_dpcoa;
+ flag&=QName::tokenizer().insert(ns, "dpcoaccent") == NS_rtf::LN_dpcoaccent;
+ flag&=QName::tokenizer().insert(ns, "dpcobestfit") == NS_rtf::LN_dpcobestfit;
+ flag&=QName::tokenizer().insert(ns, "dpcoborder") == NS_rtf::LN_dpcoborder;
+ flag&=QName::tokenizer().insert(ns, "dpcodabs") == NS_rtf::LN_dpcodabs;
+ flag&=QName::tokenizer().insert(ns, "dpcodbottom") == NS_rtf::LN_dpcodbottom;
+ flag&=QName::tokenizer().insert(ns, "dpcodcenter") == NS_rtf::LN_dpcodcenter;
+ flag&=QName::tokenizer().insert(ns, "dpcodescent") == NS_rtf::LN_dpcodescent;
+ flag&=QName::tokenizer().insert(ns, "dpcodtop") == NS_rtf::LN_dpcodtop;
+ flag&=QName::tokenizer().insert(ns, "dpcolength") == NS_rtf::LN_dpcolength;
+ flag&=QName::tokenizer().insert(ns, "dpcominusx") == NS_rtf::LN_dpcominusx;
+ flag&=QName::tokenizer().insert(ns, "dpcominusy") == NS_rtf::LN_dpcominusy;
+ flag&=QName::tokenizer().insert(ns, "dpcooffset") == NS_rtf::LN_dpcooffset;
+ flag&=QName::tokenizer().insert(ns, "dpcosmarta") == NS_rtf::LN_dpcosmarta;
+ flag&=QName::tokenizer().insert(ns, "dpcotdouble") == NS_rtf::LN_dpcotdouble;
+ flag&=QName::tokenizer().insert(ns, "dpcotright") == NS_rtf::LN_dpcotright;
+ flag&=QName::tokenizer().insert(ns, "dpcotsingle") == NS_rtf::LN_dpcotsingle;
+ flag&=QName::tokenizer().insert(ns, "dpcottriple") == NS_rtf::LN_dpcottriple;
+ flag&=QName::tokenizer().insert(ns, "dpcount") == NS_rtf::LN_dpcount;
+ flag&=QName::tokenizer().insert(ns, "dpellipse") == NS_rtf::LN_dpellipse;
+ flag&=QName::tokenizer().insert(ns, "dpendgroup") == NS_rtf::LN_dpendgroup;
+ flag&=QName::tokenizer().insert(ns, "dpfillbgcb") == NS_rtf::LN_dpfillbgcb;
+ flag&=QName::tokenizer().insert(ns, "dpfillbgcg") == NS_rtf::LN_dpfillbgcg;
+ flag&=QName::tokenizer().insert(ns, "dpfillbgcr") == NS_rtf::LN_dpfillbgcr;
+ flag&=QName::tokenizer().insert(ns, "dpfillbggray") == NS_rtf::LN_dpfillbggray;
+ flag&=QName::tokenizer().insert(ns, "dpfillbgpal") == NS_rtf::LN_dpfillbgpal;
+ flag&=QName::tokenizer().insert(ns, "dpfillfgcb") == NS_rtf::LN_dpfillfgcb;
+ flag&=QName::tokenizer().insert(ns, "dpfillfgcg") == NS_rtf::LN_dpfillfgcg;
+ flag&=QName::tokenizer().insert(ns, "dpfillfgcr") == NS_rtf::LN_dpfillfgcr;
+ flag&=QName::tokenizer().insert(ns, "dpfillfggray") == NS_rtf::LN_dpfillfggray;
+ flag&=QName::tokenizer().insert(ns, "dpfillfgpal") == NS_rtf::LN_dpfillfgpal;
+ flag&=QName::tokenizer().insert(ns, "dpfillpat") == NS_rtf::LN_dpfillpat;
+ flag&=QName::tokenizer().insert(ns, "dpgroup") == NS_rtf::LN_dpgroup;
+ flag&=QName::tokenizer().insert(ns, "dpline") == NS_rtf::LN_dpline;
+ flag&=QName::tokenizer().insert(ns, "dplinecob") == NS_rtf::LN_dplinecob;
+ flag&=QName::tokenizer().insert(ns, "dplinecog") == NS_rtf::LN_dplinecog;
+ flag&=QName::tokenizer().insert(ns, "dplinecor") == NS_rtf::LN_dplinecor;
+ flag&=QName::tokenizer().insert(ns, "dplinedado") == NS_rtf::LN_dplinedado;
+ flag&=QName::tokenizer().insert(ns, "dplinedadodo") == NS_rtf::LN_dplinedadodo;
+ flag&=QName::tokenizer().insert(ns, "dplinedash") == NS_rtf::LN_dplinedash;
+ flag&=QName::tokenizer().insert(ns, "dplinedot") == NS_rtf::LN_dplinedot;
+ flag&=QName::tokenizer().insert(ns, "dplinegray") == NS_rtf::LN_dplinegray;
+ flag&=QName::tokenizer().insert(ns, "dplinehollow") == NS_rtf::LN_dplinehollow;
+ flag&=QName::tokenizer().insert(ns, "dplinepal") == NS_rtf::LN_dplinepal;
+ flag&=QName::tokenizer().insert(ns, "dplinesolid") == NS_rtf::LN_dplinesolid;
+ flag&=QName::tokenizer().insert(ns, "dplinew") == NS_rtf::LN_dplinew;
+ flag&=QName::tokenizer().insert(ns, "dppolycount") == NS_rtf::LN_dppolycount;
+ flag&=QName::tokenizer().insert(ns, "dppolygon") == NS_rtf::LN_dppolygon;
+ flag&=QName::tokenizer().insert(ns, "dppolyline") == NS_rtf::LN_dppolyline;
+ flag&=QName::tokenizer().insert(ns, "dpptx") == NS_rtf::LN_dpptx;
+ flag&=QName::tokenizer().insert(ns, "dppty") == NS_rtf::LN_dppty;
+ flag&=QName::tokenizer().insert(ns, "dprect") == NS_rtf::LN_dprect;
+ flag&=QName::tokenizer().insert(ns, "dproundr") == NS_rtf::LN_dproundr;
+ flag&=QName::tokenizer().insert(ns, "dpshadow") == NS_rtf::LN_dpshadow;
+ flag&=QName::tokenizer().insert(ns, "dpshadx") == NS_rtf::LN_dpshadx;
+ flag&=QName::tokenizer().insert(ns, "dpshady") == NS_rtf::LN_dpshady;
+ flag&=QName::tokenizer().insert(ns, "dptxbtlr") == NS_rtf::LN_dptxbtlr;
+ flag&=QName::tokenizer().insert(ns, "dptxbx") == NS_rtf::LN_dptxbx;
+ flag&=QName::tokenizer().insert(ns, "dptxbxmar") == NS_rtf::LN_dptxbxmar;
+ flag&=QName::tokenizer().insert(ns, "dptxbxtext") == NS_rtf::LN_dptxbxtext;
+ flag&=QName::tokenizer().insert(ns, "dptxlrtb") == NS_rtf::LN_dptxlrtb;
+ flag&=QName::tokenizer().insert(ns, "dptxlrtbv") == NS_rtf::LN_dptxlrtbv;
+ flag&=QName::tokenizer().insert(ns, "dptxtbrl") == NS_rtf::LN_dptxtbrl;
+ flag&=QName::tokenizer().insert(ns, "dptxtbrlv") == NS_rtf::LN_dptxtbrlv;
+ flag&=QName::tokenizer().insert(ns, "dpx") == NS_rtf::LN_dpx;
+ flag&=QName::tokenizer().insert(ns, "dpxsize") == NS_rtf::LN_dpxsize;
+ flag&=QName::tokenizer().insert(ns, "dpy") == NS_rtf::LN_dpy;
+ flag&=QName::tokenizer().insert(ns, "dpysize") == NS_rtf::LN_dpysize;
+ flag&=QName::tokenizer().insert(ns, "dropcapli") == NS_rtf::LN_dropcapli;
+ flag&=QName::tokenizer().insert(ns, "dropcapt") == NS_rtf::LN_dropcapt;
+ flag&=QName::tokenizer().insert(ns, "ds") == NS_rtf::LN_ds;
+ flag&=QName::tokenizer().insert(ns, "dxfrtext") == NS_rtf::LN_dxfrtext;
+ flag&=QName::tokenizer().insert(ns, "dy") == NS_rtf::LN_dy;
+ flag&=QName::tokenizer().insert(ns, "edmins") == NS_rtf::LN_edmins;
+ flag&=QName::tokenizer().insert(ns, "embo") == NS_rtf::LN_embo;
+ flag&=QName::tokenizer().insert(ns, "emdash") == NS_rtf::LN_emdash;
+ flag&=QName::tokenizer().insert(ns, "emfblip") == NS_rtf::LN_emfblip;
+ flag&=QName::tokenizer().insert(ns, "emspace") == NS_rtf::LN_emspace;
+ flag&=QName::tokenizer().insert(ns, "endash") == NS_rtf::LN_endash;
+ flag&=QName::tokenizer().insert(ns, "enddoc") == NS_rtf::LN_enddoc;
+ flag&=QName::tokenizer().insert(ns, "endnhere") == NS_rtf::LN_endnhere;
+ flag&=QName::tokenizer().insert(ns, "endnotes") == NS_rtf::LN_endnotes;
+ flag&=QName::tokenizer().insert(ns, "enspace") == NS_rtf::LN_enspace;
+ flag&=QName::tokenizer().insert(ns, "expnd") == NS_rtf::LN_expnd;
+ flag&=QName::tokenizer().insert(ns, "expndtw") == NS_rtf::LN_expndtw;
+ flag&=QName::tokenizer().insert(ns, "expshrtn") == NS_rtf::LN_expshrtn;
+ flag&=QName::tokenizer().insert(ns, "f") == NS_rtf::LN_f;
+ flag&=QName::tokenizer().insert(ns, "faauto") == NS_rtf::LN_faauto;
+ flag&=QName::tokenizer().insert(ns, "facenter7.0") == NS_rtf::LN_facenter7_0;
+ flag&=QName::tokenizer().insert(ns, "facingp") == NS_rtf::LN_facingp;
+ flag&=QName::tokenizer().insert(ns, "fahang") == NS_rtf::LN_fahang;
+ flag&=QName::tokenizer().insert(ns, "falt") == NS_rtf::LN_falt;
+ flag&=QName::tokenizer().insert(ns, "faroman") == NS_rtf::LN_faroman;
+ flag&=QName::tokenizer().insert(ns, "favar") == NS_rtf::LN_favar;
+ flag&=QName::tokenizer().insert(ns, "fbias") == NS_rtf::LN_fbias;
+ flag&=QName::tokenizer().insert(ns, "fbidi") == NS_rtf::LN_fbidi;
+ flag&=QName::tokenizer().insert(ns, "fchars") == NS_rtf::LN_fchars;
+ flag&=QName::tokenizer().insert(ns, "fcharset") == NS_rtf::LN_fcharset;
+ flag&=QName::tokenizer().insert(ns, "fdecor") == NS_rtf::LN_fdecor;
+ flag&=QName::tokenizer().insert(ns, "fet") == NS_rtf::LN_fet;
+ flag&=QName::tokenizer().insert(ns, "fetch") == NS_rtf::LN_fetch;
+ flag&=QName::tokenizer().insert(ns, "ffdefres") == NS_rtf::LN_ffdefres;
+ flag&=QName::tokenizer().insert(ns, "ffdeftext") == NS_rtf::LN_ffdeftext;
+ flag&=QName::tokenizer().insert(ns, "ffentrymcr") == NS_rtf::LN_ffentrymcr;
+ flag&=QName::tokenizer().insert(ns, "ffexitmcr") == NS_rtf::LN_ffexitmcr;
+ flag&=QName::tokenizer().insert(ns, "ffformat") == NS_rtf::LN_ffformat;
+ flag&=QName::tokenizer().insert(ns, "ffhaslistbox") == NS_rtf::LN_ffhaslistbox;
+ flag&=QName::tokenizer().insert(ns, "ffhelptext") == NS_rtf::LN_ffhelptext;
+ flag&=QName::tokenizer().insert(ns, "ffhps") == NS_rtf::LN_ffhps;
+ flag&=QName::tokenizer().insert(ns, "ffl") == NS_rtf::LN_ffl;
+ flag&=QName::tokenizer().insert(ns, "ffmaxlen") == NS_rtf::LN_ffmaxlen;
+ flag&=QName::tokenizer().insert(ns, "ffname") == NS_rtf::LN_ffname;
+ flag&=QName::tokenizer().insert(ns, "ffownhelp") == NS_rtf::LN_ffownhelp;
+ flag&=QName::tokenizer().insert(ns, "ffownstat") == NS_rtf::LN_ffownstat;
+ flag&=QName::tokenizer().insert(ns, "ffprot") == NS_rtf::LN_ffprot;
+ flag&=QName::tokenizer().insert(ns, "ffrecalc") == NS_rtf::LN_ffrecalc;
+ flag&=QName::tokenizer().insert(ns, "ffres") == NS_rtf::LN_ffres;
+ flag&=QName::tokenizer().insert(ns, "ffsize") == NS_rtf::LN_ffsize;
+ flag&=QName::tokenizer().insert(ns, "ffstattext") == NS_rtf::LN_ffstattext;
+ flag&=QName::tokenizer().insert(ns, "fftype") == NS_rtf::LN_fftype;
+ flag&=QName::tokenizer().insert(ns, "fftypetxt") == NS_rtf::LN_fftypetxt;
+ flag&=QName::tokenizer().insert(ns, "fi") == NS_rtf::LN_fi;
+ flag&=QName::tokenizer().insert(ns, "fid") == NS_rtf::LN_fid;
+ flag&=QName::tokenizer().insert(ns, "field") == NS_rtf::LN_field;
+ flag&=QName::tokenizer().insert(ns, "file") == NS_rtf::LN_file;
+ flag&=QName::tokenizer().insert(ns, "filetbl") == NS_rtf::LN_filetbl;
+ flag&=QName::tokenizer().insert(ns, "fittext") == NS_rtf::LN_fittext;
+ flag&=QName::tokenizer().insert(ns, "fldalt") == NS_rtf::LN_fldalt;
+ flag&=QName::tokenizer().insert(ns, "flddirty") == NS_rtf::LN_flddirty;
+ flag&=QName::tokenizer().insert(ns, "fldedit") == NS_rtf::LN_fldedit;
+ flag&=QName::tokenizer().insert(ns, "fldinst") == NS_rtf::LN_fldinst;
+ flag&=QName::tokenizer().insert(ns, "fldlock") == NS_rtf::LN_fldlock;
+ flag&=QName::tokenizer().insert(ns, "fldpriv") == NS_rtf::LN_fldpriv;
+ flag&=QName::tokenizer().insert(ns, "fldrslt") == NS_rtf::LN_fldrslt;
+ flag&=QName::tokenizer().insert(ns, "fldtype") == NS_rtf::LN_fldtype;
+ flag&=QName::tokenizer().insert(ns, "fmodern") == NS_rtf::LN_fmodern;
+ flag&=QName::tokenizer().insert(ns, "fn") == NS_rtf::LN_fn;
+ flag&=QName::tokenizer().insert(ns, "fname") == NS_rtf::LN_fname;
+ flag&=QName::tokenizer().insert(ns, "fnetwork") == NS_rtf::LN_fnetwork;
+ flag&=QName::tokenizer().insert(ns, "fnil") == NS_rtf::LN_fnil;
+ flag&=QName::tokenizer().insert(ns, "fnonfilesys") == NS_rtf::LN_fnonfilesys;
+ flag&=QName::tokenizer().insert(ns, "fontemb") == NS_rtf::LN_fontemb;
+ flag&=QName::tokenizer().insert(ns, "fontfile") == NS_rtf::LN_fontfile;
+ flag&=QName::tokenizer().insert(ns, "fonttbl") == NS_rtf::LN_fonttbl;
+ flag&=QName::tokenizer().insert(ns, "footer") == NS_rtf::LN_footer;
+ flag&=QName::tokenizer().insert(ns, "footerf") == NS_rtf::LN_footerf;
+ flag&=QName::tokenizer().insert(ns, "footerl") == NS_rtf::LN_footerl;
+ flag&=QName::tokenizer().insert(ns, "footery") == NS_rtf::LN_footery;
+ flag&=QName::tokenizer().insert(ns, "footnote") == NS_rtf::LN_footnote;
+ flag&=QName::tokenizer().insert(ns, "formdisp") == NS_rtf::LN_formdisp;
+ flag&=QName::tokenizer().insert(ns, "formfield") == NS_rtf::LN_formfield;
+ flag&=QName::tokenizer().insert(ns, "formprot") == NS_rtf::LN_formprot;
+ flag&=QName::tokenizer().insert(ns, "formshade") == NS_rtf::LN_formshade;
+ flag&=QName::tokenizer().insert(ns, "fosnum") == NS_rtf::LN_fosnum;
+ flag&=QName::tokenizer().insert(ns, "fprq") == NS_rtf::LN_fprq;
+ flag&=QName::tokenizer().insert(ns, "fracwidth") == NS_rtf::LN_fracwidth;
+ flag&=QName::tokenizer().insert(ns, "frelative") == NS_rtf::LN_frelative;
+ flag&=QName::tokenizer().insert(ns, "frmtxbtlr") == NS_rtf::LN_frmtxbtlr;
+ flag&=QName::tokenizer().insert(ns, "frmtxlrtb") == NS_rtf::LN_frmtxlrtb;
+ flag&=QName::tokenizer().insert(ns, "frmtxlrtbv") == NS_rtf::LN_frmtxlrtbv;
+ flag&=QName::tokenizer().insert(ns, "frmtxtbrl") == NS_rtf::LN_frmtxtbrl;
+ flag&=QName::tokenizer().insert(ns, "frmtxtbrlv") == NS_rtf::LN_frmtxtbrlv;
+ flag&=QName::tokenizer().insert(ns, "froman") == NS_rtf::LN_froman;
+ flag&=QName::tokenizer().insert(ns, "fromhtml") == NS_rtf::LN_fromhtml;
+ flag&=QName::tokenizer().insert(ns, "fromtext") == NS_rtf::LN_fromtext;
+ flag&=QName::tokenizer().insert(ns, "fs") == NS_rtf::LN_fs;
+ flag&=QName::tokenizer().insert(ns, "fscript") == NS_rtf::LN_fscript;
+ flag&=QName::tokenizer().insert(ns, "fswiss") == NS_rtf::LN_fswiss;
+ flag&=QName::tokenizer().insert(ns, "ftnalt") == NS_rtf::LN_ftnalt;
+ flag&=QName::tokenizer().insert(ns, "ftnbj") == NS_rtf::LN_ftnbj;
+ flag&=QName::tokenizer().insert(ns, "ftncn") == NS_rtf::LN_ftncn;
+ flag&=QName::tokenizer().insert(ns, "ftnil") == NS_rtf::LN_ftnil;
+ flag&=QName::tokenizer().insert(ns, "ftnlytwnine") == NS_rtf::LN_ftnlytwnine;
+ flag&=QName::tokenizer().insert(ns, "ftnnalc") == NS_rtf::LN_ftnnalc;
+ flag&=QName::tokenizer().insert(ns, "ftnnar") == NS_rtf::LN_ftnnar;
+ flag&=QName::tokenizer().insert(ns, "ftnnauc") == NS_rtf::LN_ftnnauc;
+ flag&=QName::tokenizer().insert(ns, "ftnnchi") == NS_rtf::LN_ftnnchi;
+ flag&=QName::tokenizer().insert(ns, "ftnnchosung") == NS_rtf::LN_ftnnchosung;
+ flag&=QName::tokenizer().insert(ns, "ftnncnum") == NS_rtf::LN_ftnncnum;
+ flag&=QName::tokenizer().insert(ns, "ftnndbar") == NS_rtf::LN_ftnndbar;
+ flag&=QName::tokenizer().insert(ns, "ftnndbnum") == NS_rtf::LN_ftnndbnum;
+ flag&=QName::tokenizer().insert(ns, "ftnndbnumd") == NS_rtf::LN_ftnndbnumd;
+ flag&=QName::tokenizer().insert(ns, "ftnndbnumk") == NS_rtf::LN_ftnndbnumk;
+ flag&=QName::tokenizer().insert(ns, "ftnndbnumt") == NS_rtf::LN_ftnndbnumt;
+ flag&=QName::tokenizer().insert(ns, "ftnnganada") == NS_rtf::LN_ftnnganada;
+ flag&=QName::tokenizer().insert(ns, "ftnngbnum") == NS_rtf::LN_ftnngbnum;
+ flag&=QName::tokenizer().insert(ns, "ftnngbnumd") == NS_rtf::LN_ftnngbnumd;
+ flag&=QName::tokenizer().insert(ns, "ftnngbnumk") == NS_rtf::LN_ftnngbnumk;
+ flag&=QName::tokenizer().insert(ns, "ftnngbnuml") == NS_rtf::LN_ftnngbnuml;
+ flag&=QName::tokenizer().insert(ns, "ftnnrlc") == NS_rtf::LN_ftnnrlc;
+ flag&=QName::tokenizer().insert(ns, "ftnnruc") == NS_rtf::LN_ftnnruc;
+ flag&=QName::tokenizer().insert(ns, "ftnnzodiac") == NS_rtf::LN_ftnnzodiac;
+ flag&=QName::tokenizer().insert(ns, "ftnnzodiacd") == NS_rtf::LN_ftnnzodiacd;
+ flag&=QName::tokenizer().insert(ns, "ftnnzodiacl") == NS_rtf::LN_ftnnzodiacl;
+ flag&=QName::tokenizer().insert(ns, "ftnrestart") == NS_rtf::LN_ftnrestart;
+ flag&=QName::tokenizer().insert(ns, "ftnrstcont") == NS_rtf::LN_ftnrstcont;
+ flag&=QName::tokenizer().insert(ns, "ftnrstpg") == NS_rtf::LN_ftnrstpg;
+ flag&=QName::tokenizer().insert(ns, "ftnsep") == NS_rtf::LN_ftnsep;
+ flag&=QName::tokenizer().insert(ns, "ftnsepc") == NS_rtf::LN_ftnsepc;
+ flag&=QName::tokenizer().insert(ns, "ftnstart") == NS_rtf::LN_ftnstart;
+ flag&=QName::tokenizer().insert(ns, "ftntj") == NS_rtf::LN_ftntj;
+ flag&=QName::tokenizer().insert(ns, "fttruetype") == NS_rtf::LN_fttruetype;
+ flag&=QName::tokenizer().insert(ns, "fvaliddos") == NS_rtf::LN_fvaliddos;
+ flag&=QName::tokenizer().insert(ns, "fvalidhpfs") == NS_rtf::LN_fvalidhpfs;
+ flag&=QName::tokenizer().insert(ns, "fvalidmac") == NS_rtf::LN_fvalidmac;
+ flag&=QName::tokenizer().insert(ns, "fvalidntfs") == NS_rtf::LN_fvalidntfs;
+ flag&=QName::tokenizer().insert(ns, "g") == NS_rtf::LN_g;
+ flag&=QName::tokenizer().insert(ns, "gcw") == NS_rtf::LN_gcw;
+ flag&=QName::tokenizer().insert(ns, "generator") == NS_rtf::LN_generator;
+ flag&=QName::tokenizer().insert(ns, "green") == NS_rtf::LN_green;
+ flag&=QName::tokenizer().insert(ns, "gridtbl") == NS_rtf::LN_gridtbl;
+ flag&=QName::tokenizer().insert(ns, "gutter") == NS_rtf::LN_gutter;
+ flag&=QName::tokenizer().insert(ns, "gutterprl") == NS_rtf::LN_gutterprl;
+ flag&=QName::tokenizer().insert(ns, "guttersxn") == NS_rtf::LN_guttersxn;
+ flag&=QName::tokenizer().insert(ns, "header") == NS_rtf::LN_header;
+ flag&=QName::tokenizer().insert(ns, "headerf") == NS_rtf::LN_headerf;
+ flag&=QName::tokenizer().insert(ns, "headerl") == NS_rtf::LN_headerl;
+ flag&=QName::tokenizer().insert(ns, "headery") == NS_rtf::LN_headery;
+ flag&=QName::tokenizer().insert(ns, "hich") == NS_rtf::LN_hich;
+ flag&=QName::tokenizer().insert(ns, "highlight") == NS_rtf::LN_highlight;
+ flag&=QName::tokenizer().insert(ns, "hlfr") == NS_rtf::LN_hlfr;
+ flag&=QName::tokenizer().insert(ns, "hlinkbase") == NS_rtf::LN_hlinkbase;
+ flag&=QName::tokenizer().insert(ns, "hlloc") == NS_rtf::LN_hlloc;
+ flag&=QName::tokenizer().insert(ns, "hlsrc") == NS_rtf::LN_hlsrc;
+ flag&=QName::tokenizer().insert(ns, "horzdoc") == NS_rtf::LN_horzdoc;
+ flag&=QName::tokenizer().insert(ns, "horzsect") == NS_rtf::LN_horzsect;
+ flag&=QName::tokenizer().insert(ns, "hr") == NS_rtf::LN_hr;
+ flag&=QName::tokenizer().insert(ns, "htmautsp") == NS_rtf::LN_htmautsp;
+ flag&=QName::tokenizer().insert(ns, "htmlbase") == NS_rtf::LN_htmlbase;
+ flag&=QName::tokenizer().insert(ns, "htmlrtf") == NS_rtf::LN_htmlrtf;
+ flag&=QName::tokenizer().insert(ns, "htmltag") == NS_rtf::LN_htmltag;
+ flag&=QName::tokenizer().insert(ns, "hyphauto") == NS_rtf::LN_hyphauto;
+ flag&=QName::tokenizer().insert(ns, "hyphcaps") == NS_rtf::LN_hyphcaps;
+ flag&=QName::tokenizer().insert(ns, "hyphconsec") == NS_rtf::LN_hyphconsec;
+ flag&=QName::tokenizer().insert(ns, "hyphhotz") == NS_rtf::LN_hyphhotz;
+ flag&=QName::tokenizer().insert(ns, "hyphpar") == NS_rtf::LN_hyphpar;
+ flag&=QName::tokenizer().insert(ns, "i") == NS_rtf::LN_i;
+ flag&=QName::tokenizer().insert(ns, "id") == NS_rtf::LN_id;
+ flag&=QName::tokenizer().insert(ns, "ilvl") == NS_rtf::LN_ilvl;
+ flag&=QName::tokenizer().insert(ns, "impr") == NS_rtf::LN_impr;
+ flag&=QName::tokenizer().insert(ns, "info") == NS_rtf::LN_info;
+ flag&=QName::tokenizer().insert(ns, "insrsid") == NS_rtf::LN_insrsid;
+ flag&=QName::tokenizer().insert(ns, "intbl") == NS_rtf::LN_intbl;
+ flag&=QName::tokenizer().insert(ns, "ipgp") == NS_rtf::LN_ipgp;
+ flag&=QName::tokenizer().insert(ns, "irow") == NS_rtf::LN_irow;
+ flag&=QName::tokenizer().insert(ns, "irowband") == NS_rtf::LN_irowband;
+ flag&=QName::tokenizer().insert(ns, "itap") == NS_rtf::LN_itap;
+ flag&=QName::tokenizer().insert(ns, "ixe") == NS_rtf::LN_ixe;
+ flag&=QName::tokenizer().insert(ns, "jcompress") == NS_rtf::LN_jcompress;
+ flag&=QName::tokenizer().insert(ns, "jexpand") == NS_rtf::LN_jexpand;
+ flag&=QName::tokenizer().insert(ns, "jpegblip") == NS_rtf::LN_jpegblip;
+ flag&=QName::tokenizer().insert(ns, "jsksu") == NS_rtf::LN_jsksu;
+ flag&=QName::tokenizer().insert(ns, "keep") == NS_rtf::LN_keep;
+ flag&=QName::tokenizer().insert(ns, "keepn") == NS_rtf::LN_keepn;
+ flag&=QName::tokenizer().insert(ns, "kerning") == NS_rtf::LN_kerning;
+ flag&=QName::tokenizer().insert(ns, "keycode") == NS_rtf::LN_keycode;
+ flag&=QName::tokenizer().insert(ns, "keywords") == NS_rtf::LN_keywords;
+ flag&=QName::tokenizer().insert(ns, "ksulang") == NS_rtf::LN_ksulang;
+ flag&=QName::tokenizer().insert(ns, "landscape") == NS_rtf::LN_landscape;
+ flag&=QName::tokenizer().insert(ns, "lang") == NS_rtf::LN_lang;
+ flag&=QName::tokenizer().insert(ns, "langfe") == NS_rtf::LN_langfe;
+ flag&=QName::tokenizer().insert(ns, "langfenp") == NS_rtf::LN_langfenp;
+ flag&=QName::tokenizer().insert(ns, "langnp") == NS_rtf::LN_langnp;
+ flag&=QName::tokenizer().insert(ns, "lastrow") == NS_rtf::LN_lastrow;
+ flag&=QName::tokenizer().insert(ns, "lbr") == NS_rtf::LN_lbr;
+ flag&=QName::tokenizer().insert(ns, "lchars") == NS_rtf::LN_lchars;
+ flag&=QName::tokenizer().insert(ns, "ldblquote") == NS_rtf::LN_ldblquote;
+ flag&=QName::tokenizer().insert(ns, "level") == NS_rtf::LN_level;
+ flag&=QName::tokenizer().insert(ns, "levelfollow") == NS_rtf::LN_levelfollow;
+ flag&=QName::tokenizer().insert(ns, "levelindent") == NS_rtf::LN_levelindent;
+ flag&=QName::tokenizer().insert(ns, "leveljc") == NS_rtf::LN_leveljc;
+ flag&=QName::tokenizer().insert(ns, "leveljcn") == NS_rtf::LN_leveljcn;
+ flag&=QName::tokenizer().insert(ns, "levellegal") == NS_rtf::LN_levellegal;
+ flag&=QName::tokenizer().insert(ns, "levelnfc") == NS_rtf::LN_levelnfc;
+ flag&=QName::tokenizer().insert(ns, "levelnfcn") == NS_rtf::LN_levelnfcn;
+ flag&=QName::tokenizer().insert(ns, "levelnorestart") == NS_rtf::LN_levelnorestart;
+ flag&=QName::tokenizer().insert(ns, "levelnumbers") == NS_rtf::LN_levelnumbers;
+ flag&=QName::tokenizer().insert(ns, "levelold") == NS_rtf::LN_levelold;
+ flag&=QName::tokenizer().insert(ns, "levelpicture") == NS_rtf::LN_levelpicture;
+ flag&=QName::tokenizer().insert(ns, "levelprev") == NS_rtf::LN_levelprev;
+ flag&=QName::tokenizer().insert(ns, "levelprevspace") == NS_rtf::LN_levelprevspace;
+ flag&=QName::tokenizer().insert(ns, "psover") == NS_rtf::LN_psover;
+ flag&=QName::tokenizer().insert(ns, "psz") == NS_rtf::LN_psz;
+ flag&=QName::tokenizer().insert(ns, "levelspace") == NS_rtf::LN_levelspace;
+ flag&=QName::tokenizer().insert(ns, "pubauto") == NS_rtf::LN_pubauto;
+ flag&=QName::tokenizer().insert(ns, "levelstartat") == NS_rtf::LN_levelstartat;
+ flag&=QName::tokenizer().insert(ns, "pvmrg") == NS_rtf::LN_pvmrg;
+ flag&=QName::tokenizer().insert(ns, "pvpara") == NS_rtf::LN_pvpara;
+ flag&=QName::tokenizer().insert(ns, "leveltemplateid") == NS_rtf::LN_leveltemplateid;
+ flag&=QName::tokenizer().insert(ns, "pvpg") == NS_rtf::LN_pvpg;
+ flag&=QName::tokenizer().insert(ns, "leveltext") == NS_rtf::LN_leveltext;
+ flag&=QName::tokenizer().insert(ns, "pwd") == NS_rtf::LN_pwd;
+ flag&=QName::tokenizer().insert(ns, "li") == NS_rtf::LN_li;
+ flag&=QName::tokenizer().insert(ns, "pxe") == NS_rtf::LN_pxe;
+ flag&=QName::tokenizer().insert(ns, "line") == NS_rtf::LN_line;
+ flag&=QName::tokenizer().insert(ns, "qc") == NS_rtf::LN_qc;
+ flag&=QName::tokenizer().insert(ns, "qd") == NS_rtf::LN_qd;
+ flag&=QName::tokenizer().insert(ns, "linebetcol") == NS_rtf::LN_linebetcol;
+ flag&=QName::tokenizer().insert(ns, "qj") == NS_rtf::LN_qj;
+ flag&=QName::tokenizer().insert(ns, "linecont") == NS_rtf::LN_linecont;
+ flag&=QName::tokenizer().insert(ns, "qk") == NS_rtf::LN_qk;
+ flag&=QName::tokenizer().insert(ns, "ql") == NS_rtf::LN_ql;
+ flag&=QName::tokenizer().insert(ns, "linemod") == NS_rtf::LN_linemod;
+ flag&=QName::tokenizer().insert(ns, "qmspace") == NS_rtf::LN_qmspace;
+ flag&=QName::tokenizer().insert(ns, "lineppage") == NS_rtf::LN_lineppage;
+ flag&=QName::tokenizer().insert(ns, "qr") == NS_rtf::LN_qr;
+ flag&=QName::tokenizer().insert(ns, "qt") == NS_rtf::LN_qt;
+ flag&=QName::tokenizer().insert(ns, "linerestart") == NS_rtf::LN_linerestart;
+ flag&=QName::tokenizer().insert(ns, "linestart") == NS_rtf::LN_linestart;
+ flag&=QName::tokenizer().insert(ns, "rawclbgbdiag") == NS_rtf::LN_rawclbgbdiag;
+ flag&=QName::tokenizer().insert(ns, "linestarts") == NS_rtf::LN_linestarts;
+ flag&=QName::tokenizer().insert(ns, "rawclbgcross") == NS_rtf::LN_rawclbgcross;
+ flag&=QName::tokenizer().insert(ns, "linex") == NS_rtf::LN_linex;
+ flag&=QName::tokenizer().insert(ns, "rawclbgdcross") == NS_rtf::LN_rawclbgdcross;
+ flag&=QName::tokenizer().insert(ns, "linkself") == NS_rtf::LN_linkself;
+ flag&=QName::tokenizer().insert(ns, "rawbgdkbdiag") == NS_rtf::LN_rawbgdkbdiag;
+ flag&=QName::tokenizer().insert(ns, "linkstyles") == NS_rtf::LN_linkstyles;
+ flag&=QName::tokenizer().insert(ns, "linkval") == NS_rtf::LN_linkval;
+ flag&=QName::tokenizer().insert(ns, "rawclbgdkcross") == NS_rtf::LN_rawclbgdkcross;
+ flag&=QName::tokenizer().insert(ns, "lin") == NS_rtf::LN_lin;
+ flag&=QName::tokenizer().insert(ns, "lisa") == NS_rtf::LN_lisa;
+ flag&=QName::tokenizer().insert(ns, "rawclbgdkdcross") == NS_rtf::LN_rawclbgdkdcross;
+ flag&=QName::tokenizer().insert(ns, "lisb") == NS_rtf::LN_lisb;
+ flag&=QName::tokenizer().insert(ns, "rawclbgdkfdiag") == NS_rtf::LN_rawclbgdkfdiag;
+ flag&=QName::tokenizer().insert(ns, "listhybrid") == NS_rtf::LN_listhybrid;
+ flag&=QName::tokenizer().insert(ns, "listid") == NS_rtf::LN_listid;
+ flag&=QName::tokenizer().insert(ns, "rawclbgdkhor") == NS_rtf::LN_rawclbgdkhor;
+ flag&=QName::tokenizer().insert(ns, "listname") == NS_rtf::LN_listname;
+ flag&=QName::tokenizer().insert(ns, "rawclbgdkvert") == NS_rtf::LN_rawclbgdkvert;
+ flag&=QName::tokenizer().insert(ns, "ab") == NS_rtf::LN_ab;
+ flag&=QName::tokenizer().insert(ns, "listoverridecount") == NS_rtf::LN_listoverridecount;
+ flag&=QName::tokenizer().insert(ns, "rawclbgfdiag") == NS_rtf::LN_rawclbgfdiag;
+ flag&=QName::tokenizer().insert(ns, "absh") == NS_rtf::LN_absh;
+ flag&=QName::tokenizer().insert(ns, "rawclbghoriz") == NS_rtf::LN_rawclbghoriz;
+ flag&=QName::tokenizer().insert(ns, "listoverrideformat") == NS_rtf::LN_listoverrideformat;
+ flag&=QName::tokenizer().insert(ns, "abslock") == NS_rtf::LN_abslock;
+ flag&=QName::tokenizer().insert(ns, "rawclbgvert") == NS_rtf::LN_rawclbgvert;
+ flag&=QName::tokenizer().insert(ns, "listoverridestart") == NS_rtf::LN_listoverridestart;
+ flag&=QName::tokenizer().insert(ns, "rdblquote") == NS_rtf::LN_rdblquote;
+ flag&=QName::tokenizer().insert(ns, "absnoovrlp") == NS_rtf::LN_absnoovrlp;
+ flag&=QName::tokenizer().insert(ns, "red") == NS_rtf::LN_red;
+ flag&=QName::tokenizer().insert(ns, "listpicture") == NS_rtf::LN_listpicture;
+ flag&=QName::tokenizer().insert(ns, "absw") == NS_rtf::LN_absw;
+ flag&=QName::tokenizer().insert(ns, "rempersonalinfo") == NS_rtf::LN_rempersonalinfo;
+ flag&=QName::tokenizer().insert(ns, "acaps") == NS_rtf::LN_acaps;
+ flag&=QName::tokenizer().insert(ns, "listrestarthdn") == NS_rtf::LN_listrestarthdn;
+ flag&=QName::tokenizer().insert(ns, "result") == NS_rtf::LN_result;
+ flag&=QName::tokenizer().insert(ns, "acccomma") == NS_rtf::LN_acccomma;
+ flag&=QName::tokenizer().insert(ns, "listsimple") == NS_rtf::LN_listsimple;
+ flag&=QName::tokenizer().insert(ns, "revauth") == NS_rtf::LN_revauth;
+ flag&=QName::tokenizer().insert(ns, "accdot") == NS_rtf::LN_accdot;
+ flag&=QName::tokenizer().insert(ns, "liststyleid") == NS_rtf::LN_liststyleid;
+ flag&=QName::tokenizer().insert(ns, "accnone") == NS_rtf::LN_accnone;
+ flag&=QName::tokenizer().insert(ns, "revauthdel") == NS_rtf::LN_revauthdel;
+ flag&=QName::tokenizer().insert(ns, "acf") == NS_rtf::LN_acf;
+ flag&=QName::tokenizer().insert(ns, "liststylename") == NS_rtf::LN_liststylename;
+ flag&=QName::tokenizer().insert(ns, "revbar") == NS_rtf::LN_revbar;
+ flag&=QName::tokenizer().insert(ns, "additive") == NS_rtf::LN_additive;
+ flag&=QName::tokenizer().insert(ns, "revdttm") == NS_rtf::LN_revdttm;
+ flag&=QName::tokenizer().insert(ns, "listtemplateid") == NS_rtf::LN_listtemplateid;
+ flag&=QName::tokenizer().insert(ns, "adjustright") == NS_rtf::LN_adjustright;
+ flag&=QName::tokenizer().insert(ns, "revdttmdel") == NS_rtf::LN_revdttmdel;
+ flag&=QName::tokenizer().insert(ns, "adn") == NS_rtf::LN_adn;
+ flag&=QName::tokenizer().insert(ns, "listtext") == NS_rtf::LN_listtext;
+ flag&=QName::tokenizer().insert(ns, "revised") == NS_rtf::LN_revised;
+ flag&=QName::tokenizer().insert(ns, "aenddoc") == NS_rtf::LN_aenddoc;
+ flag&=QName::tokenizer().insert(ns, "lnbrkrule") == NS_rtf::LN_lnbrkrule;
+ flag&=QName::tokenizer().insert(ns, "revisions") == NS_rtf::LN_revisions;
+ flag&=QName::tokenizer().insert(ns, "aendnotes") == NS_rtf::LN_aendnotes;
+ flag&=QName::tokenizer().insert(ns, "lndscpsxn") == NS_rtf::LN_lndscpsxn;
+ flag&=QName::tokenizer().insert(ns, "revprop") == NS_rtf::LN_revprop;
+ flag&=QName::tokenizer().insert(ns, "aexpnd") == NS_rtf::LN_aexpnd;
+ flag&=QName::tokenizer().insert(ns, "lnongrid") == NS_rtf::LN_lnongrid;
+ flag&=QName::tokenizer().insert(ns, "revprot") == NS_rtf::LN_revprot;
+ flag&=QName::tokenizer().insert(ns, "af") == NS_rtf::LN_af;
+ flag&=QName::tokenizer().insert(ns, "loch") == NS_rtf::LN_loch;
+ flag&=QName::tokenizer().insert(ns, "revtbl") == NS_rtf::LN_revtbl;
+ flag&=QName::tokenizer().insert(ns, "affixed") == NS_rtf::LN_affixed;
+ flag&=QName::tokenizer().insert(ns, "lquote") == NS_rtf::LN_lquote;
+ flag&=QName::tokenizer().insert(ns, "revtim") == NS_rtf::LN_revtim;
+ flag&=QName::tokenizer().insert(ns, "afs") == NS_rtf::LN_afs;
+ flag&=QName::tokenizer().insert(ns, "ls") == NS_rtf::LN_ls;
+ flag&=QName::tokenizer().insert(ns, "ri") == NS_rtf::LN_ri;
+ flag&=QName::tokenizer().insert(ns, "aftnbj") == NS_rtf::LN_aftnbj;
+ flag&=QName::tokenizer().insert(ns, "ltrch") == NS_rtf::LN_ltrch;
+ flag&=QName::tokenizer().insert(ns, "rin") == NS_rtf::LN_rin;
+ flag&=QName::tokenizer().insert(ns, "row") == NS_rtf::LN_row;
+ flag&=QName::tokenizer().insert(ns, "aftncn") == NS_rtf::LN_aftncn;
+ flag&=QName::tokenizer().insert(ns, "ltrdoc") == NS_rtf::LN_ltrdoc;
+ flag&=QName::tokenizer().insert(ns, "rquote") == NS_rtf::LN_rquote;
+ flag&=QName::tokenizer().insert(ns, "ltrmark") == NS_rtf::LN_ltrmark;
+ flag&=QName::tokenizer().insert(ns, "rsid") == NS_rtf::LN_rsid;
+ flag&=QName::tokenizer().insert(ns, "ltrpar") == NS_rtf::LN_ltrpar;
+ flag&=QName::tokenizer().insert(ns, "aftnnalc") == NS_rtf::LN_aftnnalc;
+ flag&=QName::tokenizer().insert(ns, "rsidroot") == NS_rtf::LN_rsidroot;
+ flag&=QName::tokenizer().insert(ns, "ltrrow") == NS_rtf::LN_ltrrow;
+ flag&=QName::tokenizer().insert(ns, "aftnnar") == NS_rtf::LN_aftnnar;
+ flag&=QName::tokenizer().insert(ns, "rsidtbl") == NS_rtf::LN_rsidtbl;
+ flag&=QName::tokenizer().insert(ns, "ltrsect") == NS_rtf::LN_ltrsect;
+ flag&=QName::tokenizer().insert(ns, "aftnnauc") == NS_rtf::LN_aftnnauc;
+ flag&=QName::tokenizer().insert(ns, "rsltbmp") == NS_rtf::LN_rsltbmp;
+ flag&=QName::tokenizer().insert(ns, "aftnnchi") == NS_rtf::LN_aftnnchi;
+ flag&=QName::tokenizer().insert(ns, "rslthtml") == NS_rtf::LN_rslthtml;
+ flag&=QName::tokenizer().insert(ns, "lytcalctblwd") == NS_rtf::LN_lytcalctblwd;
+ flag&=QName::tokenizer().insert(ns, "rsltmerge") == NS_rtf::LN_rsltmerge;
+ flag&=QName::tokenizer().insert(ns, "lytexcttp") == NS_rtf::LN_lytexcttp;
+ flag&=QName::tokenizer().insert(ns, "aftnnchosung") == NS_rtf::LN_aftnnchosung;
+ flag&=QName::tokenizer().insert(ns, "rsltpict") == NS_rtf::LN_rsltpict;
+ flag&=QName::tokenizer().insert(ns, "lytprtmet") == NS_rtf::LN_lytprtmet;
+ flag&=QName::tokenizer().insert(ns, "aftnncnum") == NS_rtf::LN_aftnncnum;
+ flag&=QName::tokenizer().insert(ns, "rsltrtf") == NS_rtf::LN_rsltrtf;
+ flag&=QName::tokenizer().insert(ns, "lyttblrtgr") == NS_rtf::LN_lyttblrtgr;
+ flag&=QName::tokenizer().insert(ns, "aftnndbar") == NS_rtf::LN_aftnndbar;
+ flag&=QName::tokenizer().insert(ns, "rslttxt") == NS_rtf::LN_rslttxt;
+ flag&=QName::tokenizer().insert(ns, "mac") == NS_rtf::LN_mac;
+ flag&=QName::tokenizer().insert(ns, "aftnndbnum") == NS_rtf::LN_aftnndbnum;
+ flag&=QName::tokenizer().insert(ns, "rtf") == NS_rtf::LN_rtf;
+ flag&=QName::tokenizer().insert(ns, "macpict") == NS_rtf::LN_macpict;
+ flag&=QName::tokenizer().insert(ns, "rtlch") == NS_rtf::LN_rtlch;
+ flag&=QName::tokenizer().insert(ns, "aftnndbnumd") == NS_rtf::LN_aftnndbnumd;
+ flag&=QName::tokenizer().insert(ns, "makebackup") == NS_rtf::LN_makebackup;
+ flag&=QName::tokenizer().insert(ns, "rtldoc") == NS_rtf::LN_rtldoc;
+ flag&=QName::tokenizer().insert(ns, "aftnndbnumk") == NS_rtf::LN_aftnndbnumk;
+ flag&=QName::tokenizer().insert(ns, "manager") == NS_rtf::LN_manager;
+ flag&=QName::tokenizer().insert(ns, "rtlgutter") == NS_rtf::LN_rtlgutter;
+ flag&=QName::tokenizer().insert(ns, "margb") == NS_rtf::LN_margb;
+ flag&=QName::tokenizer().insert(ns, "aftnndbnumt") == NS_rtf::LN_aftnndbnumt;
+ flag&=QName::tokenizer().insert(ns, "rtlmark") == NS_rtf::LN_rtlmark;
+ flag&=QName::tokenizer().insert(ns, "margbsxn") == NS_rtf::LN_margbsxn;
+ flag&=QName::tokenizer().insert(ns, "aftnnganada") == NS_rtf::LN_aftnnganada;
+ flag&=QName::tokenizer().insert(ns, "rtlpar") == NS_rtf::LN_rtlpar;
+ flag&=QName::tokenizer().insert(ns, "margl") == NS_rtf::LN_margl;
+ flag&=QName::tokenizer().insert(ns, "rtlrow") == NS_rtf::LN_rtlrow;
+ flag&=QName::tokenizer().insert(ns, "aftnngbnum") == NS_rtf::LN_aftnngbnum;
+ flag&=QName::tokenizer().insert(ns, "marglsxn") == NS_rtf::LN_marglsxn;
+ flag&=QName::tokenizer().insert(ns, "rtlsect") == NS_rtf::LN_rtlsect;
+ flag&=QName::tokenizer().insert(ns, "aftnngbnumd") == NS_rtf::LN_aftnngbnumd;
+ flag&=QName::tokenizer().insert(ns, "margmirror") == NS_rtf::LN_margmirror;
+ flag&=QName::tokenizer().insert(ns, "rxe") == NS_rtf::LN_rxe;
+ flag&=QName::tokenizer().insert(ns, "s") == NS_rtf::LN_s;
+ flag&=QName::tokenizer().insert(ns, "margr") == NS_rtf::LN_margr;
+ flag&=QName::tokenizer().insert(ns, "aftnngbnumk") == NS_rtf::LN_aftnngbnumk;
+ flag&=QName::tokenizer().insert(ns, "sa") == NS_rtf::LN_sa;
+ flag&=QName::tokenizer().insert(ns, "margrsxn") == NS_rtf::LN_margrsxn;
+ flag&=QName::tokenizer().insert(ns, "saauto") == NS_rtf::LN_saauto;
+ flag&=QName::tokenizer().insert(ns, "aftnngbnuml") == NS_rtf::LN_aftnngbnuml;
+ flag&=QName::tokenizer().insert(ns, "margt") == NS_rtf::LN_margt;
+ flag&=QName::tokenizer().insert(ns, "aftnnrlc") == NS_rtf::LN_aftnnrlc;
+ flag&=QName::tokenizer().insert(ns, "saftnnalc") == NS_rtf::LN_saftnnalc;
+ flag&=QName::tokenizer().insert(ns, "margtsxn") == NS_rtf::LN_margtsxn;
+ flag&=QName::tokenizer().insert(ns, "aftnnruc") == NS_rtf::LN_aftnnruc;
+ flag&=QName::tokenizer().insert(ns, "saftnnar") == NS_rtf::LN_saftnnar;
+ flag&=QName::tokenizer().insert(ns, "mhtmltag") == NS_rtf::LN_mhtmltag;
+ flag&=QName::tokenizer().insert(ns, "saftnnauc") == NS_rtf::LN_saftnnauc;
+ flag&=QName::tokenizer().insert(ns, "aftnnzodiac") == NS_rtf::LN_aftnnzodiac;
+ flag&=QName::tokenizer().insert(ns, "min") == NS_rtf::LN_min;
+ flag&=QName::tokenizer().insert(ns, "mo") == NS_rtf::LN_mo;
+ flag&=QName::tokenizer().insert(ns, "saftnnchi") == NS_rtf::LN_saftnnchi;
+ flag&=QName::tokenizer().insert(ns, "aftnnzodiacd") == NS_rtf::LN_aftnnzodiacd;
+ flag&=QName::tokenizer().insert(ns, "msmcap") == NS_rtf::LN_msmcap;
+ flag&=QName::tokenizer().insert(ns, "saftnnchosung") == NS_rtf::LN_saftnnchosung;
+ flag&=QName::tokenizer().insert(ns, "aftnnzodiacl") == NS_rtf::LN_aftnnzodiacl;
+ flag&=QName::tokenizer().insert(ns, "nestcell") == NS_rtf::LN_nestcell;
+ flag&=QName::tokenizer().insert(ns, "saftnncnum") == NS_rtf::LN_saftnncnum;
+ flag&=QName::tokenizer().insert(ns, "nestrow") == NS_rtf::LN_nestrow;
+ flag&=QName::tokenizer().insert(ns, "aftnrestart") == NS_rtf::LN_aftnrestart;
+ flag&=QName::tokenizer().insert(ns, "saftnndbar") == NS_rtf::LN_saftnndbar;
+ flag&=QName::tokenizer().insert(ns, "aftnrstcont") == NS_rtf::LN_aftnrstcont;
+ flag&=QName::tokenizer().insert(ns, "nesttableprops") == NS_rtf::LN_nesttableprops;
+ flag&=QName::tokenizer().insert(ns, "saftnndbnum") == NS_rtf::LN_saftnndbnum;
+ flag&=QName::tokenizer().insert(ns, "aftnsep") == NS_rtf::LN_aftnsep;
+ flag&=QName::tokenizer().insert(ns, "nextfile") == NS_rtf::LN_nextfile;
+ flag&=QName::tokenizer().insert(ns, "aftnsepc") == NS_rtf::LN_aftnsepc;
+ flag&=QName::tokenizer().insert(ns, "saftnndbnumd") == NS_rtf::LN_saftnndbnumd;
+ flag&=QName::tokenizer().insert(ns, "nobrkwrptbl") == NS_rtf::LN_nobrkwrptbl;
+ flag&=QName::tokenizer().insert(ns, "aftnstart") == NS_rtf::LN_aftnstart;
+ flag&=QName::tokenizer().insert(ns, "nocolbal") == NS_rtf::LN_nocolbal;
+ flag&=QName::tokenizer().insert(ns, "saftnndbnumk") == NS_rtf::LN_saftnndbnumk;
+ flag&=QName::tokenizer().insert(ns, "aftntj") == NS_rtf::LN_aftntj;
+ flag&=QName::tokenizer().insert(ns, "ai") == NS_rtf::LN_ai;
+ flag&=QName::tokenizer().insert(ns, "saftnndbnumt") == NS_rtf::LN_saftnndbnumt;
+ flag&=QName::tokenizer().insert(ns, "nocompatoptions") == NS_rtf::LN_nocompatoptions;
+ flag&=QName::tokenizer().insert(ns, "alang") == NS_rtf::LN_alang;
+ flag&=QName::tokenizer().insert(ns, "nocwrap") == NS_rtf::LN_nocwrap;
+ flag&=QName::tokenizer().insert(ns, "saftnnganada") == NS_rtf::LN_saftnnganada;
+ flag&=QName::tokenizer().insert(ns, "noextrasprl") == NS_rtf::LN_noextrasprl;
+ flag&=QName::tokenizer().insert(ns, "allowfieldendsel") == NS_rtf::LN_allowfieldendsel;
+ flag&=QName::tokenizer().insert(ns, "saftnngbnum") == NS_rtf::LN_saftnngbnum;
+ flag&=QName::tokenizer().insert(ns, "allprot") == NS_rtf::LN_allprot;
+ flag&=QName::tokenizer().insert(ns, "nofchars") == NS_rtf::LN_nofchars;
+ flag&=QName::tokenizer().insert(ns, "saftnngbnumd") == NS_rtf::LN_saftnngbnumd;
+ flag&=QName::tokenizer().insert(ns, "alntblind") == NS_rtf::LN_alntblind;
+ flag&=QName::tokenizer().insert(ns, "nofcharsws") == NS_rtf::LN_nofcharsws;
+ flag&=QName::tokenizer().insert(ns, "saftnngbnumk") == NS_rtf::LN_saftnngbnumk;
+ flag&=QName::tokenizer().insert(ns, "alt") == NS_rtf::LN_alt;
+ flag&=QName::tokenizer().insert(ns, "nofpages") == NS_rtf::LN_nofpages;
+ flag&=QName::tokenizer().insert(ns, "animtext") == NS_rtf::LN_animtext;
+ flag&=QName::tokenizer().insert(ns, "saftnngbnuml") == NS_rtf::LN_saftnngbnuml;
+ flag&=QName::tokenizer().insert(ns, "nofwords") == NS_rtf::LN_nofwords;
+ flag&=QName::tokenizer().insert(ns, "annotation") == NS_rtf::LN_annotation;
+ flag&=QName::tokenizer().insert(ns, "saftnnrlc") == NS_rtf::LN_saftnnrlc;
+ flag&=QName::tokenizer().insert(ns, "nolead") == NS_rtf::LN_nolead;
+ flag&=QName::tokenizer().insert(ns, "annotprot") == NS_rtf::LN_annotprot;
+ flag&=QName::tokenizer().insert(ns, "noline") == NS_rtf::LN_noline;
+ flag&=QName::tokenizer().insert(ns, "saftnnruc") == NS_rtf::LN_saftnnruc;
+ flag&=QName::tokenizer().insert(ns, "ansi") == NS_rtf::LN_ansi;
+ flag&=QName::tokenizer().insert(ns, "ansicpg") == NS_rtf::LN_ansicpg;
+ flag&=QName::tokenizer().insert(ns, "nolnhtadjtbl") == NS_rtf::LN_nolnhtadjtbl;
+ flag&=QName::tokenizer().insert(ns, "saftnnzodiac") == NS_rtf::LN_saftnnzodiac;
+ flag&=QName::tokenizer().insert(ns, "aoutl") == NS_rtf::LN_aoutl;
+ flag&=QName::tokenizer().insert(ns, "nonesttables") == NS_rtf::LN_nonesttables;
+ flag&=QName::tokenizer().insert(ns, "saftnnzodiacd") == NS_rtf::LN_saftnnzodiacd;
+ flag&=QName::tokenizer().insert(ns, "ApplyBrkRules") == NS_rtf::LN_ApplyBrkRules;
+ flag&=QName::tokenizer().insert(ns, "nonshppict") == NS_rtf::LN_nonshppict;
+ flag&=QName::tokenizer().insert(ns, "saftnnzodiacl") == NS_rtf::LN_saftnnzodiacl;
+ flag&=QName::tokenizer().insert(ns, "ascaps") == NS_rtf::LN_ascaps;
+ flag&=QName::tokenizer().insert(ns, "nooverflow") == NS_rtf::LN_nooverflow;
+ flag&=QName::tokenizer().insert(ns, "ashad") == NS_rtf::LN_ashad;
+ flag&=QName::tokenizer().insert(ns, "saftnrestart") == NS_rtf::LN_saftnrestart;
+ flag&=QName::tokenizer().insert(ns, "noproof") == NS_rtf::LN_noproof;
+ flag&=QName::tokenizer().insert(ns, "asianbrkrule") == NS_rtf::LN_asianbrkrule;
+ flag&=QName::tokenizer().insert(ns, "saftnrstcont") == NS_rtf::LN_saftnrstcont;
+ flag&=QName::tokenizer().insert(ns, "nosectexpand") == NS_rtf::LN_nosectexpand;
+ flag&=QName::tokenizer().insert(ns, "aspalpha") == NS_rtf::LN_aspalpha;
+ flag&=QName::tokenizer().insert(ns, "saftnstart") == NS_rtf::LN_saftnstart;
+ flag&=QName::tokenizer().insert(ns, "aspnum") == NS_rtf::LN_aspnum;
+ flag&=QName::tokenizer().insert(ns, "nosnaplinegrid") == NS_rtf::LN_nosnaplinegrid;
+ flag&=QName::tokenizer().insert(ns, "sautoupd") == NS_rtf::LN_sautoupd;
+ flag&=QName::tokenizer().insert(ns, "astrike") == NS_rtf::LN_astrike;
+ flag&=QName::tokenizer().insert(ns, "sb") == NS_rtf::LN_sb;
+ flag&=QName::tokenizer().insert(ns, "nospaceforul") == NS_rtf::LN_nospaceforul;
+ flag&=QName::tokenizer().insert(ns, "atnauthor") == NS_rtf::LN_atnauthor;
+ flag&=QName::tokenizer().insert(ns, "sbasedon") == NS_rtf::LN_sbasedon;
+ flag&=QName::tokenizer().insert(ns, "nosupersub") == NS_rtf::LN_nosupersub;
+ flag&=QName::tokenizer().insert(ns, "atndate") == NS_rtf::LN_atndate;
+ flag&=QName::tokenizer().insert(ns, "sbauto") == NS_rtf::LN_sbauto;
+ flag&=QName::tokenizer().insert(ns, "notabind") == NS_rtf::LN_notabind;
+ flag&=QName::tokenizer().insert(ns, "atnicn") == NS_rtf::LN_atnicn;
+ flag&=QName::tokenizer().insert(ns, "sbkcol") == NS_rtf::LN_sbkcol;
+ flag&=QName::tokenizer().insert(ns, "atnid") == NS_rtf::LN_atnid;
+ flag&=QName::tokenizer().insert(ns, "noultrlspc") == NS_rtf::LN_noultrlspc;
+ flag&=QName::tokenizer().insert(ns, "sbkeven") == NS_rtf::LN_sbkeven;
+ flag&=QName::tokenizer().insert(ns, "atnparent") == NS_rtf::LN_atnparent;
+ flag&=QName::tokenizer().insert(ns, "sbknone") == NS_rtf::LN_sbknone;
+ flag&=QName::tokenizer().insert(ns, "nowidctlpar") == NS_rtf::LN_nowidctlpar;
+ flag&=QName::tokenizer().insert(ns, "atnref") == NS_rtf::LN_atnref;
+ flag&=QName::tokenizer().insert(ns, "sbkodd") == NS_rtf::LN_sbkodd;
+ flag&=QName::tokenizer().insert(ns, "nowrap") == NS_rtf::LN_nowrap;
+ flag&=QName::tokenizer().insert(ns, "atntime") == NS_rtf::LN_atntime;
+ flag&=QName::tokenizer().insert(ns, "sbkpage") == NS_rtf::LN_sbkpage;
+ flag&=QName::tokenizer().insert(ns, "nowwrap") == NS_rtf::LN_nowwrap;
+ flag&=QName::tokenizer().insert(ns, "sbys") == NS_rtf::LN_sbys;
+ flag&=QName::tokenizer().insert(ns, "atrfend") == NS_rtf::LN_atrfend;
+ flag&=QName::tokenizer().insert(ns, "noxlattoyen") == NS_rtf::LN_noxlattoyen;
+ flag&=QName::tokenizer().insert(ns, "scaps") == NS_rtf::LN_scaps;
+ flag&=QName::tokenizer().insert(ns, "atrfstart") == NS_rtf::LN_atrfstart;
+ flag&=QName::tokenizer().insert(ns, "objalias") == NS_rtf::LN_objalias;
+ flag&=QName::tokenizer().insert(ns, "scompose") == NS_rtf::LN_scompose;
+ flag&=QName::tokenizer().insert(ns, "aul") == NS_rtf::LN_aul;
+ flag&=QName::tokenizer().insert(ns, "objalign") == NS_rtf::LN_objalign;
+ flag&=QName::tokenizer().insert(ns, "sec") == NS_rtf::LN_sec;
+ flag&=QName::tokenizer().insert(ns, "auld") == NS_rtf::LN_auld;
+ flag&=QName::tokenizer().insert(ns, "sect") == NS_rtf::LN_sect;
+ flag&=QName::tokenizer().insert(ns, "auldb") == NS_rtf::LN_auldb;
+ flag&=QName::tokenizer().insert(ns, "objattph") == NS_rtf::LN_objattph;
+ flag&=QName::tokenizer().insert(ns, "sectd") == NS_rtf::LN_sectd;
+ flag&=QName::tokenizer().insert(ns, "aulnone") == NS_rtf::LN_aulnone;
+ flag&=QName::tokenizer().insert(ns, "objautlink") == NS_rtf::LN_objautlink;
+ flag&=QName::tokenizer().insert(ns, "sectdefaultcl") == NS_rtf::LN_sectdefaultcl;
+ flag&=QName::tokenizer().insert(ns, "aulw") == NS_rtf::LN_aulw;
+ flag&=QName::tokenizer().insert(ns, "objclass") == NS_rtf::LN_objclass;
+ flag&=QName::tokenizer().insert(ns, "aup") == NS_rtf::LN_aup;
+ flag&=QName::tokenizer().insert(ns, "sectexpand") == NS_rtf::LN_sectexpand;
+ flag&=QName::tokenizer().insert(ns, "objcropb") == NS_rtf::LN_objcropb;
+ flag&=QName::tokenizer().insert(ns, "author") == NS_rtf::LN_author;
+ flag&=QName::tokenizer().insert(ns, "b") == NS_rtf::LN_b;
+ flag&=QName::tokenizer().insert(ns, "sectlinegrid") == NS_rtf::LN_sectlinegrid;
+ flag&=QName::tokenizer().insert(ns, "objcropl") == NS_rtf::LN_objcropl;
+ flag&=QName::tokenizer().insert(ns, "background") == NS_rtf::LN_background;
+ flag&=QName::tokenizer().insert(ns, "sectnum") == NS_rtf::LN_sectnum;
+ flag&=QName::tokenizer().insert(ns, "objcropr") == NS_rtf::LN_objcropr;
+ flag&=QName::tokenizer().insert(ns, "bdbfhdr") == NS_rtf::LN_bdbfhdr;
+ flag&=QName::tokenizer().insert(ns, "sectrsid") == NS_rtf::LN_sectrsid;
+ flag&=QName::tokenizer().insert(ns, "objcropt") == NS_rtf::LN_objcropt;
+ flag&=QName::tokenizer().insert(ns, "bdrrlswsix") == NS_rtf::LN_bdrrlswsix;
+ flag&=QName::tokenizer().insert(ns, "objdata") == NS_rtf::LN_objdata;
+ flag&=QName::tokenizer().insert(ns, "bgbdiag") == NS_rtf::LN_bgbdiag;
+ flag&=QName::tokenizer().insert(ns, "sectspecifycl") == NS_rtf::LN_sectspecifycl;
+ flag&=QName::tokenizer().insert(ns, "object") == NS_rtf::LN_object;
+ flag&=QName::tokenizer().insert(ns, "bgcross") == NS_rtf::LN_bgcross;
+ flag&=QName::tokenizer().insert(ns, "objemb") == NS_rtf::LN_objemb;
+ flag&=QName::tokenizer().insert(ns, "sectspecifygen") == NS_rtf::LN_sectspecifygen;
+ flag&=QName::tokenizer().insert(ns, "bgdcross") == NS_rtf::LN_bgdcross;
+ flag&=QName::tokenizer().insert(ns, "objh") == NS_rtf::LN_objh;
+ flag&=QName::tokenizer().insert(ns, "sectspecifyl") == NS_rtf::LN_sectspecifyl;
+ flag&=QName::tokenizer().insert(ns, "objhtml") == NS_rtf::LN_objhtml;
+ flag&=QName::tokenizer().insert(ns, "bgdkbdiag") == NS_rtf::LN_bgdkbdiag;
+ flag&=QName::tokenizer().insert(ns, "sectunlocked") == NS_rtf::LN_sectunlocked;
+ flag&=QName::tokenizer().insert(ns, "objicemb") == NS_rtf::LN_objicemb;
+ flag&=QName::tokenizer().insert(ns, "bgdkcross") == NS_rtf::LN_bgdkcross;
+ flag&=QName::tokenizer().insert(ns, "sftnbj") == NS_rtf::LN_sftnbj;
+ flag&=QName::tokenizer().insert(ns, "objlink") == NS_rtf::LN_objlink;
+ flag&=QName::tokenizer().insert(ns, "bgdkdcross") == NS_rtf::LN_bgdkdcross;
+ flag&=QName::tokenizer().insert(ns, "sftnnalc") == NS_rtf::LN_sftnnalc;
+ flag&=QName::tokenizer().insert(ns, "objlock") == NS_rtf::LN_objlock;
+ flag&=QName::tokenizer().insert(ns, "bgdkfdiag") == NS_rtf::LN_bgdkfdiag;
+ flag&=QName::tokenizer().insert(ns, "sftnnar") == NS_rtf::LN_sftnnar;
+ flag&=QName::tokenizer().insert(ns, "objname") == NS_rtf::LN_objname;
+ flag&=QName::tokenizer().insert(ns, "bgdkhoriz") == NS_rtf::LN_bgdkhoriz;
+ flag&=QName::tokenizer().insert(ns, "objocx") == NS_rtf::LN_objocx;
+ flag&=QName::tokenizer().insert(ns, "sftnnauc") == NS_rtf::LN_sftnnauc;
+ flag&=QName::tokenizer().insert(ns, "bgdkvert") == NS_rtf::LN_bgdkvert;
+ flag&=QName::tokenizer().insert(ns, "objpub") == NS_rtf::LN_objpub;
+ flag&=QName::tokenizer().insert(ns, "sftnnchi") == NS_rtf::LN_sftnnchi;
+ flag&=QName::tokenizer().insert(ns, "bgfdiag") == NS_rtf::LN_bgfdiag;
+ flag&=QName::tokenizer().insert(ns, "objscalex") == NS_rtf::LN_objscalex;
+ flag&=QName::tokenizer().insert(ns, "sftnnchosung") == NS_rtf::LN_sftnnchosung;
+ flag&=QName::tokenizer().insert(ns, "bghoriz") == NS_rtf::LN_bghoriz;
+ flag&=QName::tokenizer().insert(ns, "objscaley") == NS_rtf::LN_objscaley;
+ flag&=QName::tokenizer().insert(ns, "sftnncnum") == NS_rtf::LN_sftnncnum;
+ flag&=QName::tokenizer().insert(ns, "bgvert") == NS_rtf::LN_bgvert;
+ flag&=QName::tokenizer().insert(ns, "bin") == NS_rtf::LN_bin;
+ flag&=QName::tokenizer().insert(ns, "objsect") == NS_rtf::LN_objsect;
+ flag&=QName::tokenizer().insert(ns, "sftnndbar") == NS_rtf::LN_sftnndbar;
+ flag&=QName::tokenizer().insert(ns, "binfsxn") == NS_rtf::LN_binfsxn;
+ flag&=QName::tokenizer().insert(ns, "objsetsize") == NS_rtf::LN_objsetsize;
+ flag&=QName::tokenizer().insert(ns, "sftnndbnum") == NS_rtf::LN_sftnndbnum;
+ flag&=QName::tokenizer().insert(ns, "binsxn") == NS_rtf::LN_binsxn;
+ flag&=QName::tokenizer().insert(ns, "objsub") == NS_rtf::LN_objsub;
+ flag&=QName::tokenizer().insert(ns, "sftnndbnumd") == NS_rtf::LN_sftnndbnumd;
+ flag&=QName::tokenizer().insert(ns, "bkmkcolf") == NS_rtf::LN_bkmkcolf;
+ flag&=QName::tokenizer().insert(ns, "objtime") == NS_rtf::LN_objtime;
+ flag&=QName::tokenizer().insert(ns, "bkmkcoll") == NS_rtf::LN_bkmkcoll;
+ flag&=QName::tokenizer().insert(ns, "sftnndbnumk") == NS_rtf::LN_sftnndbnumk;
+ flag&=QName::tokenizer().insert(ns, "objtransy") == NS_rtf::LN_objtransy;
+ flag&=QName::tokenizer().insert(ns, "bkmkend") == NS_rtf::LN_bkmkend;
+ flag&=QName::tokenizer().insert(ns, "objupdate") == NS_rtf::LN_objupdate;
+ flag&=QName::tokenizer().insert(ns, "sftnndbnumt") == NS_rtf::LN_sftnndbnumt;
+ flag&=QName::tokenizer().insert(ns, "bkmkpub") == NS_rtf::LN_bkmkpub;
+ flag&=QName::tokenizer().insert(ns, "objw") == NS_rtf::LN_objw;
+ flag&=QName::tokenizer().insert(ns, "sftnnganada") == NS_rtf::LN_sftnnganada;
+ flag&=QName::tokenizer().insert(ns, "oldas") == NS_rtf::LN_oldas;
+ flag&=QName::tokenizer().insert(ns, "bkmkstart") == NS_rtf::LN_bkmkstart;
+ flag&=QName::tokenizer().insert(ns, "sftnngbnum") == NS_rtf::LN_sftnngbnum;
+ flag&=QName::tokenizer().insert(ns, "bliptag") == NS_rtf::LN_bliptag;
+ flag&=QName::tokenizer().insert(ns, "oldcprops") == NS_rtf::LN_oldcprops;
+ flag&=QName::tokenizer().insert(ns, "sftnngbnumd") == NS_rtf::LN_sftnngbnumd;
+ flag&=QName::tokenizer().insert(ns, "blipuid") == NS_rtf::LN_blipuid;
+ flag&=QName::tokenizer().insert(ns, "oldpprops") == NS_rtf::LN_oldpprops;
+ flag&=QName::tokenizer().insert(ns, "blipupi") == NS_rtf::LN_blipupi;
+ flag&=QName::tokenizer().insert(ns, "sftnngbnumk") == NS_rtf::LN_sftnngbnumk;
+ flag&=QName::tokenizer().insert(ns, "oldsprops") == NS_rtf::LN_oldsprops;
+ flag&=QName::tokenizer().insert(ns, "blue") == NS_rtf::LN_blue;
+ flag&=QName::tokenizer().insert(ns, "oldtprops") == NS_rtf::LN_oldtprops;
+ flag&=QName::tokenizer().insert(ns, "sftnngbnuml") == NS_rtf::LN_sftnngbnuml;
+ flag&=QName::tokenizer().insert(ns, "bookfold") == NS_rtf::LN_bookfold;
+ flag&=QName::tokenizer().insert(ns, "sftnnrlc") == NS_rtf::LN_sftnnrlc;
+ flag&=QName::tokenizer().insert(ns, "oldlinewrap") == NS_rtf::LN_oldlinewrap;
+ flag&=QName::tokenizer().insert(ns, "bookfoldrev") == NS_rtf::LN_bookfoldrev;
+ flag&=QName::tokenizer().insert(ns, "operator") == NS_rtf::LN_operator;
+ flag&=QName::tokenizer().insert(ns, "sftnnruc") == NS_rtf::LN_sftnnruc;
+ flag&=QName::tokenizer().insert(ns, "otblrul") == NS_rtf::LN_otblrul;
+ flag&=QName::tokenizer().insert(ns, "bookfoldsheets") == NS_rtf::LN_bookfoldsheets;
+ flag&=QName::tokenizer().insert(ns, "box") == NS_rtf::LN_box;
+ flag&=QName::tokenizer().insert(ns, "sftnnzodiac") == NS_rtf::LN_sftnnzodiac;
+ flag&=QName::tokenizer().insert(ns, "outl") == NS_rtf::LN_outl;
+ flag&=QName::tokenizer().insert(ns, "brdrart") == NS_rtf::LN_brdrart;
+ flag&=QName::tokenizer().insert(ns, "sftnnzodiacd") == NS_rtf::LN_sftnnzodiacd;
+ flag&=QName::tokenizer().insert(ns, "outlinelevel") == NS_rtf::LN_outlinelevel;
+ flag&=QName::tokenizer().insert(ns, "brdrb") == NS_rtf::LN_brdrb;
+ flag&=QName::tokenizer().insert(ns, "overlay") == NS_rtf::LN_overlay;
+ flag&=QName::tokenizer().insert(ns, "sftnnzodiacl") == NS_rtf::LN_sftnnzodiacl;
+ flag&=QName::tokenizer().insert(ns, "brdrbar") == NS_rtf::LN_brdrbar;
+ flag&=QName::tokenizer().insert(ns, "page") == NS_rtf::LN_page;
+ flag&=QName::tokenizer().insert(ns, "brdrbtw") == NS_rtf::LN_brdrbtw;
+ flag&=QName::tokenizer().insert(ns, "sftnrestart") == NS_rtf::LN_sftnrestart;
+ flag&=QName::tokenizer().insert(ns, "pagebb") == NS_rtf::LN_pagebb;
+ flag&=QName::tokenizer().insert(ns, "brdrcf") == NS_rtf::LN_brdrcf;
+ flag&=QName::tokenizer().insert(ns, "panose") == NS_rtf::LN_panose;
+ flag&=QName::tokenizer().insert(ns, "sftnrstcont") == NS_rtf::LN_sftnrstcont;
+ flag&=QName::tokenizer().insert(ns, "paperh") == NS_rtf::LN_paperh;
+ flag&=QName::tokenizer().insert(ns, "brdrdash") == NS_rtf::LN_brdrdash;
+ flag&=QName::tokenizer().insert(ns, "sftnrstpg") == NS_rtf::LN_sftnrstpg;
+ flag&=QName::tokenizer().insert(ns, "paperw") == NS_rtf::LN_paperw;
+ flag&=QName::tokenizer().insert(ns, "brdrdashd") == NS_rtf::LN_brdrdashd;
+ flag&=QName::tokenizer().insert(ns, "par") == NS_rtf::LN_par;
+ flag&=QName::tokenizer().insert(ns, "sftnstart") == NS_rtf::LN_sftnstart;
+ flag&=QName::tokenizer().insert(ns, "brdrdashdd") == NS_rtf::LN_brdrdashdd;
+ flag&=QName::tokenizer().insert(ns, "pararsid") == NS_rtf::LN_pararsid;
+ flag&=QName::tokenizer().insert(ns, "sftntj") == NS_rtf::LN_sftntj;
+ flag&=QName::tokenizer().insert(ns, "pard") == NS_rtf::LN_pard;
+ flag&=QName::tokenizer().insert(ns, "shad") == NS_rtf::LN_shad;
+ flag&=QName::tokenizer().insert(ns, "brdrdashdotstr") == NS_rtf::LN_brdrdashdotstr;
+ flag&=QName::tokenizer().insert(ns, "pc") == NS_rtf::LN_pc;
+ flag&=QName::tokenizer().insert(ns, "shading") == NS_rtf::LN_shading;
+ flag&=QName::tokenizer().insert(ns, "pca") == NS_rtf::LN_pca;
+ flag&=QName::tokenizer().insert(ns, "brdrdashsm") == NS_rtf::LN_brdrdashsm;
+ flag&=QName::tokenizer().insert(ns, "shidden") == NS_rtf::LN_shidden;
+ flag&=QName::tokenizer().insert(ns, "pgbrdrb") == NS_rtf::LN_pgbrdrb;
+ flag&=QName::tokenizer().insert(ns, "brdrdb") == NS_rtf::LN_brdrdb;
+ flag&=QName::tokenizer().insert(ns, "shift") == NS_rtf::LN_shift;
+ flag&=QName::tokenizer().insert(ns, "brdrdot") == NS_rtf::LN_brdrdot;
+ flag&=QName::tokenizer().insert(ns, "pgbrdrfoot") == NS_rtf::LN_pgbrdrfoot;
+ flag&=QName::tokenizer().insert(ns, "shpbottom") == NS_rtf::LN_shpbottom;
+ flag&=QName::tokenizer().insert(ns, "brdremboss") == NS_rtf::LN_brdremboss;
+ flag&=QName::tokenizer().insert(ns, "pgbrdrhead") == NS_rtf::LN_pgbrdrhead;
+ flag&=QName::tokenizer().insert(ns, "shpbxcolumn") == NS_rtf::LN_shpbxcolumn;
+ flag&=QName::tokenizer().insert(ns, "pgbrdrl") == NS_rtf::LN_pgbrdrl;
+ flag&=QName::tokenizer().insert(ns, "brdrengrave") == NS_rtf::LN_brdrengrave;
+ flag&=QName::tokenizer().insert(ns, "shpbxignore") == NS_rtf::LN_shpbxignore;
+ flag&=QName::tokenizer().insert(ns, "pgbrdropt") == NS_rtf::LN_pgbrdropt;
+ flag&=QName::tokenizer().insert(ns, "brdrframe") == NS_rtf::LN_brdrframe;
+ flag&=QName::tokenizer().insert(ns, "shpbxmargin") == NS_rtf::LN_shpbxmargin;
+ flag&=QName::tokenizer().insert(ns, "pgbrdrr") == NS_rtf::LN_pgbrdrr;
+ flag&=QName::tokenizer().insert(ns, "brdrhair") == NS_rtf::LN_brdrhair;
+ flag&=QName::tokenizer().insert(ns, "shpbxpage") == NS_rtf::LN_shpbxpage;
+ flag&=QName::tokenizer().insert(ns, "pgbrdrsnap") == NS_rtf::LN_pgbrdrsnap;
+ flag&=QName::tokenizer().insert(ns, "brdrinset") == NS_rtf::LN_brdrinset;
+ flag&=QName::tokenizer().insert(ns, "pgbrdrt") == NS_rtf::LN_pgbrdrt;
+ flag&=QName::tokenizer().insert(ns, "shpbyignore") == NS_rtf::LN_shpbyignore;
+ flag&=QName::tokenizer().insert(ns, "brdrl") == NS_rtf::LN_brdrl;
+ flag&=QName::tokenizer().insert(ns, "pghsxn") == NS_rtf::LN_pghsxn;
+ flag&=QName::tokenizer().insert(ns, "brdrnil") == NS_rtf::LN_brdrnil;
+ flag&=QName::tokenizer().insert(ns, "shpbymargin") == NS_rtf::LN_shpbymargin;
+ flag&=QName::tokenizer().insert(ns, "pgnbidia") == NS_rtf::LN_pgnbidia;
+ flag&=QName::tokenizer().insert(ns, "brdroutset") == NS_rtf::LN_brdroutset;
+ flag&=QName::tokenizer().insert(ns, "shpbypage") == NS_rtf::LN_shpbypage;
+ flag&=QName::tokenizer().insert(ns, "pgnbidib") == NS_rtf::LN_pgnbidib;
+ flag&=QName::tokenizer().insert(ns, "brdrr") == NS_rtf::LN_brdrr;
+ flag&=QName::tokenizer().insert(ns, "shpbypara") == NS_rtf::LN_shpbypara;
+ flag&=QName::tokenizer().insert(ns, "brdrs") == NS_rtf::LN_brdrs;
+ flag&=QName::tokenizer().insert(ns, "pgnchosung") == NS_rtf::LN_pgnchosung;
+ flag&=QName::tokenizer().insert(ns, "shpfblwtxt") == NS_rtf::LN_shpfblwtxt;
+ flag&=QName::tokenizer().insert(ns, "brdrsh") == NS_rtf::LN_brdrsh;
+ flag&=QName::tokenizer().insert(ns, "pgncnum") == NS_rtf::LN_pgncnum;
+ flag&=QName::tokenizer().insert(ns, "shpfhdr") == NS_rtf::LN_shpfhdr;
+ flag&=QName::tokenizer().insert(ns, "brdrt") == NS_rtf::LN_brdrt;
+ flag&=QName::tokenizer().insert(ns, "pgncont") == NS_rtf::LN_pgncont;
+ flag&=QName::tokenizer().insert(ns, "shpgrp") == NS_rtf::LN_shpgrp;
+ flag&=QName::tokenizer().insert(ns, "brdrtbl") == NS_rtf::LN_brdrtbl;
+ flag&=QName::tokenizer().insert(ns, "pgndbnum") == NS_rtf::LN_pgndbnum;
+ flag&=QName::tokenizer().insert(ns, "shpleft") == NS_rtf::LN_shpleft;
+ flag&=QName::tokenizer().insert(ns, "brdrth") == NS_rtf::LN_brdrth;
+ flag&=QName::tokenizer().insert(ns, "pgndbnumd") == NS_rtf::LN_pgndbnumd;
+ flag&=QName::tokenizer().insert(ns, "shplid") == NS_rtf::LN_shplid;
+ flag&=QName::tokenizer().insert(ns, "brdrthtnlg") == NS_rtf::LN_brdrthtnlg;
+ flag&=QName::tokenizer().insert(ns, "pgndbnumk") == NS_rtf::LN_pgndbnumk;
+ flag&=QName::tokenizer().insert(ns, "shplockanchor") == NS_rtf::LN_shplockanchor;
+ flag&=QName::tokenizer().insert(ns, "brdrthtnmg") == NS_rtf::LN_brdrthtnmg;
+ flag&=QName::tokenizer().insert(ns, "pgndbnumt") == NS_rtf::LN_pgndbnumt;
+ flag&=QName::tokenizer().insert(ns, "shppict") == NS_rtf::LN_shppict;
+ flag&=QName::tokenizer().insert(ns, "brdrthtnsg") == NS_rtf::LN_brdrthtnsg;
+ flag&=QName::tokenizer().insert(ns, "pgndec") == NS_rtf::LN_pgndec;
+ flag&=QName::tokenizer().insert(ns, "shpright") == NS_rtf::LN_shpright;
+ flag&=QName::tokenizer().insert(ns, "brdrtnthlg") == NS_rtf::LN_brdrtnthlg;
+ flag&=QName::tokenizer().insert(ns, "pgndecd") == NS_rtf::LN_pgndecd;
+ flag&=QName::tokenizer().insert(ns, "shprslt") == NS_rtf::LN_shprslt;
+ flag&=QName::tokenizer().insert(ns, "brdrtnthmg") == NS_rtf::LN_brdrtnthmg;
+ flag&=QName::tokenizer().insert(ns, "pgnganada") == NS_rtf::LN_pgnganada;
+ flag&=QName::tokenizer().insert(ns, "shptop") == NS_rtf::LN_shptop;
+ flag&=QName::tokenizer().insert(ns, "pgngbnum") == NS_rtf::LN_pgngbnum;
+ flag&=QName::tokenizer().insert(ns, "brdrtnthsg") == NS_rtf::LN_brdrtnthsg;
+ flag&=QName::tokenizer().insert(ns, "shptxt") == NS_rtf::LN_shptxt;
+ flag&=QName::tokenizer().insert(ns, "shpwrk") == NS_rtf::LN_shpwrk;
+ flag&=QName::tokenizer().insert(ns, "pgngbnumd") == NS_rtf::LN_pgngbnumd;
+ flag&=QName::tokenizer().insert(ns, "brdrtnthtnlg") == NS_rtf::LN_brdrtnthtnlg;
+ flag&=QName::tokenizer().insert(ns, "shpwr") == NS_rtf::LN_shpwr;
+ flag&=QName::tokenizer().insert(ns, "pgngbnumk") == NS_rtf::LN_pgngbnumk;
+ flag&=QName::tokenizer().insert(ns, "brdrtnthtnmg") == NS_rtf::LN_brdrtnthtnmg;
+ flag&=QName::tokenizer().insert(ns, "shpz") == NS_rtf::LN_shpz;
+ flag&=QName::tokenizer().insert(ns, "pgngbnuml") == NS_rtf::LN_pgngbnuml;
+ flag&=QName::tokenizer().insert(ns, "sl") == NS_rtf::LN_sl;
+ flag&=QName::tokenizer().insert(ns, "brdrtnthtnsg") == NS_rtf::LN_brdrtnthtnsg;
+ flag&=QName::tokenizer().insert(ns, "slmult") == NS_rtf::LN_slmult;
+ flag&=QName::tokenizer().insert(ns, "pgnhindia") == NS_rtf::LN_pgnhindia;
+ flag&=QName::tokenizer().insert(ns, "brdrtriple") == NS_rtf::LN_brdrtriple;
+ flag&=QName::tokenizer().insert(ns, "pgnhindib") == NS_rtf::LN_pgnhindib;
+ flag&=QName::tokenizer().insert(ns, "snaptogridincell") == NS_rtf::LN_snaptogridincell;
+ flag&=QName::tokenizer().insert(ns, "brdrw") == NS_rtf::LN_brdrw;
+ flag&=QName::tokenizer().insert(ns, "pgnhindic") == NS_rtf::LN_pgnhindic;
+ flag&=QName::tokenizer().insert(ns, "snext") == NS_rtf::LN_snext;
+ flag&=QName::tokenizer().insert(ns, "brdrwavy") == NS_rtf::LN_brdrwavy;
+ flag&=QName::tokenizer().insert(ns, "softcol") == NS_rtf::LN_softcol;
+ flag&=QName::tokenizer().insert(ns, "pgnhindid") == NS_rtf::LN_pgnhindid;
+ flag&=QName::tokenizer().insert(ns, "brdrwavydb") == NS_rtf::LN_brdrwavydb;
+ flag&=QName::tokenizer().insert(ns, "pgnhn") == NS_rtf::LN_pgnhn;
+ flag&=QName::tokenizer().insert(ns, "softlheight") == NS_rtf::LN_softlheight;
+ flag&=QName::tokenizer().insert(ns, "brkfrm") == NS_rtf::LN_brkfrm;
+ flag&=QName::tokenizer().insert(ns, "pgnhnsc") == NS_rtf::LN_pgnhnsc;
+ flag&=QName::tokenizer().insert(ns, "brsp") == NS_rtf::LN_brsp;
+ flag&=QName::tokenizer().insert(ns, "softline") == NS_rtf::LN_softline;
+ flag&=QName::tokenizer().insert(ns, "pgnhnsh") == NS_rtf::LN_pgnhnsh;
+ flag&=QName::tokenizer().insert(ns, "bullet") == NS_rtf::LN_bullet;
+ flag&=QName::tokenizer().insert(ns, "softpage") == NS_rtf::LN_softpage;
+ flag&=QName::tokenizer().insert(ns, "pgnhnsm") == NS_rtf::LN_pgnhnsm;
+ flag&=QName::tokenizer().insert(ns, "spersonal") == NS_rtf::LN_spersonal;
+ flag&=QName::tokenizer().insert(ns, "pgnhnsn") == NS_rtf::LN_pgnhnsn;
+ flag&=QName::tokenizer().insert(ns, "buptim") == NS_rtf::LN_buptim;
+ flag&=QName::tokenizer().insert(ns, "splytwnine") == NS_rtf::LN_splytwnine;
+ flag&=QName::tokenizer().insert(ns, "bxe") == NS_rtf::LN_bxe;
+ flag&=QName::tokenizer().insert(ns, "pgnhnsp") == NS_rtf::LN_pgnhnsp;
+ flag&=QName::tokenizer().insert(ns, "caps") == NS_rtf::LN_caps;
+ flag&=QName::tokenizer().insert(ns, "sprsbsp") == NS_rtf::LN_sprsbsp;
+ flag&=QName::tokenizer().insert(ns, "pgnid") == NS_rtf::LN_pgnid;
+ flag&=QName::tokenizer().insert(ns, "category") == NS_rtf::LN_category;
+ flag&=QName::tokenizer().insert(ns, "cb") == NS_rtf::LN_cb;
+ flag&=QName::tokenizer().insert(ns, "sprslnsp") == NS_rtf::LN_sprslnsp;
+ flag&=QName::tokenizer().insert(ns, "pgnlcltr") == NS_rtf::LN_pgnlcltr;
+ flag&=QName::tokenizer().insert(ns, "cbpat") == NS_rtf::LN_cbpat;
+ flag&=QName::tokenizer().insert(ns, "sprsspbf") == NS_rtf::LN_sprsspbf;
+ flag&=QName::tokenizer().insert(ns, "pgnlcrm") == NS_rtf::LN_pgnlcrm;
+ flag&=QName::tokenizer().insert(ns, "cchs") == NS_rtf::LN_cchs;
+ flag&=QName::tokenizer().insert(ns, "cell") == NS_rtf::LN_cell;
+ flag&=QName::tokenizer().insert(ns, "sprstsm") == NS_rtf::LN_sprstsm;
+ flag&=QName::tokenizer().insert(ns, "pgnrestart") == NS_rtf::LN_pgnrestart;
+ flag&=QName::tokenizer().insert(ns, "cellx") == NS_rtf::LN_cellx;
+ flag&=QName::tokenizer().insert(ns, "sprstsp") == NS_rtf::LN_sprstsp;
+ flag&=QName::tokenizer().insert(ns, "pgnstart") == NS_rtf::LN_pgnstart;
+ flag&=QName::tokenizer().insert(ns, "cf") == NS_rtf::LN_cf;
+ flag&=QName::tokenizer().insert(ns, "spv") == NS_rtf::LN_spv;
+ flag&=QName::tokenizer().insert(ns, "cfpat") == NS_rtf::LN_cfpat;
+ flag&=QName::tokenizer().insert(ns, "pgnstarts") == NS_rtf::LN_pgnstarts;
+ flag&=QName::tokenizer().insert(ns, "sreply") == NS_rtf::LN_sreply;
+ flag&=QName::tokenizer().insert(ns, "cgrid") == NS_rtf::LN_cgrid;
+ flag&=QName::tokenizer().insert(ns, "pgnthaia") == NS_rtf::LN_pgnthaia;
+ flag&=QName::tokenizer().insert(ns, "ssemihidden") == NS_rtf::LN_ssemihidden;
+ flag&=QName::tokenizer().insert(ns, "charrsid") == NS_rtf::LN_charrsid;
+ flag&=QName::tokenizer().insert(ns, "pgnthaib") == NS_rtf::LN_pgnthaib;
+ flag&=QName::tokenizer().insert(ns, "staticval") == NS_rtf::LN_staticval;
+ flag&=QName::tokenizer().insert(ns, "charscalex") == NS_rtf::LN_charscalex;
+ flag&=QName::tokenizer().insert(ns, "pgnthaic") == NS_rtf::LN_pgnthaic;
+ flag&=QName::tokenizer().insert(ns, "stextflow") == NS_rtf::LN_stextflow;
+ flag&=QName::tokenizer().insert(ns, "chatn") == NS_rtf::LN_chatn;
+ flag&=QName::tokenizer().insert(ns, "strike") == NS_rtf::LN_strike;
+ flag&=QName::tokenizer().insert(ns, "pgnucltr") == NS_rtf::LN_pgnucltr;
+ flag&=QName::tokenizer().insert(ns, "chbgbdiag") == NS_rtf::LN_chbgbdiag;
+ flag&=QName::tokenizer().insert(ns, "pgnucrm") == NS_rtf::LN_pgnucrm;
+ flag&=QName::tokenizer().insert(ns, "striked1") == NS_rtf::LN_striked1;
+ flag&=QName::tokenizer().insert(ns, "chbgcross") == NS_rtf::LN_chbgcross;
+ flag&=QName::tokenizer().insert(ns, "stshfbi") == NS_rtf::LN_stshfbi;
+ flag&=QName::tokenizer().insert(ns, "pgnvieta") == NS_rtf::LN_pgnvieta;
+ flag&=QName::tokenizer().insert(ns, "pgnx") == NS_rtf::LN_pgnx;
+ flag&=QName::tokenizer().insert(ns, "chbgdcross") == NS_rtf::LN_chbgdcross;
+ flag&=QName::tokenizer().insert(ns, "stshfdbch") == NS_rtf::LN_stshfdbch;
+ flag&=QName::tokenizer().insert(ns, "pgny") == NS_rtf::LN_pgny;
+ flag&=QName::tokenizer().insert(ns, "stshfhich") == NS_rtf::LN_stshfhich;
+ flag&=QName::tokenizer().insert(ns, "chbgdkbdiag") == NS_rtf::LN_chbgdkbdiag;
+ flag&=QName::tokenizer().insert(ns, "pgnzodiac") == NS_rtf::LN_pgnzodiac;
+ flag&=QName::tokenizer().insert(ns, "stshfloch") == NS_rtf::LN_stshfloch;
+ flag&=QName::tokenizer().insert(ns, "chbgdkcross") == NS_rtf::LN_chbgdkcross;
+ flag&=QName::tokenizer().insert(ns, "pgnzodiacd") == NS_rtf::LN_pgnzodiacd;
+ flag&=QName::tokenizer().insert(ns, "stylesheet") == NS_rtf::LN_stylesheet;
+ flag&=QName::tokenizer().insert(ns, "chbgdkdcross") == NS_rtf::LN_chbgdkdcross;
+ flag&=QName::tokenizer().insert(ns, "pgnzodiacl") == NS_rtf::LN_pgnzodiacl;
+ flag&=QName::tokenizer().insert(ns, "styrsid") == NS_rtf::LN_styrsid;
+ flag&=QName::tokenizer().insert(ns, "pgp") == NS_rtf::LN_pgp;
+ flag&=QName::tokenizer().insert(ns, "sub") == NS_rtf::LN_sub;
+ flag&=QName::tokenizer().insert(ns, "chbgdkfdiag") == NS_rtf::LN_chbgdkfdiag;
+ flag&=QName::tokenizer().insert(ns, "pgptbl") == NS_rtf::LN_pgptbl;
+ flag&=QName::tokenizer().insert(ns, "subdocument") == NS_rtf::LN_subdocument;
+ flag&=QName::tokenizer().insert(ns, "chbgdkhoriz") == NS_rtf::LN_chbgdkhoriz;
+ flag&=QName::tokenizer().insert(ns, "pgwsxn") == NS_rtf::LN_pgwsxn;
+ flag&=QName::tokenizer().insert(ns, "chbgdkvert") == NS_rtf::LN_chbgdkvert;
+ flag&=QName::tokenizer().insert(ns, "phcol") == NS_rtf::LN_phcol;
+ flag&=QName::tokenizer().insert(ns, "subfontbysize") == NS_rtf::LN_subfontbysize;
+ flag&=QName::tokenizer().insert(ns, "subject") == NS_rtf::LN_subject;
+ flag&=QName::tokenizer().insert(ns, "phmrg") == NS_rtf::LN_phmrg;
+ flag&=QName::tokenizer().insert(ns, "chbgfdiag") == NS_rtf::LN_chbgfdiag;
+ flag&=QName::tokenizer().insert(ns, "super") == NS_rtf::LN_super;
+ flag&=QName::tokenizer().insert(ns, "phpg") == NS_rtf::LN_phpg;
+ flag&=QName::tokenizer().insert(ns, "chbghoriz") == NS_rtf::LN_chbghoriz;
+ flag&=QName::tokenizer().insert(ns, "swpbdr") == NS_rtf::LN_swpbdr;
+ flag&=QName::tokenizer().insert(ns, "picbmp") == NS_rtf::LN_picbmp;
+ flag&=QName::tokenizer().insert(ns, "tab") == NS_rtf::LN_tab;
+ flag&=QName::tokenizer().insert(ns, "chbgvert") == NS_rtf::LN_chbgvert;
+ flag&=QName::tokenizer().insert(ns, "picbpp") == NS_rtf::LN_picbpp;
+ flag&=QName::tokenizer().insert(ns, "tabsnoovrlp") == NS_rtf::LN_tabsnoovrlp;
+ flag&=QName::tokenizer().insert(ns, "chbrdr") == NS_rtf::LN_chbrdr;
+ flag&=QName::tokenizer().insert(ns, "piccropb") == NS_rtf::LN_piccropb;
+ flag&=QName::tokenizer().insert(ns, "taprtl") == NS_rtf::LN_taprtl;
+ flag&=QName::tokenizer().insert(ns, "chcbpat") == NS_rtf::LN_chcbpat;
+ flag&=QName::tokenizer().insert(ns, "piccropl") == NS_rtf::LN_piccropl;
+ flag&=QName::tokenizer().insert(ns, "tb") == NS_rtf::LN_tb;
+ flag&=QName::tokenizer().insert(ns, "chcfpat") == NS_rtf::LN_chcfpat;
+ flag&=QName::tokenizer().insert(ns, "piccropr") == NS_rtf::LN_piccropr;
+ flag&=QName::tokenizer().insert(ns, "tbllkbestfit") == NS_rtf::LN_tbllkbestfit;
+ flag&=QName::tokenizer().insert(ns, "chdate") == NS_rtf::LN_chdate;
+ flag&=QName::tokenizer().insert(ns, "piccropt") == NS_rtf::LN_piccropt;
+ flag&=QName::tokenizer().insert(ns, "chdpa") == NS_rtf::LN_chdpa;
+ flag&=QName::tokenizer().insert(ns, "tbllkborder") == NS_rtf::LN_tbllkborder;
+ flag&=QName::tokenizer().insert(ns, "pich") == NS_rtf::LN_pich;
+ flag&=QName::tokenizer().insert(ns, "chdpl") == NS_rtf::LN_chdpl;
+ flag&=QName::tokenizer().insert(ns, "tbllkcolor") == NS_rtf::LN_tbllkcolor;
+ flag&=QName::tokenizer().insert(ns, "pichgoal") == NS_rtf::LN_pichgoal;
+ flag&=QName::tokenizer().insert(ns, "chftn") == NS_rtf::LN_chftn;
+ flag&=QName::tokenizer().insert(ns, "tbllkfont") == NS_rtf::LN_tbllkfont;
+ flag&=QName::tokenizer().insert(ns, "picprop") == NS_rtf::LN_picprop;
+ flag&=QName::tokenizer().insert(ns, "chftnsep") == NS_rtf::LN_chftnsep;
+ flag&=QName::tokenizer().insert(ns, "picscaled") == NS_rtf::LN_picscaled;
+ flag&=QName::tokenizer().insert(ns, "chftnsepc") == NS_rtf::LN_chftnsepc;
+ flag&=QName::tokenizer().insert(ns, "tbllkhdrcols") == NS_rtf::LN_tbllkhdrcols;
+ flag&=QName::tokenizer().insert(ns, "chpgn") == NS_rtf::LN_chpgn;
+ flag&=QName::tokenizer().insert(ns, "picscalex") == NS_rtf::LN_picscalex;
+ flag&=QName::tokenizer().insert(ns, "tbllkhdrrows") == NS_rtf::LN_tbllkhdrrows;
+ flag&=QName::tokenizer().insert(ns, "chshdng") == NS_rtf::LN_chshdng;
+ flag&=QName::tokenizer().insert(ns, "picscaley") == NS_rtf::LN_picscaley;
+ flag&=QName::tokenizer().insert(ns, "tbllklastcol") == NS_rtf::LN_tbllklastcol;
+ flag&=QName::tokenizer().insert(ns, "pict") == NS_rtf::LN_pict;
+ flag&=QName::tokenizer().insert(ns, "chtime") == NS_rtf::LN_chtime;
+ flag&=QName::tokenizer().insert(ns, "picw") == NS_rtf::LN_picw;
+ flag&=QName::tokenizer().insert(ns, "clbgbdiag") == NS_rtf::LN_clbgbdiag;
+ flag&=QName::tokenizer().insert(ns, "tbllklastrow") == NS_rtf::LN_tbllklastrow;
+ flag&=QName::tokenizer().insert(ns, "picwgoal") == NS_rtf::LN_picwgoal;
+ flag&=QName::tokenizer().insert(ns, "clbgcross") == NS_rtf::LN_clbgcross;
+ flag&=QName::tokenizer().insert(ns, "tbllkshading") == NS_rtf::LN_tbllkshading;
+ flag&=QName::tokenizer().insert(ns, "plain") == NS_rtf::LN_plain;
+ flag&=QName::tokenizer().insert(ns, "clbgdcross") == NS_rtf::LN_clbgdcross;
+ flag&=QName::tokenizer().insert(ns, "tblrsid") == NS_rtf::LN_tblrsid;
+ flag&=QName::tokenizer().insert(ns, "pmmetafile") == NS_rtf::LN_pmmetafile;
+ flag&=QName::tokenizer().insert(ns, "tc") == NS_rtf::LN_tc;
+ flag&=QName::tokenizer().insert(ns, "pn") == NS_rtf::LN_pn;
+ flag&=QName::tokenizer().insert(ns, "clbgdkbdiag") == NS_rtf::LN_clbgdkbdiag;
+ flag&=QName::tokenizer().insert(ns, "tcelld") == NS_rtf::LN_tcelld;
+ flag&=QName::tokenizer().insert(ns, "pnacross") == NS_rtf::LN_pnacross;
+ flag&=QName::tokenizer().insert(ns, "tcf") == NS_rtf::LN_tcf;
+ flag&=QName::tokenizer().insert(ns, "clbgdkcross") == NS_rtf::LN_clbgdkcross;
+ flag&=QName::tokenizer().insert(ns, "tcl") == NS_rtf::LN_tcl;
+ flag&=QName::tokenizer().insert(ns, "pnaiu") == NS_rtf::LN_pnaiu;
+ flag&=QName::tokenizer().insert(ns, "tcn") == NS_rtf::LN_tcn;
+ flag&=QName::tokenizer().insert(ns, "clbgdkdcross") == NS_rtf::LN_clbgdkdcross;
+ flag&=QName::tokenizer().insert(ns, "pnaiud") == NS_rtf::LN_pnaiud;
+ flag&=QName::tokenizer().insert(ns, "pnaiueo") == NS_rtf::LN_pnaiueo;
+ flag&=QName::tokenizer().insert(ns, "clbgdkfdiag") == NS_rtf::LN_clbgdkfdiag;
+ flag&=QName::tokenizer().insert(ns, "tdfrmtxtBottom") == NS_rtf::LN_tdfrmtxtBottom;
+ flag&=QName::tokenizer().insert(ns, "pnaiueod") == NS_rtf::LN_pnaiueod;
+ flag&=QName::tokenizer().insert(ns, "clbgdkhor") == NS_rtf::LN_clbgdkhor;
+ flag&=QName::tokenizer().insert(ns, "tdfrmtxtLeft") == NS_rtf::LN_tdfrmtxtLeft;
+ flag&=QName::tokenizer().insert(ns, "pnb") == NS_rtf::LN_pnb;
+ flag&=QName::tokenizer().insert(ns, "clbgdkvert") == NS_rtf::LN_clbgdkvert;
+ flag&=QName::tokenizer().insert(ns, "pnbidia") == NS_rtf::LN_pnbidia;
+ flag&=QName::tokenizer().insert(ns, "tdfrmtxtRight") == NS_rtf::LN_tdfrmtxtRight;
+ flag&=QName::tokenizer().insert(ns, "clbgfdiag") == NS_rtf::LN_clbgfdiag;
+ flag&=QName::tokenizer().insert(ns, "pnbidib") == NS_rtf::LN_pnbidib;
+ flag&=QName::tokenizer().insert(ns, "tdfrmtxtTop") == NS_rtf::LN_tdfrmtxtTop;
+ flag&=QName::tokenizer().insert(ns, "template") == NS_rtf::LN_template;
+ flag&=QName::tokenizer().insert(ns, "clbghoriz") == NS_rtf::LN_clbghoriz;
+ flag&=QName::tokenizer().insert(ns, "pncaps") == NS_rtf::LN_pncaps;
+ flag&=QName::tokenizer().insert(ns, "time") == NS_rtf::LN_time;
+ flag&=QName::tokenizer().insert(ns, "title") == NS_rtf::LN_title;
+ flag&=QName::tokenizer().insert(ns, "pncard") == NS_rtf::LN_pncard;
+ flag&=QName::tokenizer().insert(ns, "clbgvert") == NS_rtf::LN_clbgvert;
+ flag&=QName::tokenizer().insert(ns, "pncf") == NS_rtf::LN_pncf;
+ flag&=QName::tokenizer().insert(ns, "titlepg") == NS_rtf::LN_titlepg;
+ flag&=QName::tokenizer().insert(ns, "clbrdrb") == NS_rtf::LN_clbrdrb;
+ flag&=QName::tokenizer().insert(ns, "tldot") == NS_rtf::LN_tldot;
+ flag&=QName::tokenizer().insert(ns, "pnchosung") == NS_rtf::LN_pnchosung;
+ flag&=QName::tokenizer().insert(ns, "clbrdrl") == NS_rtf::LN_clbrdrl;
+ flag&=QName::tokenizer().insert(ns, "tleq") == NS_rtf::LN_tleq;
+ flag&=QName::tokenizer().insert(ns, "pncnum") == NS_rtf::LN_pncnum;
+ flag&=QName::tokenizer().insert(ns, "clbrdrr") == NS_rtf::LN_clbrdrr;
+ flag&=QName::tokenizer().insert(ns, "tlhyph") == NS_rtf::LN_tlhyph;
+ flag&=QName::tokenizer().insert(ns, "pndbnum") == NS_rtf::LN_pndbnum;
+ flag&=QName::tokenizer().insert(ns, "clbrdrt") == NS_rtf::LN_clbrdrt;
+ flag&=QName::tokenizer().insert(ns, "tlmdot") == NS_rtf::LN_tlmdot;
+ flag&=QName::tokenizer().insert(ns, "pndbnumd") == NS_rtf::LN_pndbnumd;
+ flag&=QName::tokenizer().insert(ns, "clcbpat") == NS_rtf::LN_clcbpat;
+ flag&=QName::tokenizer().insert(ns, "tlth") == NS_rtf::LN_tlth;
+ flag&=QName::tokenizer().insert(ns, "pndbnumk") == NS_rtf::LN_pndbnumk;
+ flag&=QName::tokenizer().insert(ns, "tlul") == NS_rtf::LN_tlul;
+ flag&=QName::tokenizer().insert(ns, "clcbpatraw") == NS_rtf::LN_clcbpatraw;
+ flag&=QName::tokenizer().insert(ns, "pndbnuml") == NS_rtf::LN_pndbnuml;
+ flag&=QName::tokenizer().insert(ns, "clcfpat") == NS_rtf::LN_clcfpat;
+ flag&=QName::tokenizer().insert(ns, "toplinepunct") == NS_rtf::LN_toplinepunct;
+ flag&=QName::tokenizer().insert(ns, "pndbnumt") == NS_rtf::LN_pndbnumt;
+ flag&=QName::tokenizer().insert(ns, "tphcol") == NS_rtf::LN_tphcol;
+ flag&=QName::tokenizer().insert(ns, "clcfpatraw") == NS_rtf::LN_clcfpatraw;
+ flag&=QName::tokenizer().insert(ns, "pndec") == NS_rtf::LN_pndec;
+ flag&=QName::tokenizer().insert(ns, "tphmrg") == NS_rtf::LN_tphmrg;
+ flag&=QName::tokenizer().insert(ns, "cldgll") == NS_rtf::LN_cldgll;
+ flag&=QName::tokenizer().insert(ns, "pndecd") == NS_rtf::LN_pndecd;
+ flag&=QName::tokenizer().insert(ns, "tphpg") == NS_rtf::LN_tphpg;
+ flag&=QName::tokenizer().insert(ns, "cldglu") == NS_rtf::LN_cldglu;
+ flag&=QName::tokenizer().insert(ns, "pnf") == NS_rtf::LN_pnf;
+ flag&=QName::tokenizer().insert(ns, "tposnegx") == NS_rtf::LN_tposnegx;
+ flag&=QName::tokenizer().insert(ns, "clFitText") == NS_rtf::LN_clFitText;
+ flag&=QName::tokenizer().insert(ns, "pnfs") == NS_rtf::LN_pnfs;
+ flag&=QName::tokenizer().insert(ns, "tposnegy") == NS_rtf::LN_tposnegy;
+ flag&=QName::tokenizer().insert(ns, "pnganada") == NS_rtf::LN_pnganada;
+ flag&=QName::tokenizer().insert(ns, "clftsWidth") == NS_rtf::LN_clftsWidth;
+ flag&=QName::tokenizer().insert(ns, "tposxc") == NS_rtf::LN_tposxc;
+ flag&=QName::tokenizer().insert(ns, "clmgf") == NS_rtf::LN_clmgf;
+ flag&=QName::tokenizer().insert(ns, "pngblip") == NS_rtf::LN_pngblip;
+ flag&=QName::tokenizer().insert(ns, "tposxi") == NS_rtf::LN_tposxi;
+ flag&=QName::tokenizer().insert(ns, "clmrg") == NS_rtf::LN_clmrg;
+ flag&=QName::tokenizer().insert(ns, "pngbnum") == NS_rtf::LN_pngbnum;
+ flag&=QName::tokenizer().insert(ns, "tposxl") == NS_rtf::LN_tposxl;
+ flag&=QName::tokenizer().insert(ns, "cloWrap") == NS_rtf::LN_cloWrap;
+ flag&=QName::tokenizer().insert(ns, "pngbnumd") == NS_rtf::LN_pngbnumd;
+ flag&=QName::tokenizer().insert(ns, "tposx") == NS_rtf::LN_tposx;
+ flag&=QName::tokenizer().insert(ns, "clpadb") == NS_rtf::LN_clpadb;
+ flag&=QName::tokenizer().insert(ns, "pngbnumk") == NS_rtf::LN_pngbnumk;
+ flag&=QName::tokenizer().insert(ns, "tposxo") == NS_rtf::LN_tposxo;
+ flag&=QName::tokenizer().insert(ns, "clpadfb") == NS_rtf::LN_clpadfb;
+ flag&=QName::tokenizer().insert(ns, "pngbnuml") == NS_rtf::LN_pngbnuml;
+ flag&=QName::tokenizer().insert(ns, "tposxr") == NS_rtf::LN_tposxr;
+ flag&=QName::tokenizer().insert(ns, "clpadfl") == NS_rtf::LN_clpadfl;
+ flag&=QName::tokenizer().insert(ns, "pnhang") == NS_rtf::LN_pnhang;
+ flag&=QName::tokenizer().insert(ns, "tposy") == NS_rtf::LN_tposy;
+ flag&=QName::tokenizer().insert(ns, "clpadfr") == NS_rtf::LN_clpadfr;
+ flag&=QName::tokenizer().insert(ns, "pni") == NS_rtf::LN_pni;
+ flag&=QName::tokenizer().insert(ns, "tposyb") == NS_rtf::LN_tposyb;
+ flag&=QName::tokenizer().insert(ns, "clpadft") == NS_rtf::LN_clpadft;
+ flag&=QName::tokenizer().insert(ns, "pnindent") == NS_rtf::LN_pnindent;
+ flag&=QName::tokenizer().insert(ns, "tposyc") == NS_rtf::LN_tposyc;
+ flag&=QName::tokenizer().insert(ns, "clpadl") == NS_rtf::LN_clpadl;
+ flag&=QName::tokenizer().insert(ns, "pniroha") == NS_rtf::LN_pniroha;
+ flag&=QName::tokenizer().insert(ns, "tposyil") == NS_rtf::LN_tposyil;
+ flag&=QName::tokenizer().insert(ns, "clpadr") == NS_rtf::LN_clpadr;
+ flag&=QName::tokenizer().insert(ns, "pnirohad") == NS_rtf::LN_pnirohad;
+ flag&=QName::tokenizer().insert(ns, "tposyin") == NS_rtf::LN_tposyin;
+ flag&=QName::tokenizer().insert(ns, "clpadt") == NS_rtf::LN_clpadt;
+ flag&=QName::tokenizer().insert(ns, "pnlcltr") == NS_rtf::LN_pnlcltr;
+ flag&=QName::tokenizer().insert(ns, "tposyoutv") == NS_rtf::LN_tposyoutv;
+ flag&=QName::tokenizer().insert(ns, "clshdng") == NS_rtf::LN_clshdng;
+ flag&=QName::tokenizer().insert(ns, "pnlcrm") == NS_rtf::LN_pnlcrm;
+ flag&=QName::tokenizer().insert(ns, "tposyt") == NS_rtf::LN_tposyt;
+ flag&=QName::tokenizer().insert(ns, "clshdngraw") == NS_rtf::LN_clshdngraw;
+ flag&=QName::tokenizer().insert(ns, "pnlvl") == NS_rtf::LN_pnlvl;
+ flag&=QName::tokenizer().insert(ns, "tpvmrg") == NS_rtf::LN_tpvmrg;
+ flag&=QName::tokenizer().insert(ns, "pnlvlblt") == NS_rtf::LN_pnlvlblt;
+ flag&=QName::tokenizer().insert(ns, "clshdrawnil") == NS_rtf::LN_clshdrawnil;
+ flag&=QName::tokenizer().insert(ns, "tpvpara") == NS_rtf::LN_tpvpara;
+ flag&=QName::tokenizer().insert(ns, "tpvpg") == NS_rtf::LN_tpvpg;
+ flag&=QName::tokenizer().insert(ns, "pnlvlbody") == NS_rtf::LN_pnlvlbody;
+ flag&=QName::tokenizer().insert(ns, "cltxbtlr") == NS_rtf::LN_cltxbtlr;
+ flag&=QName::tokenizer().insert(ns, "tqc") == NS_rtf::LN_tqc;
+ flag&=QName::tokenizer().insert(ns, "pnlvlcont") == NS_rtf::LN_pnlvlcont;
+ flag&=QName::tokenizer().insert(ns, "cltxlrtb") == NS_rtf::LN_cltxlrtb;
+ flag&=QName::tokenizer().insert(ns, "tqdec") == NS_rtf::LN_tqdec;
+ flag&=QName::tokenizer().insert(ns, "pnnumonce") == NS_rtf::LN_pnnumonce;
+ flag&=QName::tokenizer().insert(ns, "cltxlrtbv") == NS_rtf::LN_cltxlrtbv;
+ flag&=QName::tokenizer().insert(ns, "tqr") == NS_rtf::LN_tqr;
+ flag&=QName::tokenizer().insert(ns, "pnord") == NS_rtf::LN_pnord;
+ flag&=QName::tokenizer().insert(ns, "cltxtbrl") == NS_rtf::LN_cltxtbrl;
+ flag&=QName::tokenizer().insert(ns, "transmf") == NS_rtf::LN_transmf;
+ flag&=QName::tokenizer().insert(ns, "pnordt") == NS_rtf::LN_pnordt;
+ flag&=QName::tokenizer().insert(ns, "trauth") == NS_rtf::LN_trauth;
+ flag&=QName::tokenizer().insert(ns, "cltxtbrlv") == NS_rtf::LN_cltxtbrlv;
+ flag&=QName::tokenizer().insert(ns, "pnprev") == NS_rtf::LN_pnprev;
+ flag&=QName::tokenizer().insert(ns, "trautofit") == NS_rtf::LN_trautofit;
+ flag&=QName::tokenizer().insert(ns, "clvertalb") == NS_rtf::LN_clvertalb;
+ flag&=QName::tokenizer().insert(ns, "pnqc") == NS_rtf::LN_pnqc;
+ flag&=QName::tokenizer().insert(ns, "trbgbdiag") == NS_rtf::LN_trbgbdiag;
+ flag&=QName::tokenizer().insert(ns, "pnql") == NS_rtf::LN_pnql;
+ flag&=QName::tokenizer().insert(ns, "clvertalc") == NS_rtf::LN_clvertalc;
+ flag&=QName::tokenizer().insert(ns, "pnqr") == NS_rtf::LN_pnqr;
+ flag&=QName::tokenizer().insert(ns, "trbgcross") == NS_rtf::LN_trbgcross;
+ flag&=QName::tokenizer().insert(ns, "clvertalt") == NS_rtf::LN_clvertalt;
+ flag&=QName::tokenizer().insert(ns, "pnrauth") == NS_rtf::LN_pnrauth;
+ flag&=QName::tokenizer().insert(ns, "clvmgf") == NS_rtf::LN_clvmgf;
+ flag&=QName::tokenizer().insert(ns, "trbgdcross") == NS_rtf::LN_trbgdcross;
+ flag&=QName::tokenizer().insert(ns, "pnrdate") == NS_rtf::LN_pnrdate;
+ flag&=QName::tokenizer().insert(ns, "clvmrg") == NS_rtf::LN_clvmrg;
+ flag&=QName::tokenizer().insert(ns, "trbgdkbdiag") == NS_rtf::LN_trbgdkbdiag;
+ flag&=QName::tokenizer().insert(ns, "pnrestart") == NS_rtf::LN_pnrestart;
+ flag&=QName::tokenizer().insert(ns, "clwWidth") == NS_rtf::LN_clwWidth;
+ flag&=QName::tokenizer().insert(ns, "trbgdkcross") == NS_rtf::LN_trbgdkcross;
+ flag&=QName::tokenizer().insert(ns, "pnrnfc") == NS_rtf::LN_pnrnfc;
+ flag&=QName::tokenizer().insert(ns, "collapsed") == NS_rtf::LN_collapsed;
+ flag&=QName::tokenizer().insert(ns, "pnrnot") == NS_rtf::LN_pnrnot;
+ flag&=QName::tokenizer().insert(ns, "trbgdkdcross") == NS_rtf::LN_trbgdkdcross;
+ flag&=QName::tokenizer().insert(ns, "colno") == NS_rtf::LN_colno;
+ flag&=QName::tokenizer().insert(ns, "pnrpnbr") == NS_rtf::LN_pnrpnbr;
+ flag&=QName::tokenizer().insert(ns, "colortbl") == NS_rtf::LN_colortbl;
+ flag&=QName::tokenizer().insert(ns, "trbgdkfdiag") == NS_rtf::LN_trbgdkfdiag;
+ flag&=QName::tokenizer().insert(ns, "cols") == NS_rtf::LN_cols;
+ flag&=QName::tokenizer().insert(ns, "pnrrgb") == NS_rtf::LN_pnrrgb;
+ flag&=QName::tokenizer().insert(ns, "trbgdkhor") == NS_rtf::LN_trbgdkhor;
+ flag&=QName::tokenizer().insert(ns, "colsr") == NS_rtf::LN_colsr;
+ flag&=QName::tokenizer().insert(ns, "pnrstart") == NS_rtf::LN_pnrstart;
+ flag&=QName::tokenizer().insert(ns, "colsx") == NS_rtf::LN_colsx;
+ flag&=QName::tokenizer().insert(ns, "trbgdkvert") == NS_rtf::LN_trbgdkvert;
+ flag&=QName::tokenizer().insert(ns, "pnrstop") == NS_rtf::LN_pnrstop;
+ flag&=QName::tokenizer().insert(ns, "column") == NS_rtf::LN_column;
+ flag&=QName::tokenizer().insert(ns, "trbgfdiag") == NS_rtf::LN_trbgfdiag;
+ flag&=QName::tokenizer().insert(ns, "pnrxst") == NS_rtf::LN_pnrxst;
+ flag&=QName::tokenizer().insert(ns, "colw") == NS_rtf::LN_colw;
+ flag&=QName::tokenizer().insert(ns, "comment") == NS_rtf::LN_comment;
+ flag&=QName::tokenizer().insert(ns, "pnscaps") == NS_rtf::LN_pnscaps;
+ flag&=QName::tokenizer().insert(ns, "trbghoriz") == NS_rtf::LN_trbghoriz;
+ flag&=QName::tokenizer().insert(ns, "company") == NS_rtf::LN_company;
+ flag&=QName::tokenizer().insert(ns, "pnseclvl") == NS_rtf::LN_pnseclvl;
+ flag&=QName::tokenizer().insert(ns, "trbgvert") == NS_rtf::LN_trbgvert;
+ flag&=QName::tokenizer().insert(ns, "cpg") == NS_rtf::LN_cpg;
+ flag&=QName::tokenizer().insert(ns, "pnsp") == NS_rtf::LN_pnsp;
+ flag&=QName::tokenizer().insert(ns, "trbrdrb") == NS_rtf::LN_trbrdrb;
+ flag&=QName::tokenizer().insert(ns, "crauth") == NS_rtf::LN_crauth;
+ flag&=QName::tokenizer().insert(ns, "pnstart") == NS_rtf::LN_pnstart;
+ flag&=QName::tokenizer().insert(ns, "crdate") == NS_rtf::LN_crdate;
+ flag&=QName::tokenizer().insert(ns, "trbrdrh") == NS_rtf::LN_trbrdrh;
+ flag&=QName::tokenizer().insert(ns, "pnstrike") == NS_rtf::LN_pnstrike;
+ flag&=QName::tokenizer().insert(ns, "creatim") == NS_rtf::LN_creatim;
+ flag&=QName::tokenizer().insert(ns, "trbrdrl") == NS_rtf::LN_trbrdrl;
+ flag&=QName::tokenizer().insert(ns, "cs") == NS_rtf::LN_cs;
+ flag&=QName::tokenizer().insert(ns, "pntext") == NS_rtf::LN_pntext;
+ flag&=QName::tokenizer().insert(ns, "trbrdrr") == NS_rtf::LN_trbrdrr;
+ flag&=QName::tokenizer().insert(ns, "ctrl") == NS_rtf::LN_ctrl;
+ flag&=QName::tokenizer().insert(ns, "pntxta") == NS_rtf::LN_pntxta;
+ flag&=QName::tokenizer().insert(ns, "trbrdrt") == NS_rtf::LN_trbrdrt;
+ flag&=QName::tokenizer().insert(ns, "cts") == NS_rtf::LN_cts;
+ flag&=QName::tokenizer().insert(ns, "pntxtb") == NS_rtf::LN_pntxtb;
+ flag&=QName::tokenizer().insert(ns, "cufi") == NS_rtf::LN_cufi;
+ flag&=QName::tokenizer().insert(ns, "trbrdrv") == NS_rtf::LN_trbrdrv;
+ flag&=QName::tokenizer().insert(ns, "pnucltr") == NS_rtf::LN_pnucltr;
+ flag&=QName::tokenizer().insert(ns, "culi") == NS_rtf::LN_culi;
+ flag&=QName::tokenizer().insert(ns, "trcbpat") == NS_rtf::LN_trcbpat;
+ flag&=QName::tokenizer().insert(ns, "curi") == NS_rtf::LN_curi;
+ flag&=QName::tokenizer().insert(ns, "pnucrm") == NS_rtf::LN_pnucrm;
+ flag&=QName::tokenizer().insert(ns, "trcfpat") == NS_rtf::LN_trcfpat;
+ flag&=QName::tokenizer().insert(ns, "pnul") == NS_rtf::LN_pnul;
+ flag&=QName::tokenizer().insert(ns, "cvmme") == NS_rtf::LN_cvmme;
+ flag&=QName::tokenizer().insert(ns, "trdate") == NS_rtf::LN_trdate;
+ flag&=QName::tokenizer().insert(ns, "pnuld") == NS_rtf::LN_pnuld;
+ flag&=QName::tokenizer().insert(ns, "datafield") == NS_rtf::LN_datafield;
+ flag&=QName::tokenizer().insert(ns, "date") == NS_rtf::LN_date;
+ flag&=QName::tokenizer().insert(ns, "trftsWidthA") == NS_rtf::LN_trftsWidthA;
+ flag&=QName::tokenizer().insert(ns, "pnuldash") == NS_rtf::LN_pnuldash;
+ flag&=QName::tokenizer().insert(ns, "dbch") == NS_rtf::LN_dbch;
+ flag&=QName::tokenizer().insert(ns, "pnuldashd") == NS_rtf::LN_pnuldashd;
+ flag&=QName::tokenizer().insert(ns, "trftsWidthB") == NS_rtf::LN_trftsWidthB;
+ flag&=QName::tokenizer().insert(ns, "deff") == NS_rtf::LN_deff;
+ flag&=QName::tokenizer().insert(ns, "pnuldashdd") == NS_rtf::LN_pnuldashdd;
+ flag&=QName::tokenizer().insert(ns, "trftsWidth") == NS_rtf::LN_trftsWidth;
+ flag&=QName::tokenizer().insert(ns, "defformat") == NS_rtf::LN_defformat;
+ flag&=QName::tokenizer().insert(ns, "pnuldb") == NS_rtf::LN_pnuldb;
+ flag&=QName::tokenizer().insert(ns, "trgaph") == NS_rtf::LN_trgaph;
+ flag&=QName::tokenizer().insert(ns, "deflang") == NS_rtf::LN_deflang;
+ flag&=QName::tokenizer().insert(ns, "trhdr") == NS_rtf::LN_trhdr;
+ flag&=QName::tokenizer().insert(ns, "pnulhair") == NS_rtf::LN_pnulhair;
+ flag&=QName::tokenizer().insert(ns, "deflangfe") == NS_rtf::LN_deflangfe;
+ flag&=QName::tokenizer().insert(ns, "trkeep") == NS_rtf::LN_trkeep;
+ flag&=QName::tokenizer().insert(ns, "pnulnone") == NS_rtf::LN_pnulnone;
+ flag&=QName::tokenizer().insert(ns, "defshp") == NS_rtf::LN_defshp;
+ flag&=QName::tokenizer().insert(ns, "trleft") == NS_rtf::LN_trleft;
+ flag&=QName::tokenizer().insert(ns, "pnulth") == NS_rtf::LN_pnulth;
+ flag&=QName::tokenizer().insert(ns, "deftab") == NS_rtf::LN_deftab;
+ flag&=QName::tokenizer().insert(ns, "trowd") == NS_rtf::LN_trowd;
+ flag&=QName::tokenizer().insert(ns, "pnulw") == NS_rtf::LN_pnulw;
+ flag&=QName::tokenizer().insert(ns, "deleted") == NS_rtf::LN_deleted;
+ flag&=QName::tokenizer().insert(ns, "trpaddb") == NS_rtf::LN_trpaddb;
+ flag&=QName::tokenizer().insert(ns, "pnulwave") == NS_rtf::LN_pnulwave;
+ flag&=QName::tokenizer().insert(ns, "delrsid") == NS_rtf::LN_delrsid;
+ flag&=QName::tokenizer().insert(ns, "trpaddfb") == NS_rtf::LN_trpaddfb;
+ flag&=QName::tokenizer().insert(ns, "pnzodiac") == NS_rtf::LN_pnzodiac;
+ flag&=QName::tokenizer().insert(ns, "dfrauth") == NS_rtf::LN_dfrauth;
+ flag&=QName::tokenizer().insert(ns, "trpaddfl") == NS_rtf::LN_trpaddfl;
+ flag&=QName::tokenizer().insert(ns, "pnzodiacd") == NS_rtf::LN_pnzodiacd;
+ flag&=QName::tokenizer().insert(ns, "dfrdate") == NS_rtf::LN_dfrdate;
+ flag&=QName::tokenizer().insert(ns, "trpaddfr") == NS_rtf::LN_trpaddfr;
+ flag&=QName::tokenizer().insert(ns, "dfrmtxtx") == NS_rtf::LN_dfrmtxtx;
+ flag&=QName::tokenizer().insert(ns, "pnzodiacl") == NS_rtf::LN_pnzodiacl;
+ flag&=QName::tokenizer().insert(ns, "trpaddft") == NS_rtf::LN_trpaddft;
+ flag&=QName::tokenizer().insert(ns, "posnegx") == NS_rtf::LN_posnegx;
+ flag&=QName::tokenizer().insert(ns, "dfrmtxty") == NS_rtf::LN_dfrmtxty;
+ flag&=QName::tokenizer().insert(ns, "trpaddl") == NS_rtf::LN_trpaddl;
+ flag&=QName::tokenizer().insert(ns, "posnegy") == NS_rtf::LN_posnegy;
+ flag&=QName::tokenizer().insert(ns, "dfrstart") == NS_rtf::LN_dfrstart;
+ flag&=QName::tokenizer().insert(ns, "trpaddr") == NS_rtf::LN_trpaddr;
+ flag&=QName::tokenizer().insert(ns, "posx") == NS_rtf::LN_posx;
+ flag&=QName::tokenizer().insert(ns, "dfrstop") == NS_rtf::LN_dfrstop;
+ flag&=QName::tokenizer().insert(ns, "trpaddt") == NS_rtf::LN_trpaddt;
+ flag&=QName::tokenizer().insert(ns, "posxc") == NS_rtf::LN_posxc;
+ flag&=QName::tokenizer().insert(ns, "dfrxst") == NS_rtf::LN_dfrxst;
+ flag&=QName::tokenizer().insert(ns, "trpat") == NS_rtf::LN_trpat;
+ flag&=QName::tokenizer().insert(ns, "posxi") == NS_rtf::LN_posxi;
+ flag&=QName::tokenizer().insert(ns, "dghorigin") == NS_rtf::LN_dghorigin;
+ flag&=QName::tokenizer().insert(ns, "trqc") == NS_rtf::LN_trqc;
+ flag&=QName::tokenizer().insert(ns, "posxl") == NS_rtf::LN_posxl;
+ flag&=QName::tokenizer().insert(ns, "trql") == NS_rtf::LN_trql;
+ flag&=QName::tokenizer().insert(ns, "dghshow") == NS_rtf::LN_dghshow;
+ flag&=QName::tokenizer().insert(ns, "posxo") == NS_rtf::LN_posxo;
+ flag&=QName::tokenizer().insert(ns, "trqr") == NS_rtf::LN_trqr;
+ flag&=QName::tokenizer().insert(ns, "posxr") == NS_rtf::LN_posxr;
+ flag&=QName::tokenizer().insert(ns, "dghspace") == NS_rtf::LN_dghspace;
+ flag&=QName::tokenizer().insert(ns, "trrh") == NS_rtf::LN_trrh;
+ flag&=QName::tokenizer().insert(ns, "posy") == NS_rtf::LN_posy;
+ flag&=QName::tokenizer().insert(ns, "dgmargin") == NS_rtf::LN_dgmargin;
+ flag&=QName::tokenizer().insert(ns, "trshdng") == NS_rtf::LN_trshdng;
+ flag&=QName::tokenizer().insert(ns, "posyb") == NS_rtf::LN_posyb;
+ flag&=QName::tokenizer().insert(ns, "dgsnap") == NS_rtf::LN_dgsnap;
+ flag&=QName::tokenizer().insert(ns, "trspdb") == NS_rtf::LN_trspdb;
+ flag&=QName::tokenizer().insert(ns, "posyc") == NS_rtf::LN_posyc;
+ flag&=QName::tokenizer().insert(ns, "dgvorigin") == NS_rtf::LN_dgvorigin;
+ flag&=QName::tokenizer().insert(ns, "trspdfb") == NS_rtf::LN_trspdfb;
+ flag&=QName::tokenizer().insert(ns, "posyil") == NS_rtf::LN_posyil;
+ flag&=QName::tokenizer().insert(ns, "dgvshow") == NS_rtf::LN_dgvshow;
+ flag&=QName::tokenizer().insert(ns, "posyin") == NS_rtf::LN_posyin;
+ flag&=QName::tokenizer().insert(ns, "trspdfl") == NS_rtf::LN_trspdfl;
+ flag&=QName::tokenizer().insert(ns, "dgvspace") == NS_rtf::LN_dgvspace;
+ flag&=QName::tokenizer().insert(ns, "posyout") == NS_rtf::LN_posyout;
+ flag&=QName::tokenizer().insert(ns, "trspdfr") == NS_rtf::LN_trspdfr;
+ flag&=QName::tokenizer().insert(ns, "dibitmap") == NS_rtf::LN_dibitmap;
+ flag&=QName::tokenizer().insert(ns, "posyt") == NS_rtf::LN_posyt;
+ flag&=QName::tokenizer().insert(ns, "trspdft") == NS_rtf::LN_trspdft;
+ flag&=QName::tokenizer().insert(ns, "dn") == NS_rtf::LN_dn;
+ flag&=QName::tokenizer().insert(ns, "prcolbl") == NS_rtf::LN_prcolbl;
+ flag&=QName::tokenizer().insert(ns, "trspdl") == NS_rtf::LN_trspdl;
+ flag&=QName::tokenizer().insert(ns, "dntblnsbdb") == NS_rtf::LN_dntblnsbdb;
+ flag&=QName::tokenizer().insert(ns, "trspdr") == NS_rtf::LN_trspdr;
+ flag&=QName::tokenizer().insert(ns, "printdata") == NS_rtf::LN_printdata;
+ flag&=QName::tokenizer().insert(ns, "do") == NS_rtf::LN_do;
+ flag&=QName::tokenizer().insert(ns, "trspdt") == NS_rtf::LN_trspdt;
+ flag&=QName::tokenizer().insert(ns, "printim") == NS_rtf::LN_printim;
+ flag&=QName::tokenizer().insert(ns, "dobxcolumn") == NS_rtf::LN_dobxcolumn;
+ flag&=QName::tokenizer().insert(ns, "private") == NS_rtf::LN_private;
+ flag&=QName::tokenizer().insert(ns, "truncatefontheight") == NS_rtf::LN_truncatefontheight;
+ flag&=QName::tokenizer().insert(ns, "dobxmargin") == NS_rtf::LN_dobxmargin;
+ flag&=QName::tokenizer().insert(ns, "propname") == NS_rtf::LN_propname;
+ flag&=QName::tokenizer().insert(ns, "trwWidthA") == NS_rtf::LN_trwWidthA;
+ flag&=QName::tokenizer().insert(ns, "dobxpage") == NS_rtf::LN_dobxpage;
+ flag&=QName::tokenizer().insert(ns, "proptype") == NS_rtf::LN_proptype;
+ flag&=QName::tokenizer().insert(ns, "trwWidthB") == NS_rtf::LN_trwWidthB;
+ flag&=QName::tokenizer().insert(ns, "dobymargin") == NS_rtf::LN_dobymargin;
+ flag&=QName::tokenizer().insert(ns, "trwWidth") == NS_rtf::LN_trwWidth;
+ flag&=QName::tokenizer().insert(ns, "dobypage") == NS_rtf::LN_dobypage;
+ flag&=QName::tokenizer().insert(ns, "ts") == NS_rtf::LN_ts;
+ flag&=QName::tokenizer().insert(ns, "tsbgbdiag") == NS_rtf::LN_tsbgbdiag;
+ flag&=QName::tokenizer().insert(ns, "tsbgcross") == NS_rtf::LN_tsbgcross;
+ flag&=QName::tokenizer().insert(ns, "tsbgdcross") == NS_rtf::LN_tsbgdcross;
+ flag&=QName::tokenizer().insert(ns, "tsbgdkbdiag") == NS_rtf::LN_tsbgdkbdiag;
+ flag&=QName::tokenizer().insert(ns, "tsbgdkcross") == NS_rtf::LN_tsbgdkcross;
+ flag&=QName::tokenizer().insert(ns, "tsbgdkdcross") == NS_rtf::LN_tsbgdkdcross;
+ flag&=QName::tokenizer().insert(ns, "tsbgdkfdiag") == NS_rtf::LN_tsbgdkfdiag;
+ flag&=QName::tokenizer().insert(ns, "tsbgdkhor") == NS_rtf::LN_tsbgdkhor;
+ flag&=QName::tokenizer().insert(ns, "tsbgdkvert") == NS_rtf::LN_tsbgdkvert;
+ flag&=QName::tokenizer().insert(ns, "tsbgfdiag") == NS_rtf::LN_tsbgfdiag;
+ flag&=QName::tokenizer().insert(ns, "tsbghoriz") == NS_rtf::LN_tsbghoriz;
+ flag&=QName::tokenizer().insert(ns, "tsbgvert") == NS_rtf::LN_tsbgvert;
+ flag&=QName::tokenizer().insert(ns, "tsbrdrb") == NS_rtf::LN_tsbrdrb;
+ flag&=QName::tokenizer().insert(ns, "tsbrdrdgl") == NS_rtf::LN_tsbrdrdgl;
+ flag&=QName::tokenizer().insert(ns, "tsbrdrdgr") == NS_rtf::LN_tsbrdrdgr;
+ flag&=QName::tokenizer().insert(ns, "tsbrdrh") == NS_rtf::LN_tsbrdrh;
+ flag&=QName::tokenizer().insert(ns, "tsbrdrl") == NS_rtf::LN_tsbrdrl;
+ flag&=QName::tokenizer().insert(ns, "tsbrdrr") == NS_rtf::LN_tsbrdrr;
+ flag&=QName::tokenizer().insert(ns, "tsbrdrt") == NS_rtf::LN_tsbrdrt;
+ flag&=QName::tokenizer().insert(ns, "tsbrdrv") == NS_rtf::LN_tsbrdrv;
+ flag&=QName::tokenizer().insert(ns, "tscbandhorzeven") == NS_rtf::LN_tscbandhorzeven;
+ flag&=QName::tokenizer().insert(ns, "tscbandhorzodd") == NS_rtf::LN_tscbandhorzodd;
+ flag&=QName::tokenizer().insert(ns, "tscbandsh") == NS_rtf::LN_tscbandsh;
+ flag&=QName::tokenizer().insert(ns, "tscbandsv") == NS_rtf::LN_tscbandsv;
+ flag&=QName::tokenizer().insert(ns, "tscbandverteven") == NS_rtf::LN_tscbandverteven;
+ flag&=QName::tokenizer().insert(ns, "tscbandvertodd") == NS_rtf::LN_tscbandvertodd;
+ flag&=QName::tokenizer().insert(ns, "tscellcbpat") == NS_rtf::LN_tscellcbpat;
+ flag&=QName::tokenizer().insert(ns, "tscellcfpat") == NS_rtf::LN_tscellcfpat;
+ flag&=QName::tokenizer().insert(ns, "tscellpaddb") == NS_rtf::LN_tscellpaddb;
+ flag&=QName::tokenizer().insert(ns, "tscellpaddfb") == NS_rtf::LN_tscellpaddfb;
+ flag&=QName::tokenizer().insert(ns, "tscellpaddfl") == NS_rtf::LN_tscellpaddfl;
+ flag&=QName::tokenizer().insert(ns, "tscellpaddfr") == NS_rtf::LN_tscellpaddfr;
+ flag&=QName::tokenizer().insert(ns, "tscellpaddft") == NS_rtf::LN_tscellpaddft;
+ flag&=QName::tokenizer().insert(ns, "tscellpaddl") == NS_rtf::LN_tscellpaddl;
+ flag&=QName::tokenizer().insert(ns, "tscellpaddr") == NS_rtf::LN_tscellpaddr;
+ flag&=QName::tokenizer().insert(ns, "tscellpaddt") == NS_rtf::LN_tscellpaddt;
+ flag&=QName::tokenizer().insert(ns, "tscellpct") == NS_rtf::LN_tscellpct;
+ flag&=QName::tokenizer().insert(ns, "tscellwidth") == NS_rtf::LN_tscellwidth;
+ flag&=QName::tokenizer().insert(ns, "tscellwidthfts") == NS_rtf::LN_tscellwidthfts;
+ flag&=QName::tokenizer().insert(ns, "tscfirstcol") == NS_rtf::LN_tscfirstcol;
+ flag&=QName::tokenizer().insert(ns, "tscfirstrow") == NS_rtf::LN_tscfirstrow;
+ flag&=QName::tokenizer().insert(ns, "tsclastcol") == NS_rtf::LN_tsclastcol;
+ flag&=QName::tokenizer().insert(ns, "tsclastrow") == NS_rtf::LN_tsclastrow;
+ flag&=QName::tokenizer().insert(ns, "tscnecell") == NS_rtf::LN_tscnecell;
+ flag&=QName::tokenizer().insert(ns, "tscnwcell") == NS_rtf::LN_tscnwcell;
+ flag&=QName::tokenizer().insert(ns, "tscsecell") == NS_rtf::LN_tscsecell;
+ flag&=QName::tokenizer().insert(ns, "tscswcell") == NS_rtf::LN_tscswcell;
+ flag&=QName::tokenizer().insert(ns, "tsd") == NS_rtf::LN_tsd;
+ flag&=QName::tokenizer().insert(ns, "tsnowrap") == NS_rtf::LN_tsnowrap;
+ flag&=QName::tokenizer().insert(ns, "tsrowd") == NS_rtf::LN_tsrowd;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace rtf failed", flag);}
+ void test_smil(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0";
+ flag&=QName::tokenizer().insert(ns, "calcMode") == NS_smil::LN_calcMode;
+ flag&=QName::tokenizer().insert(ns, "type") == NS_smil::LN_type;
+ flag&=QName::tokenizer().insert(ns, "subtype") == NS_smil::LN_subtype;
+ flag&=QName::tokenizer().insert(ns, "direction") == NS_smil::LN_direction;
+ flag&=QName::tokenizer().insert(ns, "fadeColor") == NS_smil::LN_fadeColor;
+ flag&=QName::tokenizer().insert(ns, "mode") == NS_smil::LN_mode;
+ flag&=QName::tokenizer().insert(ns, "targetElement") == NS_smil::LN_targetElement;
+ flag&=QName::tokenizer().insert(ns, "attributeName") == NS_smil::LN_attributeName;
+ flag&=QName::tokenizer().insert(ns, "values") == NS_smil::LN_values;
+ flag&=QName::tokenizer().insert(ns, "keyTimes") == NS_smil::LN_keyTimes;
+ flag&=QName::tokenizer().insert(ns, "keySplines") == NS_smil::LN_keySplines;
+ flag&=QName::tokenizer().insert(ns, "accumulate") == NS_smil::LN_accumulate;
+ flag&=QName::tokenizer().insert(ns, "additive") == NS_smil::LN_additive;
+ flag&=QName::tokenizer().insert(ns, "to") == NS_smil::LN_to;
+ flag&=QName::tokenizer().insert(ns, "from") == NS_smil::LN_from;
+ flag&=QName::tokenizer().insert(ns, "by") == NS_smil::LN_by;
+ flag&=QName::tokenizer().insert(ns, "begin") == NS_smil::LN_begin;
+ flag&=QName::tokenizer().insert(ns, "end") == NS_smil::LN_end;
+ flag&=QName::tokenizer().insert(ns, "dur") == NS_smil::LN_dur;
+ flag&=QName::tokenizer().insert(ns, "endsync") == NS_smil::LN_endsync;
+ flag&=QName::tokenizer().insert(ns, "repeatDur") == NS_smil::LN_repeatDur;
+ flag&=QName::tokenizer().insert(ns, "repeatCount") == NS_smil::LN_repeatCount;
+ flag&=QName::tokenizer().insert(ns, "fill") == NS_smil::LN_fill;
+ flag&=QName::tokenizer().insert(ns, "fillDefault") == NS_smil::LN_fillDefault;
+ flag&=QName::tokenizer().insert(ns, "restart") == NS_smil::LN_restart;
+ flag&=QName::tokenizer().insert(ns, "restartDefault") == NS_smil::LN_restartDefault;
+ flag&=QName::tokenizer().insert(ns, "accelerate") == NS_smil::LN_accelerate;
+ flag&=QName::tokenizer().insert(ns, "decelerate") == NS_smil::LN_decelerate;
+ flag&=QName::tokenizer().insert(ns, "autoReverse") == NS_smil::LN_autoReverse;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace smil failed", flag);}
+ void test_w12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/word/2005/8/25/wordml";
+ flag&=QName::tokenizer().insert(ns, "truncateFontHeight") == NS_w12::LN_truncateFontHeight;
+ flag&=QName::tokenizer().insert(ns, "mwSmallCaps") == NS_w12::LN_mwSmallCaps;
+ flag&=QName::tokenizer().insert(ns, "usePrinterMetrics") == NS_w12::LN_usePrinterMetrics;
+ flag&=QName::tokenizer().insert(ns, "ww6BorderRules") == NS_w12::LN_ww6BorderRules;
+ flag&=QName::tokenizer().insert(ns, "wrapTrailSpaces") == NS_w12::LN_wrapTrailSpaces;
+ flag&=QName::tokenizer().insert(ns, "footnoteLayoutLikeWW8") == NS_w12::LN_footnoteLayoutLikeWW8;
+ flag&=QName::tokenizer().insert(ns, "shapeLayoutLikeWW8") == NS_w12::LN_shapeLayoutLikeWW8;
+ flag&=QName::tokenizer().insert(ns, "alignTablesRowByRow") == NS_w12::LN_alignTablesRowByRow;
+ flag&=QName::tokenizer().insert(ns, "forgetLastTabAlignment") == NS_w12::LN_forgetLastTabAlignment;
+ flag&=QName::tokenizer().insert(ns, "adjustLineHeightInTable") == NS_w12::LN_adjustLineHeightInTable;
+ flag&=QName::tokenizer().insert(ns, "autoSpaceLikeWord95") == NS_w12::LN_autoSpaceLikeWord95;
+ flag&=QName::tokenizer().insert(ns, "noSpaceRaiseLower") == NS_w12::LN_noSpaceRaiseLower;
+ flag&=QName::tokenizer().insert(ns, "doNotUseHTMLParagraphAutoSpacing") == NS_w12::LN_doNotUseHTMLParagraphAutoSpacing;
+ flag&=QName::tokenizer().insert(ns, "layoutRawTableWidth") == NS_w12::LN_layoutRawTableWidth;
+ flag&=QName::tokenizer().insert(ns, "layoutTableRowsApart") == NS_w12::LN_layoutTableRowsApart;
+ flag&=QName::tokenizer().insert(ns, "useWord97LineBreakingRules") == NS_w12::LN_useWord97LineBreakingRules;
+ flag&=QName::tokenizer().insert(ns, "breakWrappedTables") == NS_w12::LN_breakWrappedTables;
+ flag&=QName::tokenizer().insert(ns, "snapToGridInCell") == NS_w12::LN_snapToGridInCell;
+ flag&=QName::tokenizer().insert(ns, "dontAllowFieldEndSelect") == NS_w12::LN_dontAllowFieldEndSelect;
+ flag&=QName::tokenizer().insert(ns, "applyBreakingRules") == NS_w12::LN_applyBreakingRules;
+ flag&=QName::tokenizer().insert(ns, "wrapTextWithPunct") == NS_w12::LN_wrapTextWithPunct;
+ flag&=QName::tokenizer().insert(ns, "useAsianBreakRules") == NS_w12::LN_useAsianBreakRules;
+ flag&=QName::tokenizer().insert(ns, "useWord2002TableStyleRules") == NS_w12::LN_useWord2002TableStyleRules;
+ flag&=QName::tokenizer().insert(ns, "dontGrowAutofit") == NS_w12::LN_dontGrowAutofit;
+ flag&=QName::tokenizer().insert(ns, "useFELayout") == NS_w12::LN_useFELayout;
+ flag&=QName::tokenizer().insert(ns, "useNormalStyleForList") == NS_w12::LN_useNormalStyleForList;
+ flag&=QName::tokenizer().insert(ns, "dontUseIndentAsNumberingTabStop") == NS_w12::LN_dontUseIndentAsNumberingTabStop;
+ flag&=QName::tokenizer().insert(ns, "dontUseWord11FELineBreak") == NS_w12::LN_dontUseWord11FELineBreak;
+ flag&=QName::tokenizer().insert(ns, "allowSpaceOfSameStyleInTable") == NS_w12::LN_allowSpaceOfSameStyleInTable;
+ flag&=QName::tokenizer().insert(ns, "ww11IndentRules") == NS_w12::LN_ww11IndentRules;
+ flag&=QName::tokenizer().insert(ns, "dontAutofitConstrainedTables") == NS_w12::LN_dontAutofitConstrainedTables;
+ flag&=QName::tokenizer().insert(ns, "autofitLikeWW11") == NS_w12::LN_autofitLikeWW11;
+ flag&=QName::tokenizer().insert(ns, "underlineTabInNumList") == NS_w12::LN_underlineTabInNumList;
+ flag&=QName::tokenizer().insert(ns, "docVar") == NS_w12::LN_docVar;
+ flag&=QName::tokenizer().insert(ns, "rsidRoot") == NS_w12::LN_rsidRoot;
+ flag&=QName::tokenizer().insert(ns, "rsid") == NS_w12::LN_rsid;
+ flag&=QName::tokenizer().insert(ns, "rPrDefault") == NS_w12::LN_rPrDefault;
+ flag&=QName::tokenizer().insert(ns, "pPrDefault") == NS_w12::LN_pPrDefault;
+ flag&=QName::tokenizer().insert(ns, "view") == NS_w12::LN_view;
+ flag&=QName::tokenizer().insert(ns, "zoom") == NS_w12::LN_zoom;
+ flag&=QName::tokenizer().insert(ns, "removePersonalInformation") == NS_w12::LN_removePersonalInformation;
+ flag&=QName::tokenizer().insert(ns, "removeDateAndTime") == NS_w12::LN_removeDateAndTime;
+ flag&=QName::tokenizer().insert(ns, "dontDisplayPageBoundaries") == NS_w12::LN_dontDisplayPageBoundaries;
+ flag&=QName::tokenizer().insert(ns, "displayBackgroundShape") == NS_w12::LN_displayBackgroundShape;
+ flag&=QName::tokenizer().insert(ns, "printPostScriptOverText") == NS_w12::LN_printPostScriptOverText;
+ flag&=QName::tokenizer().insert(ns, "printFractionalCharacterWidth") == NS_w12::LN_printFractionalCharacterWidth;
+ flag&=QName::tokenizer().insert(ns, "printFormsData") == NS_w12::LN_printFormsData;
+ flag&=QName::tokenizer().insert(ns, "embedTrueTypeFonts") == NS_w12::LN_embedTrueTypeFonts;
+ flag&=QName::tokenizer().insert(ns, "doNotEmbedSystemFonts") == NS_w12::LN_doNotEmbedSystemFonts;
+ flag&=QName::tokenizer().insert(ns, "saveSubsetFonts") == NS_w12::LN_saveSubsetFonts;
+ flag&=QName::tokenizer().insert(ns, "saveFormsData") == NS_w12::LN_saveFormsData;
+ flag&=QName::tokenizer().insert(ns, "mirrorMargins") == NS_w12::LN_mirrorMargins;
+ flag&=QName::tokenizer().insert(ns, "alignBordersAndEdges") == NS_w12::LN_alignBordersAndEdges;
+ flag&=QName::tokenizer().insert(ns, "bordersDontSurroundHeader") == NS_w12::LN_bordersDontSurroundHeader;
+ flag&=QName::tokenizer().insert(ns, "bordersDontSurroundFooter") == NS_w12::LN_bordersDontSurroundFooter;
+ flag&=QName::tokenizer().insert(ns, "gutterAtTop") == NS_w12::LN_gutterAtTop;
+ flag&=QName::tokenizer().insert(ns, "hideSpellingErrors") == NS_w12::LN_hideSpellingErrors;
+ flag&=QName::tokenizer().insert(ns, "hideGrammaticalErrors") == NS_w12::LN_hideGrammaticalErrors;
+ flag&=QName::tokenizer().insert(ns, "activeWritingStyle") == NS_w12::LN_activeWritingStyle;
+ flag&=QName::tokenizer().insert(ns, "proofState") == NS_w12::LN_proofState;
+ flag&=QName::tokenizer().insert(ns, "formsDesign") == NS_w12::LN_formsDesign;
+ flag&=QName::tokenizer().insert(ns, "attachedTemplate") == NS_w12::LN_attachedTemplate;
+ flag&=QName::tokenizer().insert(ns, "linkStyles") == NS_w12::LN_linkStyles;
+ flag&=QName::tokenizer().insert(ns, "stylePaneFormatFilter") == NS_w12::LN_stylePaneFormatFilter;
+ flag&=QName::tokenizer().insert(ns, "stylePaneSortMethod") == NS_w12::LN_stylePaneSortMethod;
+ flag&=QName::tokenizer().insert(ns, "documentType") == NS_w12::LN_documentType;
+ flag&=QName::tokenizer().insert(ns, "mailMerge") == NS_w12::LN_mailMerge;
+ flag&=QName::tokenizer().insert(ns, "revisionView") == NS_w12::LN_revisionView;
+ flag&=QName::tokenizer().insert(ns, "ilvl") == NS_w12::LN_ilvl;
+ flag&=QName::tokenizer().insert(ns, "ilfo") == NS_w12::LN_ilfo;
+ flag&=QName::tokenizer().insert(ns, "top") == NS_w12::LN_top;
+ flag&=QName::tokenizer().insert(ns, "left") == NS_w12::LN_left;
+ flag&=QName::tokenizer().insert(ns, "bottom") == NS_w12::LN_bottom;
+ flag&=QName::tokenizer().insert(ns, "right") == NS_w12::LN_right;
+ flag&=QName::tokenizer().insert(ns, "between") == NS_w12::LN_between;
+ flag&=QName::tokenizer().insert(ns, "bar") == NS_w12::LN_bar;
+ flag&=QName::tokenizer().insert(ns, "tab") == NS_w12::LN_tab;
+ flag&=QName::tokenizer().insert(ns, "pStyle") == NS_w12::LN_pStyle;
+ flag&=QName::tokenizer().insert(ns, "keepNext") == NS_w12::LN_keepNext;
+ flag&=QName::tokenizer().insert(ns, "keepLines") == NS_w12::LN_keepLines;
+ flag&=QName::tokenizer().insert(ns, "pageBreakBefore") == NS_w12::LN_pageBreakBefore;
+ flag&=QName::tokenizer().insert(ns, "framePr") == NS_w12::LN_framePr;
+ flag&=QName::tokenizer().insert(ns, "widowControl") == NS_w12::LN_widowControl;
+ flag&=QName::tokenizer().insert(ns, "listPr") == NS_w12::LN_listPr;
+ flag&=QName::tokenizer().insert(ns, "supressLineNumbers") == NS_w12::LN_supressLineNumbers;
+ flag&=QName::tokenizer().insert(ns, "pBdr") == NS_w12::LN_pBdr;
+ flag&=QName::tokenizer().insert(ns, "shd") == NS_w12::LN_shd;
+ flag&=QName::tokenizer().insert(ns, "tabs") == NS_w12::LN_tabs;
+ flag&=QName::tokenizer().insert(ns, "suppressAutoHyphens") == NS_w12::LN_suppressAutoHyphens;
+ flag&=QName::tokenizer().insert(ns, "kinsoku") == NS_w12::LN_kinsoku;
+ flag&=QName::tokenizer().insert(ns, "wordWrap") == NS_w12::LN_wordWrap;
+ flag&=QName::tokenizer().insert(ns, "overflowPunct") == NS_w12::LN_overflowPunct;
+ flag&=QName::tokenizer().insert(ns, "topLinePunct") == NS_w12::LN_topLinePunct;
+ flag&=QName::tokenizer().insert(ns, "autoSpaceDE") == NS_w12::LN_autoSpaceDE;
+ flag&=QName::tokenizer().insert(ns, "autoSpaceDN") == NS_w12::LN_autoSpaceDN;
+ flag&=QName::tokenizer().insert(ns, "bidi") == NS_w12::LN_bidi;
+ flag&=QName::tokenizer().insert(ns, "adjustRightInd") == NS_w12::LN_adjustRightInd;
+ flag&=QName::tokenizer().insert(ns, "snapToGrid") == NS_w12::LN_snapToGrid;
+ flag&=QName::tokenizer().insert(ns, "spacing") == NS_w12::LN_spacing;
+ flag&=QName::tokenizer().insert(ns, "ind") == NS_w12::LN_ind;
+ flag&=QName::tokenizer().insert(ns, "contextualSpacing") == NS_w12::LN_contextualSpacing;
+ flag&=QName::tokenizer().insert(ns, "mirrorIndents") == NS_w12::LN_mirrorIndents;
+ flag&=QName::tokenizer().insert(ns, "textboxTightWrap") == NS_w12::LN_textboxTightWrap;
+ flag&=QName::tokenizer().insert(ns, "suppressOverlap") == NS_w12::LN_suppressOverlap;
+ flag&=QName::tokenizer().insert(ns, "jc") == NS_w12::LN_jc;
+ flag&=QName::tokenizer().insert(ns, "textDirection") == NS_w12::LN_textDirection;
+ flag&=QName::tokenizer().insert(ns, "textAlignment") == NS_w12::LN_textAlignment;
+ flag&=QName::tokenizer().insert(ns, "outlineLvl") == NS_w12::LN_outlineLvl;
+ flag&=QName::tokenizer().insert(ns, "divId") == NS_w12::LN_divId;
+ flag&=QName::tokenizer().insert(ns, "cnfStyle") == NS_w12::LN_cnfStyle;
+ flag&=QName::tokenizer().insert(ns, "rPr") == NS_w12::LN_rPr;
+ flag&=QName::tokenizer().insert(ns, "sectPr") == NS_w12::LN_sectPr;
+ flag&=QName::tokenizer().insert(ns, "movie") == NS_w12::LN_movie;
+ flag&=QName::tokenizer().insert(ns, "background") == NS_w12::LN_background;
+ flag&=QName::tokenizer().insert(ns, "applet") == NS_w12::LN_applet;
+ flag&=QName::tokenizer().insert(ns, "msAccessHTML") == NS_w12::LN_msAccessHTML;
+ flag&=QName::tokenizer().insert(ns, "anchor") == NS_w12::LN_anchor;
+ flag&=QName::tokenizer().insert(ns, "inline") == NS_w12::LN_inline;
+ flag&=QName::tokenizer().insert(ns, "args") == NS_w12::LN_args;
+ flag&=QName::tokenizer().insert(ns, "appletText") == NS_w12::LN_appletText;
+ flag&=QName::tokenizer().insert(ns, "fldData") == NS_w12::LN_fldData;
+ flag&=QName::tokenizer().insert(ns, "r") == NS_w12::LN_r;
+ flag&=QName::tokenizer().insert(ns, "fldSimple") == NS_w12::LN_fldSimple;
+ flag&=QName::tokenizer().insert(ns, "hyperlink") == NS_w12::LN_hyperlink;
+ flag&=QName::tokenizer().insert(ns, "ffData") == NS_w12::LN_ffData;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_w12::LN_name;
+ flag&=QName::tokenizer().insert(ns, "trackRevisions") == NS_w12::LN_trackRevisions;
+ flag&=QName::tokenizer().insert(ns, "enabled") == NS_w12::LN_enabled;
+ flag&=QName::tokenizer().insert(ns, "trackMoves") == NS_w12::LN_trackMoves;
+ flag&=QName::tokenizer().insert(ns, "calcOnExit") == NS_w12::LN_calcOnExit;
+ flag&=QName::tokenizer().insert(ns, "entryMacro") == NS_w12::LN_entryMacro;
+ flag&=QName::tokenizer().insert(ns, "trackFormatting") == NS_w12::LN_trackFormatting;
+ flag&=QName::tokenizer().insert(ns, "exitMacro") == NS_w12::LN_exitMacro;
+ flag&=QName::tokenizer().insert(ns, "documentProtection") == NS_w12::LN_documentProtection;
+ flag&=QName::tokenizer().insert(ns, "helpText") == NS_w12::LN_helpText;
+ flag&=QName::tokenizer().insert(ns, "statusText") == NS_w12::LN_statusText;
+ flag&=QName::tokenizer().insert(ns, "autoFormatOverride") == NS_w12::LN_autoFormatOverride;
+ flag&=QName::tokenizer().insert(ns, "checkBox") == NS_w12::LN_checkBox;
+ flag&=QName::tokenizer().insert(ns, "styleLockTheme") == NS_w12::LN_styleLockTheme;
+ flag&=QName::tokenizer().insert(ns, "ddList") == NS_w12::LN_ddList;
+ flag&=QName::tokenizer().insert(ns, "textInput") == NS_w12::LN_textInput;
+ flag&=QName::tokenizer().insert(ns, "styleLockQFSet") == NS_w12::LN_styleLockQFSet;
+ flag&=QName::tokenizer().insert(ns, "size") == NS_w12::LN_size;
+ flag&=QName::tokenizer().insert(ns, "defaultTabStop") == NS_w12::LN_defaultTabStop;
+ flag&=QName::tokenizer().insert(ns, "sizeAuto") == NS_w12::LN_sizeAuto;
+ flag&=QName::tokenizer().insert(ns, "default") == NS_w12::LN_default;
+ flag&=QName::tokenizer().insert(ns, "autoHyphenation") == NS_w12::LN_autoHyphenation;
+ flag&=QName::tokenizer().insert(ns, "listEntry") == NS_w12::LN_listEntry;
+ flag&=QName::tokenizer().insert(ns, "type") == NS_w12::LN_type;
+ flag&=QName::tokenizer().insert(ns, "maxLengh") == NS_w12::LN_maxLengh;
+ flag&=QName::tokenizer().insert(ns, "consecutiveHyphenLimit") == NS_w12::LN_consecutiveHyphenLimit;
+ flag&=QName::tokenizer().insert(ns, "format") == NS_w12::LN_format;
+ flag&=QName::tokenizer().insert(ns, "hyphenationZone") == NS_w12::LN_hyphenationZone;
+ flag&=QName::tokenizer().insert(ns, "col") == NS_w12::LN_col;
+ flag&=QName::tokenizer().insert(ns, "hdr") == NS_w12::LN_hdr;
+ flag&=QName::tokenizer().insert(ns, "ftr") == NS_w12::LN_ftr;
+ flag&=QName::tokenizer().insert(ns, "doNotHyphenateCaps") == NS_w12::LN_doNotHyphenateCaps;
+ flag&=QName::tokenizer().insert(ns, "showEnvelope") == NS_w12::LN_showEnvelope;
+ flag&=QName::tokenizer().insert(ns, "headerReference") == NS_w12::LN_headerReference;
+ flag&=QName::tokenizer().insert(ns, "summaryLength") == NS_w12::LN_summaryLength;
+ flag&=QName::tokenizer().insert(ns, "footerReference") == NS_w12::LN_footerReference;
+ flag&=QName::tokenizer().insert(ns, "footnotePr") == NS_w12::LN_footnotePr;
+ flag&=QName::tokenizer().insert(ns, "clickAndTypeStyle") == NS_w12::LN_clickAndTypeStyle;
+ flag&=QName::tokenizer().insert(ns, "endnotePr") == NS_w12::LN_endnotePr;
+ flag&=QName::tokenizer().insert(ns, "defaultTableStyle") == NS_w12::LN_defaultTableStyle;
+ flag&=QName::tokenizer().insert(ns, "pgSz") == NS_w12::LN_pgSz;
+ flag&=QName::tokenizer().insert(ns, "pgMar") == NS_w12::LN_pgMar;
+ flag&=QName::tokenizer().insert(ns, "evenAndOddHeaders") == NS_w12::LN_evenAndOddHeaders;
+ flag&=QName::tokenizer().insert(ns, "paperSrc") == NS_w12::LN_paperSrc;
+ flag&=QName::tokenizer().insert(ns, "pgBorders") == NS_w12::LN_pgBorders;
+ flag&=QName::tokenizer().insert(ns, "bookFoldRevPrinting") == NS_w12::LN_bookFoldRevPrinting;
+ flag&=QName::tokenizer().insert(ns, "lnNumType") == NS_w12::LN_lnNumType;
+ flag&=QName::tokenizer().insert(ns, "bookFoldPrinting") == NS_w12::LN_bookFoldPrinting;
+ flag&=QName::tokenizer().insert(ns, "pgNumType") == NS_w12::LN_pgNumType;
+ flag&=QName::tokenizer().insert(ns, "cols") == NS_w12::LN_cols;
+ flag&=QName::tokenizer().insert(ns, "bookFoldPrintingSheets") == NS_w12::LN_bookFoldPrintingSheets;
+ flag&=QName::tokenizer().insert(ns, "formProt") == NS_w12::LN_formProt;
+ flag&=QName::tokenizer().insert(ns, "vAlign") == NS_w12::LN_vAlign;
+ flag&=QName::tokenizer().insert(ns, "drawingGridHorizontalSpacing") == NS_w12::LN_drawingGridHorizontalSpacing;
+ flag&=QName::tokenizer().insert(ns, "noEndnote") == NS_w12::LN_noEndnote;
+ flag&=QName::tokenizer().insert(ns, "titlePg") == NS_w12::LN_titlePg;
+ flag&=QName::tokenizer().insert(ns, "textFlow") == NS_w12::LN_textFlow;
+ flag&=QName::tokenizer().insert(ns, "drawingGridVerticalSpacing") == NS_w12::LN_drawingGridVerticalSpacing;
+ flag&=QName::tokenizer().insert(ns, "rtlGutter") == NS_w12::LN_rtlGutter;
+ flag&=QName::tokenizer().insert(ns, "docGrid") == NS_w12::LN_docGrid;
+ flag&=QName::tokenizer().insert(ns, "br") == NS_w12::LN_br;
+ flag&=QName::tokenizer().insert(ns, "displayHorizontalDrawingGridEvery") == NS_w12::LN_displayHorizontalDrawingGridEvery;
+ flag&=QName::tokenizer().insert(ns, "t") == NS_w12::LN_t;
+ flag&=QName::tokenizer().insert(ns, "delText") == NS_w12::LN_delText;
+ flag&=QName::tokenizer().insert(ns, "displayVerticalDrawingGridEvery") == NS_w12::LN_displayVerticalDrawingGridEvery;
+ flag&=QName::tokenizer().insert(ns, "instrText") == NS_w12::LN_instrText;
+ flag&=QName::tokenizer().insert(ns, "delInstrText") == NS_w12::LN_delInstrText;
+ flag&=QName::tokenizer().insert(ns, "useMarginsForDrawingGridOrigin") == NS_w12::LN_useMarginsForDrawingGridOrigin;
+ flag&=QName::tokenizer().insert(ns, "noBreakHyphen") == NS_w12::LN_noBreakHyphen;
+ flag&=QName::tokenizer().insert(ns, "softHyphen") == NS_w12::LN_softHyphen;
+ flag&=QName::tokenizer().insert(ns, "drawingGridHorizontalOrigin") == NS_w12::LN_drawingGridHorizontalOrigin;
+ flag&=QName::tokenizer().insert(ns, "dayShort") == NS_w12::LN_dayShort;
+ flag&=QName::tokenizer().insert(ns, "monthShort") == NS_w12::LN_monthShort;
+ flag&=QName::tokenizer().insert(ns, "drawingGridVerticalOrigin") == NS_w12::LN_drawingGridVerticalOrigin;
+ flag&=QName::tokenizer().insert(ns, "yearShort") == NS_w12::LN_yearShort;
+ flag&=QName::tokenizer().insert(ns, "dayLong") == NS_w12::LN_dayLong;
+ flag&=QName::tokenizer().insert(ns, "doNotShadeFormData") == NS_w12::LN_doNotShadeFormData;
+ flag&=QName::tokenizer().insert(ns, "monthLong") == NS_w12::LN_monthLong;
+ flag&=QName::tokenizer().insert(ns, "punctuationKerning") == NS_w12::LN_punctuationKerning;
+ flag&=QName::tokenizer().insert(ns, "yearLong") == NS_w12::LN_yearLong;
+ flag&=QName::tokenizer().insert(ns, "annotationRef") == NS_w12::LN_annotationRef;
+ flag&=QName::tokenizer().insert(ns, "characterSpacingControl") == NS_w12::LN_characterSpacingControl;
+ flag&=QName::tokenizer().insert(ns, "footnoteRef") == NS_w12::LN_footnoteRef;
+ flag&=QName::tokenizer().insert(ns, "printTwoOnOne") == NS_w12::LN_printTwoOnOne;
+ flag&=QName::tokenizer().insert(ns, "endnoteRef") == NS_w12::LN_endnoteRef;
+ flag&=QName::tokenizer().insert(ns, "separator") == NS_w12::LN_separator;
+ flag&=QName::tokenizer().insert(ns, "strictFirstAndLastChars") == NS_w12::LN_strictFirstAndLastChars;
+ flag&=QName::tokenizer().insert(ns, "footnote") == NS_w12::LN_footnote;
+ flag&=QName::tokenizer().insert(ns, "noLineBreaksAfter") == NS_w12::LN_noLineBreaksAfter;
+ flag&=QName::tokenizer().insert(ns, "endnote") == NS_w12::LN_endnote;
+ flag&=QName::tokenizer().insert(ns, "noLineBreaksBefore") == NS_w12::LN_noLineBreaksBefore;
+ flag&=QName::tokenizer().insert(ns, "continuationSeparator") == NS_w12::LN_continuationSeparator;
+ flag&=QName::tokenizer().insert(ns, "sym") == NS_w12::LN_sym;
+ flag&=QName::tokenizer().insert(ns, "webPageEncoding") == NS_w12::LN_webPageEncoding;
+ flag&=QName::tokenizer().insert(ns, "pgNum") == NS_w12::LN_pgNum;
+ flag&=QName::tokenizer().insert(ns, "cr") == NS_w12::LN_cr;
+ flag&=QName::tokenizer().insert(ns, "object") == NS_w12::LN_object;
+ flag&=QName::tokenizer().insert(ns, "optimizeForBrowser") == NS_w12::LN_optimizeForBrowser;
+ flag&=QName::tokenizer().insert(ns, "pict") == NS_w12::LN_pict;
+ flag&=QName::tokenizer().insert(ns, "relyOnVML") == NS_w12::LN_relyOnVML;
+ flag&=QName::tokenizer().insert(ns, "fldChar") == NS_w12::LN_fldChar;
+ flag&=QName::tokenizer().insert(ns, "allowPNG") == NS_w12::LN_allowPNG;
+ flag&=QName::tokenizer().insert(ns, "ruby") == NS_w12::LN_ruby;
+ flag&=QName::tokenizer().insert(ns, "doNotRelyOnCSS") == NS_w12::LN_doNotRelyOnCSS;
+ flag&=QName::tokenizer().insert(ns, "footnoteReference") == NS_w12::LN_footnoteReference;
+ flag&=QName::tokenizer().insert(ns, "endnoteReference") == NS_w12::LN_endnoteReference;
+ flag&=QName::tokenizer().insert(ns, "doNotSaveWebPagesAsSingleFile") == NS_w12::LN_doNotSaveWebPagesAsSingleFile;
+ flag&=QName::tokenizer().insert(ns, "oArt") == NS_w12::LN_oArt;
+ flag&=QName::tokenizer().insert(ns, "ptab") == NS_w12::LN_ptab;
+ flag&=QName::tokenizer().insert(ns, "doNotOrganizeInFolder") == NS_w12::LN_doNotOrganizeInFolder;
+ flag&=QName::tokenizer().insert(ns, "rStyle") == NS_w12::LN_rStyle;
+ flag&=QName::tokenizer().insert(ns, "rFonts") == NS_w12::LN_rFonts;
+ flag&=QName::tokenizer().insert(ns, "b") == NS_w12::LN_b;
+ flag&=QName::tokenizer().insert(ns, "doNotUseLongFileNames") == NS_w12::LN_doNotUseLongFileNames;
+ flag&=QName::tokenizer().insert(ns, "bCs") == NS_w12::LN_bCs;
+ flag&=QName::tokenizer().insert(ns, "i") == NS_w12::LN_i;
+ flag&=QName::tokenizer().insert(ns, "pixelsPerInch") == NS_w12::LN_pixelsPerInch;
+ flag&=QName::tokenizer().insert(ns, "iCs") == NS_w12::LN_iCs;
+ flag&=QName::tokenizer().insert(ns, "caps") == NS_w12::LN_caps;
+ flag&=QName::tokenizer().insert(ns, "targetScreenSz") == NS_w12::LN_targetScreenSz;
+ flag&=QName::tokenizer().insert(ns, "smallCaps") == NS_w12::LN_smallCaps;
+ flag&=QName::tokenizer().insert(ns, "savePreviewPicture") == NS_w12::LN_savePreviewPicture;
+ flag&=QName::tokenizer().insert(ns, "strike") == NS_w12::LN_strike;
+ flag&=QName::tokenizer().insert(ns, "dstrike") == NS_w12::LN_dstrike;
+ flag&=QName::tokenizer().insert(ns, "outline") == NS_w12::LN_outline;
+ flag&=QName::tokenizer().insert(ns, "validateAgainstSchema") == NS_w12::LN_validateAgainstSchema;
+ flag&=QName::tokenizer().insert(ns, "shadow") == NS_w12::LN_shadow;
+ flag&=QName::tokenizer().insert(ns, "emboss") == NS_w12::LN_emboss;
+ flag&=QName::tokenizer().insert(ns, "saveInvalidXML") == NS_w12::LN_saveInvalidXML;
+ flag&=QName::tokenizer().insert(ns, "imprint") == NS_w12::LN_imprint;
+ flag&=QName::tokenizer().insert(ns, "noProof") == NS_w12::LN_noProof;
+ flag&=QName::tokenizer().insert(ns, "ignoreMixedContent") == NS_w12::LN_ignoreMixedContent;
+ flag&=QName::tokenizer().insert(ns, "vanish") == NS_w12::LN_vanish;
+ flag&=QName::tokenizer().insert(ns, "webHidden") == NS_w12::LN_webHidden;
+ flag&=QName::tokenizer().insert(ns, "color") == NS_w12::LN_color;
+ flag&=QName::tokenizer().insert(ns, "alwaysShowPlaceholderText") == NS_w12::LN_alwaysShowPlaceholderText;
+ flag&=QName::tokenizer().insert(ns, "w") == NS_w12::LN_w;
+ flag&=QName::tokenizer().insert(ns, "kern") == NS_w12::LN_kern;
+ flag&=QName::tokenizer().insert(ns, "position") == NS_w12::LN_position;
+ flag&=QName::tokenizer().insert(ns, "doNotUnderlineInvalidXML") == NS_w12::LN_doNotUnderlineInvalidXML;
+ flag&=QName::tokenizer().insert(ns, "sz") == NS_w12::LN_sz;
+ flag&=QName::tokenizer().insert(ns, "szCs") == NS_w12::LN_szCs;
+ flag&=QName::tokenizer().insert(ns, "highlight") == NS_w12::LN_highlight;
+ flag&=QName::tokenizer().insert(ns, "removeWordSchemaOnSave") == NS_w12::LN_removeWordSchemaOnSave;
+ flag&=QName::tokenizer().insert(ns, "u") == NS_w12::LN_u;
+ flag&=QName::tokenizer().insert(ns, "effect") == NS_w12::LN_effect;
+ flag&=QName::tokenizer().insert(ns, "useXSLTWhenSaving") == NS_w12::LN_useXSLTWhenSaving;
+ flag&=QName::tokenizer().insert(ns, "bdr") == NS_w12::LN_bdr;
+ flag&=QName::tokenizer().insert(ns, "fitText") == NS_w12::LN_fitText;
+ flag&=QName::tokenizer().insert(ns, "saveThroughXSLT") == NS_w12::LN_saveThroughXSLT;
+ flag&=QName::tokenizer().insert(ns, "vertAlign") == NS_w12::LN_vertAlign;
+ flag&=QName::tokenizer().insert(ns, "showXMLTags") == NS_w12::LN_showXMLTags;
+ flag&=QName::tokenizer().insert(ns, "rtl") == NS_w12::LN_rtl;
+ flag&=QName::tokenizer().insert(ns, "cs") == NS_w12::LN_cs;
+ flag&=QName::tokenizer().insert(ns, "em") == NS_w12::LN_em;
+ flag&=QName::tokenizer().insert(ns, "alwaysMergeEmptyNamespace") == NS_w12::LN_alwaysMergeEmptyNamespace;
+ flag&=QName::tokenizer().insert(ns, "hyphen") == NS_w12::LN_hyphen;
+ flag&=QName::tokenizer().insert(ns, "lang") == NS_w12::LN_lang;
+ flag&=QName::tokenizer().insert(ns, "doNotEmbedLinguisticData") == NS_w12::LN_doNotEmbedLinguisticData;
+ flag&=QName::tokenizer().insert(ns, "asianLayout") == NS_w12::LN_asianLayout;
+ flag&=QName::tokenizer().insert(ns, "specVanish") == NS_w12::LN_specVanish;
+ flag&=QName::tokenizer().insert(ns, "hdrShapeDefaults") == NS_w12::LN_hdrShapeDefaults;
+ flag&=QName::tokenizer().insert(ns, "oMath") == NS_w12::LN_oMath;
+ flag&=QName::tokenizer().insert(ns, "compat") == NS_w12::LN_compat;
+ flag&=QName::tokenizer().insert(ns, "lists") == NS_w12::LN_lists;
+ flag&=QName::tokenizer().insert(ns, "styles") == NS_w12::LN_styles;
+ flag&=QName::tokenizer().insert(ns, "docVars") == NS_w12::LN_docVars;
+ flag&=QName::tokenizer().insert(ns, "fonts") == NS_w12::LN_fonts;
+ flag&=QName::tokenizer().insert(ns, "rsids") == NS_w12::LN_rsids;
+ flag&=QName::tokenizer().insert(ns, "rubyAlign") == NS_w12::LN_rubyAlign;
+ flag&=QName::tokenizer().insert(ns, "hps") == NS_w12::LN_hps;
+ flag&=QName::tokenizer().insert(ns, "uiCompat97To2003") == NS_w12::LN_uiCompat97To2003;
+ flag&=QName::tokenizer().insert(ns, "hpsRaise") == NS_w12::LN_hpsRaise;
+ flag&=QName::tokenizer().insert(ns, "binData") == NS_w12::LN_binData;
+ flag&=QName::tokenizer().insert(ns, "hpsBaseText") == NS_w12::LN_hpsBaseText;
+ flag&=QName::tokenizer().insert(ns, "sourceFileName") == NS_w12::LN_sourceFileName;
+ flag&=QName::tokenizer().insert(ns, "lid") == NS_w12::LN_lid;
+ flag&=QName::tokenizer().insert(ns, "marW") == NS_w12::LN_marW;
+ flag&=QName::tokenizer().insert(ns, "rubyPr") == NS_w12::LN_rubyPr;
+ flag&=QName::tokenizer().insert(ns, "marH") == NS_w12::LN_marH;
+ flag&=QName::tokenizer().insert(ns, "rt") == NS_w12::LN_rt;
+ flag&=QName::tokenizer().insert(ns, "scrollbar") == NS_w12::LN_scrollbar;
+ flag&=QName::tokenizer().insert(ns, "rubyBase") == NS_w12::LN_rubyBase;
+ flag&=QName::tokenizer().insert(ns, "dateFormat") == NS_w12::LN_dateFormat;
+ flag&=QName::tokenizer().insert(ns, "noResizeAllowed") == NS_w12::LN_noResizeAllowed;
+ flag&=QName::tokenizer().insert(ns, "listItem") == NS_w12::LN_listItem;
+ flag&=QName::tokenizer().insert(ns, "linkedToFile") == NS_w12::LN_linkedToFile;
+ flag&=QName::tokenizer().insert(ns, "docPartType") == NS_w12::LN_docPartType;
+ flag&=QName::tokenizer().insert(ns, "noBorder") == NS_w12::LN_noBorder;
+ flag&=QName::tokenizer().insert(ns, "flatBorders") == NS_w12::LN_flatBorders;
+ flag&=QName::tokenizer().insert(ns, "docPartCategory") == NS_w12::LN_docPartCategory;
+ flag&=QName::tokenizer().insert(ns, "docPartUnique") == NS_w12::LN_docPartUnique;
+ flag&=QName::tokenizer().insert(ns, "framesetSplitbar") == NS_w12::LN_framesetSplitbar;
+ flag&=QName::tokenizer().insert(ns, "frameLayout") == NS_w12::LN_frameLayout;
+ flag&=QName::tokenizer().insert(ns, "pictureStorageType") == NS_w12::LN_pictureStorageType;
+ flag&=QName::tokenizer().insert(ns, "frameset") == NS_w12::LN_frameset;
+ flag&=QName::tokenizer().insert(ns, "docPart") == NS_w12::LN_docPart;
+ flag&=QName::tokenizer().insert(ns, "frame") == NS_w12::LN_frame;
+ flag&=QName::tokenizer().insert(ns, "start") == NS_w12::LN_start;
+ flag&=QName::tokenizer().insert(ns, "alias") == NS_w12::LN_alias;
+ flag&=QName::tokenizer().insert(ns, "nfc") == NS_w12::LN_nfc;
+ flag&=QName::tokenizer().insert(ns, "invalidIfBlank") == NS_w12::LN_invalidIfBlank;
+ flag&=QName::tokenizer().insert(ns, "lvlRestart") == NS_w12::LN_lvlRestart;
+ flag&=QName::tokenizer().insert(ns, "lock") == NS_w12::LN_lock;
+ flag&=QName::tokenizer().insert(ns, "isLgl") == NS_w12::LN_isLgl;
+ flag&=QName::tokenizer().insert(ns, "placeholder") == NS_w12::LN_placeholder;
+ flag&=QName::tokenizer().insert(ns, "suff") == NS_w12::LN_suff;
+ flag&=QName::tokenizer().insert(ns, "showingPlcHdr") == NS_w12::LN_showingPlcHdr;
+ flag&=QName::tokenizer().insert(ns, "lvlText") == NS_w12::LN_lvlText;
+ flag&=QName::tokenizer().insert(ns, "edittingPlcHdr") == NS_w12::LN_edittingPlcHdr;
+ flag&=QName::tokenizer().insert(ns, "lvlPicBulletId") == NS_w12::LN_lvlPicBulletId;
+ flag&=QName::tokenizer().insert(ns, "dataBinding") == NS_w12::LN_dataBinding;
+ flag&=QName::tokenizer().insert(ns, "legacy") == NS_w12::LN_legacy;
+ flag&=QName::tokenizer().insert(ns, "lvlJc") == NS_w12::LN_lvlJc;
+ flag&=QName::tokenizer().insert(ns, "comboBox") == NS_w12::LN_comboBox;
+ flag&=QName::tokenizer().insert(ns, "date") == NS_w12::LN_date;
+ flag&=QName::tokenizer().insert(ns, "lsid") == NS_w12::LN_lsid;
+ flag&=QName::tokenizer().insert(ns, "plt") == NS_w12::LN_plt;
+ flag&=QName::tokenizer().insert(ns, "docPartObj") == NS_w12::LN_docPartObj;
+ flag&=QName::tokenizer().insert(ns, "tmpl") == NS_w12::LN_tmpl;
+ flag&=QName::tokenizer().insert(ns, "docPartList") == NS_w12::LN_docPartList;
+ flag&=QName::tokenizer().insert(ns, "styleLink") == NS_w12::LN_styleLink;
+ flag&=QName::tokenizer().insert(ns, "dropDownList") == NS_w12::LN_dropDownList;
+ flag&=QName::tokenizer().insert(ns, "listStyleLink") == NS_w12::LN_listStyleLink;
+ flag&=QName::tokenizer().insert(ns, "lvl") == NS_w12::LN_lvl;
+ flag&=QName::tokenizer().insert(ns, "picture") == NS_w12::LN_picture;
+ flag&=QName::tokenizer().insert(ns, "richText") == NS_w12::LN_richText;
+ flag&=QName::tokenizer().insert(ns, "startOverride") == NS_w12::LN_startOverride;
+ flag&=QName::tokenizer().insert(ns, "text") == NS_w12::LN_text;
+ flag&=QName::tokenizer().insert(ns, "p") == NS_w12::LN_p;
+ flag&=QName::tokenizer().insert(ns, "ilst") == NS_w12::LN_ilst;
+ flag&=QName::tokenizer().insert(ns, "tbl") == NS_w12::LN_tbl;
+ flag&=QName::tokenizer().insert(ns, "tr") == NS_w12::LN_tr;
+ flag&=QName::tokenizer().insert(ns, "lvlOverride") == NS_w12::LN_lvlOverride;
+ flag&=QName::tokenizer().insert(ns, "tc") == NS_w12::LN_tc;
+ flag&=QName::tokenizer().insert(ns, "sdtPr") == NS_w12::LN_sdtPr;
+ flag&=QName::tokenizer().insert(ns, "listPicBullet") == NS_w12::LN_listPicBullet;
+ flag&=QName::tokenizer().insert(ns, "listDef") == NS_w12::LN_listDef;
+ flag&=QName::tokenizer().insert(ns, "sdtContent") == NS_w12::LN_sdtContent;
+ flag&=QName::tokenizer().insert(ns, "list") == NS_w12::LN_list;
+ flag&=QName::tokenizer().insert(ns, "pPr") == NS_w12::LN_pPr;
+ flag&=QName::tokenizer().insert(ns, "sdt") == NS_w12::LN_sdt;
+ flag&=QName::tokenizer().insert(ns, "ilfoMacAtCleanup") == NS_w12::LN_ilfoMacAtCleanup;
+ flag&=QName::tokenizer().insert(ns, "subDoc") == NS_w12::LN_subDoc;
+ flag&=QName::tokenizer().insert(ns, "gridCol") == NS_w12::LN_gridCol;
+ flag&=QName::tokenizer().insert(ns, "aliases") == NS_w12::LN_aliases;
+ flag&=QName::tokenizer().insert(ns, "insideH") == NS_w12::LN_insideH;
+ flag&=QName::tokenizer().insert(ns, "sti") == NS_w12::LN_sti;
+ flag&=QName::tokenizer().insert(ns, "insideV") == NS_w12::LN_insideV;
+ flag&=QName::tokenizer().insert(ns, "tl2br") == NS_w12::LN_tl2br;
+ flag&=QName::tokenizer().insert(ns, "basedOn") == NS_w12::LN_basedOn;
+ flag&=QName::tokenizer().insert(ns, "tr2bl") == NS_w12::LN_tr2bl;
+ flag&=QName::tokenizer().insert(ns, "tcW") == NS_w12::LN_tcW;
+ flag&=QName::tokenizer().insert(ns, "next") == NS_w12::LN_next;
+ flag&=QName::tokenizer().insert(ns, "link") == NS_w12::LN_link;
+ flag&=QName::tokenizer().insert(ns, "gridSpan") == NS_w12::LN_gridSpan;
+ flag&=QName::tokenizer().insert(ns, "priority") == NS_w12::LN_priority;
+ flag&=QName::tokenizer().insert(ns, "hmerge") == NS_w12::LN_hmerge;
+ flag&=QName::tokenizer().insert(ns, "autoRedefine") == NS_w12::LN_autoRedefine;
+ flag&=QName::tokenizer().insert(ns, "vmerge") == NS_w12::LN_vmerge;
+ flag&=QName::tokenizer().insert(ns, "hidden") == NS_w12::LN_hidden;
+ flag&=QName::tokenizer().insert(ns, "tcBorders") == NS_w12::LN_tcBorders;
+ flag&=QName::tokenizer().insert(ns, "noWrap") == NS_w12::LN_noWrap;
+ flag&=QName::tokenizer().insert(ns, "semiHidden") == NS_w12::LN_semiHidden;
+ flag&=QName::tokenizer().insert(ns, "tcMar") == NS_w12::LN_tcMar;
+ flag&=QName::tokenizer().insert(ns, "locked") == NS_w12::LN_locked;
+ flag&=QName::tokenizer().insert(ns, "tcFitText") == NS_w12::LN_tcFitText;
+ flag&=QName::tokenizer().insert(ns, "unhideWhenUsed") == NS_w12::LN_unhideWhenUsed;
+ flag&=QName::tokenizer().insert(ns, "hideMark") == NS_w12::LN_hideMark;
+ flag&=QName::tokenizer().insert(ns, "tcPr") == NS_w12::LN_tcPr;
+ flag&=QName::tokenizer().insert(ns, "qformat") == NS_w12::LN_qformat;
+ flag&=QName::tokenizer().insert(ns, "personal") == NS_w12::LN_personal;
+ flag&=QName::tokenizer().insert(ns, "gridBefore") == NS_w12::LN_gridBefore;
+ flag&=QName::tokenizer().insert(ns, "gridAfter") == NS_w12::LN_gridAfter;
+ flag&=QName::tokenizer().insert(ns, "personalCompose") == NS_w12::LN_personalCompose;
+ flag&=QName::tokenizer().insert(ns, "wBefore") == NS_w12::LN_wBefore;
+ flag&=QName::tokenizer().insert(ns, "personalReply") == NS_w12::LN_personalReply;
+ flag&=QName::tokenizer().insert(ns, "wAfter") == NS_w12::LN_wAfter;
+ flag&=QName::tokenizer().insert(ns, "tblStylePr") == NS_w12::LN_tblStylePr;
+ flag&=QName::tokenizer().insert(ns, "cantSplit") == NS_w12::LN_cantSplit;
+ flag&=QName::tokenizer().insert(ns, "trHeight") == NS_w12::LN_trHeight;
+ flag&=QName::tokenizer().insert(ns, "lsdException") == NS_w12::LN_lsdException;
+ flag&=QName::tokenizer().insert(ns, "tblHeader") == NS_w12::LN_tblHeader;
+ flag&=QName::tokenizer().insert(ns, "versionOfBuiltInStylenames") == NS_w12::LN_versionOfBuiltInStylenames;
+ flag&=QName::tokenizer().insert(ns, "tblCellSpacing") == NS_w12::LN_tblCellSpacing;
+ flag&=QName::tokenizer().insert(ns, "latentStyles") == NS_w12::LN_latentStyles;
+ flag&=QName::tokenizer().insert(ns, "tblPrEx") == NS_w12::LN_tblPrEx;
+ flag&=QName::tokenizer().insert(ns, "style") == NS_w12::LN_style;
+ flag&=QName::tokenizer().insert(ns, "trPr") == NS_w12::LN_trPr;
+ flag&=QName::tokenizer().insert(ns, "altName") == NS_w12::LN_altName;
+ flag&=QName::tokenizer().insert(ns, "tblStyle") == NS_w12::LN_tblStyle;
+ flag&=QName::tokenizer().insert(ns, "panose1") == NS_w12::LN_panose1;
+ flag&=QName::tokenizer().insert(ns, "tblpPr") == NS_w12::LN_tblpPr;
+ flag&=QName::tokenizer().insert(ns, "charset") == NS_w12::LN_charset;
+ flag&=QName::tokenizer().insert(ns, "family") == NS_w12::LN_family;
+ flag&=QName::tokenizer().insert(ns, "tblOverlap") == NS_w12::LN_tblOverlap;
+ flag&=QName::tokenizer().insert(ns, "tblRtl") == NS_w12::LN_tblRtl;
+ flag&=QName::tokenizer().insert(ns, "notTrueType") == NS_w12::LN_notTrueType;
+ flag&=QName::tokenizer().insert(ns, "pitch") == NS_w12::LN_pitch;
+ flag&=QName::tokenizer().insert(ns, "bidiVisual") == NS_w12::LN_bidiVisual;
+ flag&=QName::tokenizer().insert(ns, "sig") == NS_w12::LN_sig;
+ flag&=QName::tokenizer().insert(ns, "tblStyleRowBandSize") == NS_w12::LN_tblStyleRowBandSize;
+ flag&=QName::tokenizer().insert(ns, "defaultFonts") == NS_w12::LN_defaultFonts;
+ flag&=QName::tokenizer().insert(ns, "font") == NS_w12::LN_font;
+ flag&=QName::tokenizer().insert(ns, "tblStyleColBandSize") == NS_w12::LN_tblStyleColBandSize;
+ flag&=QName::tokenizer().insert(ns, "blockQuote") == NS_w12::LN_blockQuote;
+ flag&=QName::tokenizer().insert(ns, "tblW") == NS_w12::LN_tblW;
+ flag&=QName::tokenizer().insert(ns, "bodyDiv") == NS_w12::LN_bodyDiv;
+ flag&=QName::tokenizer().insert(ns, "tblInd") == NS_w12::LN_tblInd;
+ flag&=QName::tokenizer().insert(ns, "marLeft") == NS_w12::LN_marLeft;
+ flag&=QName::tokenizer().insert(ns, "tblBorders") == NS_w12::LN_tblBorders;
+ flag&=QName::tokenizer().insert(ns, "marRight") == NS_w12::LN_marRight;
+ flag&=QName::tokenizer().insert(ns, "tblLayout") == NS_w12::LN_tblLayout;
+ flag&=QName::tokenizer().insert(ns, "marTop") == NS_w12::LN_marTop;
+ flag&=QName::tokenizer().insert(ns, "tblCellMar") == NS_w12::LN_tblCellMar;
+ flag&=QName::tokenizer().insert(ns, "marBottom") == NS_w12::LN_marBottom;
+ flag&=QName::tokenizer().insert(ns, "tblLook") == NS_w12::LN_tblLook;
+ flag&=QName::tokenizer().insert(ns, "divBdr") == NS_w12::LN_divBdr;
+ flag&=QName::tokenizer().insert(ns, "tblPr") == NS_w12::LN_tblPr;
+ flag&=QName::tokenizer().insert(ns, "tblGrid") == NS_w12::LN_tblGrid;
+ flag&=QName::tokenizer().insert(ns, "divsChild") == NS_w12::LN_divsChild;
+ flag&=QName::tokenizer().insert(ns, "pos") == NS_w12::LN_pos;
+ flag&=QName::tokenizer().insert(ns, "div") == NS_w12::LN_div;
+ flag&=QName::tokenizer().insert(ns, "numFmt") == NS_w12::LN_numFmt;
+ flag&=QName::tokenizer().insert(ns, "txbxContent") == NS_w12::LN_txbxContent;
+ flag&=QName::tokenizer().insert(ns, "numStart") == NS_w12::LN_numStart;
+ flag&=QName::tokenizer().insert(ns, "cfChunk") == NS_w12::LN_cfChunk;
+ flag&=QName::tokenizer().insert(ns, "numRestart") == NS_w12::LN_numRestart;
+ flag&=QName::tokenizer().insert(ns, "active") == NS_w12::LN_active;
+ flag&=QName::tokenizer().insert(ns, "proofErr") == NS_w12::LN_proofErr;
+ flag&=QName::tokenizer().insert(ns, "hash") == NS_w12::LN_hash;
+ flag&=QName::tokenizer().insert(ns, "permStart") == NS_w12::LN_permStart;
+ flag&=QName::tokenizer().insert(ns, "column") == NS_w12::LN_column;
+ flag&=QName::tokenizer().insert(ns, "permEnd") == NS_w12::LN_permEnd;
+ flag&=QName::tokenizer().insert(ns, "uniqueTag") == NS_w12::LN_uniqueTag;
+ flag&=QName::tokenizer().insert(ns, "comments") == NS_w12::LN_comments;
+ flag&=QName::tokenizer().insert(ns, "mappedName") == NS_w12::LN_mappedName;
+ flag&=QName::tokenizer().insert(ns, "footnotes") == NS_w12::LN_footnotes;
+ flag&=QName::tokenizer().insert(ns, "dynamicAddress") == NS_w12::LN_dynamicAddress;
+ flag&=QName::tokenizer().insert(ns, "endnotes") == NS_w12::LN_endnotes;
+ flag&=QName::tokenizer().insert(ns, "udl") == NS_w12::LN_udl;
+ flag&=QName::tokenizer().insert(ns, "table") == NS_w12::LN_table;
+ flag&=QName::tokenizer().insert(ns, "category") == NS_w12::LN_category;
+ flag&=QName::tokenizer().insert(ns, "src") == NS_w12::LN_src;
+ flag&=QName::tokenizer().insert(ns, "types") == NS_w12::LN_types;
+ flag&=QName::tokenizer().insert(ns, "filter") == NS_w12::LN_filter;
+ flag&=QName::tokenizer().insert(ns, "description") == NS_w12::LN_description;
+ flag&=QName::tokenizer().insert(ns, "sort") == NS_w12::LN_sort;
+ flag&=QName::tokenizer().insert(ns, "guid") == NS_w12::LN_guid;
+ flag&=QName::tokenizer().insert(ns, "fieldMapData") == NS_w12::LN_fieldMapData;
+ flag&=QName::tokenizer().insert(ns, "docPartPr") == NS_w12::LN_docPartPr;
+ flag&=QName::tokenizer().insert(ns, "colDelim") == NS_w12::LN_colDelim;
+ flag&=QName::tokenizer().insert(ns, "docPartBody") == NS_w12::LN_docPartBody;
+ flag&=QName::tokenizer().insert(ns, "jdsoType") == NS_w12::LN_jdsoType;
+ flag&=QName::tokenizer().insert(ns, "docPr") == NS_w12::LN_docPr;
+ flag&=QName::tokenizer().insert(ns, "fHdr") == NS_w12::LN_fHdr;
+ flag&=QName::tokenizer().insert(ns, "docParts") == NS_w12::LN_docParts;
+ flag&=QName::tokenizer().insert(ns, "recipientData") == NS_w12::LN_recipientData;
+ flag&=QName::tokenizer().insert(ns, "ignoreSubtree") == NS_w12::LN_ignoreSubtree;
+ flag&=QName::tokenizer().insert(ns, "mainDocumentType") == NS_w12::LN_mainDocumentType;
+ flag&=QName::tokenizer().insert(ns, "ignoreElements") == NS_w12::LN_ignoreElements;
+ flag&=QName::tokenizer().insert(ns, "body") == NS_w12::LN_body;
+ flag&=QName::tokenizer().insert(ns, "linkToQuery") == NS_w12::LN_linkToQuery;
+ flag&=QName::tokenizer().insert(ns, "wordDocument") == NS_w12::LN_wordDocument;
+ flag&=QName::tokenizer().insert(ns, "dataType") == NS_w12::LN_dataType;
+ flag&=QName::tokenizer().insert(ns, "wordTemplate") == NS_w12::LN_wordTemplate;
+ flag&=QName::tokenizer().insert(ns, "defaultSQL") == NS_w12::LN_defaultSQL;
+ flag&=QName::tokenizer().insert(ns, "glossaryDocument") == NS_w12::LN_glossaryDocument;
+ flag&=QName::tokenizer().insert(ns, "connectString") == NS_w12::LN_connectString;
+ flag&=QName::tokenizer().insert(ns, "query") == NS_w12::LN_query;
+ flag&=QName::tokenizer().insert(ns, "dataSource") == NS_w12::LN_dataSource;
+ flag&=QName::tokenizer().insert(ns, "headerSource") == NS_w12::LN_headerSource;
+ flag&=QName::tokenizer().insert(ns, "doNotSuppressBlankLines") == NS_w12::LN_doNotSuppressBlankLines;
+ flag&=QName::tokenizer().insert(ns, "destination") == NS_w12::LN_destination;
+ flag&=QName::tokenizer().insert(ns, "addressFieldName") == NS_w12::LN_addressFieldName;
+ flag&=QName::tokenizer().insert(ns, "mailSubject") == NS_w12::LN_mailSubject;
+ flag&=QName::tokenizer().insert(ns, "mailAsAttachment") == NS_w12::LN_mailAsAttachment;
+ flag&=QName::tokenizer().insert(ns, "viewMergedData") == NS_w12::LN_viewMergedData;
+ flag&=QName::tokenizer().insert(ns, "activeRecord") == NS_w12::LN_activeRecord;
+ flag&=QName::tokenizer().insert(ns, "checkErrors") == NS_w12::LN_checkErrors;
+ flag&=QName::tokenizer().insert(ns, "odso") == NS_w12::LN_odso;
+ flag&=QName::tokenizer().insert(ns, "origWordTableRules") == NS_w12::LN_origWordTableRules;
+ flag&=QName::tokenizer().insert(ns, "wpJustification") == NS_w12::LN_wpJustification;
+ flag&=QName::tokenizer().insert(ns, "noTabHangInd") == NS_w12::LN_noTabHangInd;
+ flag&=QName::tokenizer().insert(ns, "noLeading") == NS_w12::LN_noLeading;
+ flag&=QName::tokenizer().insert(ns, "spaceForUL") == NS_w12::LN_spaceForUL;
+ flag&=QName::tokenizer().insert(ns, "noColumnBalance") == NS_w12::LN_noColumnBalance;
+ flag&=QName::tokenizer().insert(ns, "balanceSingleByteDoubleByteWidth") == NS_w12::LN_balanceSingleByteDoubleByteWidth;
+ flag&=QName::tokenizer().insert(ns, "transparentMetafiles") == NS_w12::LN_transparentMetafiles;
+ flag&=QName::tokenizer().insert(ns, "noExtraLineSpacing") == NS_w12::LN_noExtraLineSpacing;
+ flag&=QName::tokenizer().insert(ns, "doNotLeaveBackslashAlone") == NS_w12::LN_doNotLeaveBackslashAlone;
+ flag&=QName::tokenizer().insert(ns, "ulTrailSpace") == NS_w12::LN_ulTrailSpace;
+ flag&=QName::tokenizer().insert(ns, "doNotExpandShiftReturn") == NS_w12::LN_doNotExpandShiftReturn;
+ flag&=QName::tokenizer().insert(ns, "spacingInWholePoints") == NS_w12::LN_spacingInWholePoints;
+ flag&=QName::tokenizer().insert(ns, "lineWrapLikeWord6") == NS_w12::LN_lineWrapLikeWord6;
+ flag&=QName::tokenizer().insert(ns, "printBodyTextBeforeHeader") == NS_w12::LN_printBodyTextBeforeHeader;
+ flag&=QName::tokenizer().insert(ns, "printColBlack") == NS_w12::LN_printColBlack;
+ flag&=QName::tokenizer().insert(ns, "wpSpaceWidth") == NS_w12::LN_wpSpaceWidth;
+ flag&=QName::tokenizer().insert(ns, "showBreaksInFrames") == NS_w12::LN_showBreaksInFrames;
+ flag&=QName::tokenizer().insert(ns, "subFontBySize") == NS_w12::LN_subFontBySize;
+ flag&=QName::tokenizer().insert(ns, "suppressBottomSpacing") == NS_w12::LN_suppressBottomSpacing;
+ flag&=QName::tokenizer().insert(ns, "suppressTopSpacing") == NS_w12::LN_suppressTopSpacing;
+ flag&=QName::tokenizer().insert(ns, "suppressTopSpacingMac5") == NS_w12::LN_suppressTopSpacingMac5;
+ flag&=QName::tokenizer().insert(ns, "suppressTopSpacingWP") == NS_w12::LN_suppressTopSpacingWP;
+ flag&=QName::tokenizer().insert(ns, "suppressSpBfAfterPgBrk") == NS_w12::LN_suppressSpBfAfterPgBrk;
+ flag&=QName::tokenizer().insert(ns, "swapBordersFacingPages") == NS_w12::LN_swapBordersFacingPages;
+ flag&=QName::tokenizer().insert(ns, "convMailMergeEsc") == NS_w12::LN_convMailMergeEsc;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace w12 failed", flag);}
+ void test_rtfs(){
+ bool flag=true;
+ static const char ns[] = "urn:rtf:schema";
+ flag&=QName::tokenizer().insert(ns, "Toggle") == NS_rtfs::LN_Toggle;
+ flag&=QName::tokenizer().insert(ns, "Value") == NS_rtfs::LN_Value;
+ flag&=QName::tokenizer().insert(ns, "Flag") == NS_rtfs::LN_Flag;
+ flag&=QName::tokenizer().insert(ns, "Destination") == NS_rtfs::LN_Destination;
+ flag&=QName::tokenizer().insert(ns, "Symbol") == NS_rtfs::LN_Symbol;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace rtfs failed", flag);}
+ void test_x2(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2003/xml";
+ flag&=QName::tokenizer().insert(ns, "MapInfo") == NS_x2::LN_MapInfo;
+ flag&=QName::tokenizer().insert(ns, "Binding") == NS_x2::LN_Binding;
+ flag&=QName::tokenizer().insert(ns, "MapID") == NS_x2::LN_MapID;
+ flag&=QName::tokenizer().insert(ns, "Schema") == NS_x2::LN_Schema;
+ flag&=QName::tokenizer().insert(ns, "Map") == NS_x2::LN_Map;
+ flag&=QName::tokenizer().insert(ns, "ShowImportExportValidationErrors") == NS_x2::LN_ShowImportExportValidationErrors;
+ flag&=QName::tokenizer().insert(ns, "Append") == NS_x2::LN_Append;
+ flag&=QName::tokenizer().insert(ns, "Entry") == NS_x2::LN_Entry;
+ flag&=QName::tokenizer().insert(ns, "Mapdata") == NS_x2::LN_Mapdata;
+ flag&=QName::tokenizer().insert(ns, "Range") == NS_x2::LN_Range;
+ flag&=QName::tokenizer().insert(ns, "HeaderRange") == NS_x2::LN_HeaderRange;
+ flag&=QName::tokenizer().insert(ns, "XPath") == NS_x2::LN_XPath;
+ flag&=QName::tokenizer().insert(ns, "Field") == NS_x2::LN_Field;
+ flag&=QName::tokenizer().insert(ns, "ActiveRows") == NS_x2::LN_ActiveRows;
+ flag&=QName::tokenizer().insert(ns, "NoInserts") == NS_x2::LN_NoInserts;
+ flag&=QName::tokenizer().insert(ns, "ReadOnly") == NS_x2::LN_ReadOnly;
+ flag&=QName::tokenizer().insert(ns, "InstanceShape") == NS_x2::LN_InstanceShape;
+ flag&=QName::tokenizer().insert(ns, "ActiveRow") == NS_x2::LN_ActiveRow;
+ flag&=QName::tokenizer().insert(ns, "XSDType") == NS_x2::LN_XSDType;
+ flag&=QName::tokenizer().insert(ns, "Aggregate") == NS_x2::LN_Aggregate;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace x2 failed", flag);}
+ void test_ip12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/infopath/2003/solutionDefinition";
+ flag&=QName::tokenizer().insert(ns, "partFragment") == NS_ip12::LN_partFragment;
+ flag&=QName::tokenizer().insert(ns, "xmlFileAdapter") == NS_ip12::LN_xmlFileAdapter;
+ flag&=QName::tokenizer().insert(ns, "sharepointListAdapter") == NS_ip12::LN_sharepointListAdapter;
+ flag&=QName::tokenizer().insert(ns, "field") == NS_ip12::LN_field;
+ flag&=QName::tokenizer().insert(ns, "davAdapter") == NS_ip12::LN_davAdapter;
+ flag&=QName::tokenizer().insert(ns, "folderURL") == NS_ip12::LN_folderURL;
+ flag&=QName::tokenizer().insert(ns, "fileName") == NS_ip12::LN_fileName;
+ flag&=QName::tokenizer().insert(ns, "emailAdapter") == NS_ip12::LN_emailAdapter;
+ flag&=QName::tokenizer().insert(ns, "to") == NS_ip12::LN_to;
+ flag&=QName::tokenizer().insert(ns, "cc") == NS_ip12::LN_cc;
+ flag&=QName::tokenizer().insert(ns, "bcc") == NS_ip12::LN_bcc;
+ flag&=QName::tokenizer().insert(ns, "subject") == NS_ip12::LN_subject;
+ flag&=QName::tokenizer().insert(ns, "intro") == NS_ip12::LN_intro;
+ flag&=QName::tokenizer().insert(ns, "attachmentFileName") == NS_ip12::LN_attachmentFileName;
+ flag&=QName::tokenizer().insert(ns, "dataAdapters") == NS_ip12::LN_dataAdapters;
+ flag&=QName::tokenizer().insert(ns, "documentSchemas") == NS_ip12::LN_documentSchemas;
+ flag&=QName::tokenizer().insert(ns, "documentSchema") == NS_ip12::LN_documentSchema;
+ flag&=QName::tokenizer().insert(ns, "customValidation") == NS_ip12::LN_customValidation;
+ flag&=QName::tokenizer().insert(ns, "errorCondition") == NS_ip12::LN_errorCondition;
+ flag&=QName::tokenizer().insert(ns, "errorMessage") == NS_ip12::LN_errorMessage;
+ flag&=QName::tokenizer().insert(ns, "domEventHandlers") == NS_ip12::LN_domEventHandlers;
+ flag&=QName::tokenizer().insert(ns, "domEventHandler") == NS_ip12::LN_domEventHandler;
+ flag&=QName::tokenizer().insert(ns, "importParameters") == NS_ip12::LN_importParameters;
+ flag&=QName::tokenizer().insert(ns, "importSource") == NS_ip12::LN_importSource;
+ flag&=QName::tokenizer().insert(ns, "listProperties") == NS_ip12::LN_listProperties;
+ flag&=QName::tokenizer().insert(ns, "fields") == NS_ip12::LN_fields;
+ flag&=QName::tokenizer().insert(ns, "submit") == NS_ip12::LN_submit;
+ flag&=QName::tokenizer().insert(ns, "submitAction") == NS_ip12::LN_submitAction;
+ flag&=QName::tokenizer().insert(ns, "successMessage") == NS_ip12::LN_successMessage;
+ flag&=QName::tokenizer().insert(ns, "useHttpHandler") == NS_ip12::LN_useHttpHandler;
+ flag&=QName::tokenizer().insert(ns, "useScriptHandler") == NS_ip12::LN_useScriptHandler;
+ flag&=QName::tokenizer().insert(ns, "useQueryAdapter") == NS_ip12::LN_useQueryAdapter;
+ flag&=QName::tokenizer().insert(ns, "onLoad") == NS_ip12::LN_onLoad;
+ flag&=QName::tokenizer().insert(ns, "roles") == NS_ip12::LN_roles;
+ flag&=QName::tokenizer().insert(ns, "role") == NS_ip12::LN_role;
+ flag&=QName::tokenizer().insert(ns, "membership") == NS_ip12::LN_membership;
+ flag&=QName::tokenizer().insert(ns, "getUserNameFromData") == NS_ip12::LN_getUserNameFromData;
+ flag&=QName::tokenizer().insert(ns, "userName") == NS_ip12::LN_userName;
+ flag&=QName::tokenizer().insert(ns, "group") == NS_ip12::LN_group;
+ flag&=QName::tokenizer().insert(ns, "hwsWorkflow") == NS_ip12::LN_hwsWorkflow;
+ flag&=QName::tokenizer().insert(ns, "location") == NS_ip12::LN_location;
+ flag&=QName::tokenizer().insert(ns, "allowedActions") == NS_ip12::LN_allowedActions;
+ flag&=QName::tokenizer().insert(ns, "action") == NS_ip12::LN_action;
+ flag&=QName::tokenizer().insert(ns, "allowedTasks") == NS_ip12::LN_allowedTasks;
+ flag&=QName::tokenizer().insert(ns, "task") == NS_ip12::LN_task;
+ flag&=QName::tokenizer().insert(ns, "fileNew") == NS_ip12::LN_fileNew;
+ flag&=QName::tokenizer().insert(ns, "initialXmlDocument") == NS_ip12::LN_initialXmlDocument;
+ flag&=QName::tokenizer().insert(ns, "customCategory") == NS_ip12::LN_customCategory;
+ flag&=QName::tokenizer().insert(ns, "package") == NS_ip12::LN_package;
+ flag&=QName::tokenizer().insert(ns, "files") == NS_ip12::LN_files;
+ flag&=QName::tokenizer().insert(ns, "file") == NS_ip12::LN_file;
+ flag&=QName::tokenizer().insert(ns, "fileProperties") == NS_ip12::LN_fileProperties;
+ flag&=QName::tokenizer().insert(ns, "property") == NS_ip12::LN_property;
+ flag&=QName::tokenizer().insert(ns, "permissions") == NS_ip12::LN_permissions;
+ flag&=QName::tokenizer().insert(ns, "allowedControl") == NS_ip12::LN_allowedControl;
+ flag&=QName::tokenizer().insert(ns, "externalViews") == NS_ip12::LN_externalViews;
+ flag&=QName::tokenizer().insert(ns, "externalView") == NS_ip12::LN_externalView;
+ flag&=QName::tokenizer().insert(ns, "attributeData") == NS_ip12::LN_attributeData;
+ flag&=QName::tokenizer().insert(ns, "button") == NS_ip12::LN_button;
+ flag&=QName::tokenizer().insert(ns, "chooseFragment") == NS_ip12::LN_chooseFragment;
+ flag&=QName::tokenizer().insert(ns, "editWith") == NS_ip12::LN_editWith;
+ flag&=QName::tokenizer().insert(ns, "unboundControls") == NS_ip12::LN_unboundControls;
+ flag&=QName::tokenizer().insert(ns, "editing") == NS_ip12::LN_editing;
+ flag&=QName::tokenizer().insert(ns, "masterDetail") == NS_ip12::LN_masterDetail;
+ flag&=QName::tokenizer().insert(ns, "fragmentToInsert") == NS_ip12::LN_fragmentToInsert;
+ flag&=QName::tokenizer().insert(ns, "mainpane") == NS_ip12::LN_mainpane;
+ flag&=QName::tokenizer().insert(ns, "printSettings") == NS_ip12::LN_printSettings;
+ flag&=QName::tokenizer().insert(ns, "header") == NS_ip12::LN_header;
+ flag&=QName::tokenizer().insert(ns, "footer") == NS_ip12::LN_footer;
+ flag&=QName::tokenizer().insert(ns, "toolbar") == NS_ip12::LN_toolbar;
+ flag&=QName::tokenizer().insert(ns, "menu") == NS_ip12::LN_menu;
+ flag&=QName::tokenizer().insert(ns, "menuArea") == NS_ip12::LN_menuArea;
+ flag&=QName::tokenizer().insert(ns, "taskpane") == NS_ip12::LN_taskpane;
+ flag&=QName::tokenizer().insert(ns, "views") == NS_ip12::LN_views;
+ flag&=QName::tokenizer().insert(ns, "view") == NS_ip12::LN_view;
+ flag&=QName::tokenizer().insert(ns, "xmlToEdit") == NS_ip12::LN_xmlToEdit;
+ flag&=QName::tokenizer().insert(ns, "documentSignatures") == NS_ip12::LN_documentSignatures;
+ flag&=QName::tokenizer().insert(ns, "signedDataBlock") == NS_ip12::LN_signedDataBlock;
+ flag&=QName::tokenizer().insert(ns, "message") == NS_ip12::LN_message;
+ flag&=QName::tokenizer().insert(ns, "documentVersionUpgrade") == NS_ip12::LN_documentVersionUpgrade;
+ flag&=QName::tokenizer().insert(ns, "useTransform") == NS_ip12::LN_useTransform;
+ flag&=QName::tokenizer().insert(ns, "extensions") == NS_ip12::LN_extensions;
+ flag&=QName::tokenizer().insert(ns, "extension") == NS_ip12::LN_extension;
+ flag&=QName::tokenizer().insert(ns, "ruleSetAction") == NS_ip12::LN_ruleSetAction;
+ flag&=QName::tokenizer().insert(ns, "rule") == NS_ip12::LN_rule;
+ flag&=QName::tokenizer().insert(ns, "exitRuleSet") == NS_ip12::LN_exitRuleSet;
+ flag&=QName::tokenizer().insert(ns, "dialogBoxMessageAction") == NS_ip12::LN_dialogBoxMessageAction;
+ flag&=QName::tokenizer().insert(ns, "dialogBoxExpressionAction") == NS_ip12::LN_dialogBoxExpressionAction;
+ flag&=QName::tokenizer().insert(ns, "switchViewAction") == NS_ip12::LN_switchViewAction;
+ flag&=QName::tokenizer().insert(ns, "assignmentAction") == NS_ip12::LN_assignmentAction;
+ flag&=QName::tokenizer().insert(ns, "queryAction") == NS_ip12::LN_queryAction;
+ flag&=QName::tokenizer().insert(ns, "openNewDocumentAction") == NS_ip12::LN_openNewDocumentAction;
+ flag&=QName::tokenizer().insert(ns, "closeDocumentAction") == NS_ip12::LN_closeDocumentAction;
+ flag&=QName::tokenizer().insert(ns, "ruleSet") == NS_ip12::LN_ruleSet;
+ flag&=QName::tokenizer().insert(ns, "ruleSets") == NS_ip12::LN_ruleSets;
+ flag&=QName::tokenizer().insert(ns, "calculations") == NS_ip12::LN_calculations;
+ flag&=QName::tokenizer().insert(ns, "calculatedField") == NS_ip12::LN_calculatedField;
+ flag&=QName::tokenizer().insert(ns, "xDocumentClass") == NS_ip12::LN_xDocumentClass;
+ flag&=QName::tokenizer().insert(ns, "schemaErrorMessages") == NS_ip12::LN_schemaErrorMessages;
+ flag&=QName::tokenizer().insert(ns, "override") == NS_ip12::LN_override;
+ flag&=QName::tokenizer().insert(ns, "applicationParameters") == NS_ip12::LN_applicationParameters;
+ flag&=QName::tokenizer().insert(ns, "solutionProperties") == NS_ip12::LN_solutionProperties;
+ flag&=QName::tokenizer().insert(ns, "featureRestrictions") == NS_ip12::LN_featureRestrictions;
+ flag&=QName::tokenizer().insert(ns, "save") == NS_ip12::LN_save;
+ flag&=QName::tokenizer().insert(ns, "exportToWeb") == NS_ip12::LN_exportToWeb;
+ flag&=QName::tokenizer().insert(ns, "exportToExcel") == NS_ip12::LN_exportToExcel;
+ flag&=QName::tokenizer().insert(ns, "print") == NS_ip12::LN_print;
+ flag&=QName::tokenizer().insert(ns, "sendMail") == NS_ip12::LN_sendMail;
+ flag&=QName::tokenizer().insert(ns, "autoRecovery") == NS_ip12::LN_autoRecovery;
+ flag&=QName::tokenizer().insert(ns, "query") == NS_ip12::LN_query;
+ flag&=QName::tokenizer().insert(ns, "scripts") == NS_ip12::LN_scripts;
+ flag&=QName::tokenizer().insert(ns, "script") == NS_ip12::LN_script;
+ flag&=QName::tokenizer().insert(ns, "dataObjects") == NS_ip12::LN_dataObjects;
+ flag&=QName::tokenizer().insert(ns, "dataObject") == NS_ip12::LN_dataObject;
+ flag&=QName::tokenizer().insert(ns, "adoAdapter") == NS_ip12::LN_adoAdapter;
+ flag&=QName::tokenizer().insert(ns, "webServiceAdapter") == NS_ip12::LN_webServiceAdapter;
+ flag&=QName::tokenizer().insert(ns, "hwsAdapter") == NS_ip12::LN_hwsAdapter;
+ flag&=QName::tokenizer().insert(ns, "operation") == NS_ip12::LN_operation;
+ flag&=QName::tokenizer().insert(ns, "hwsOperation") == NS_ip12::LN_hwsOperation;
+ flag&=QName::tokenizer().insert(ns, "input") == NS_ip12::LN_input;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace ip12 failed", flag);}
+ void test_rel12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/package/2005/06/relationships";
+ flag&=QName::tokenizer().insert(ns, "Relationships") == NS_rel12::LN_Relationships;
+ flag&=QName::tokenizer().insert(ns, "Relationship") == NS_rel12::LN_Relationship;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace rel12 failed", flag);}
+ void test_NONE(){
+ bool flag=true;
+ static const char ns[] = "";
+ flag&=QName::tokenizer().insert(ns, "datatypeLibrary") == NS_NONE::LN_datatypeLibrary;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_NONE::LN_name;
+ flag&=QName::tokenizer().insert(ns, "combine") == NS_NONE::LN_combine;
+ flag&=QName::tokenizer().insert(ns, "type") == NS_NONE::LN_type;
+ flag&=QName::tokenizer().insert(ns, "ns") == NS_NONE::LN_ns;
+ flag&=QName::tokenizer().insert(ns, "href") == NS_NONE::LN_href;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace NONE failed", flag);}
+ void test_config(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:config:1.0";
+ flag&=QName::tokenizer().insert(ns, "config-item-set") == NS_config::LN_config_item_set;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_config::LN_name;
+ flag&=QName::tokenizer().insert(ns, "config-item") == NS_config::LN_config_item;
+ flag&=QName::tokenizer().insert(ns, "type") == NS_config::LN_type;
+ flag&=QName::tokenizer().insert(ns, "config-item-map-indexed") == NS_config::LN_config_item_map_indexed;
+ flag&=QName::tokenizer().insert(ns, "config-item-map-entry") == NS_config::LN_config_item_map_entry;
+ flag&=QName::tokenizer().insert(ns, "config-item-map-named") == NS_config::LN_config_item_map_named;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace config failed", flag);}
+ void test_text(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:text:1.0";
+ flag&=QName::tokenizer().insert(ns, "dde-connection-decl") == NS_text::LN_dde_connection_decl;
+ flag&=QName::tokenizer().insert(ns, "first-row-start-column") == NS_text::LN_first_row_start_column;
+ flag&=QName::tokenizer().insert(ns, "first-row-end-column") == NS_text::LN_first_row_end_column;
+ flag&=QName::tokenizer().insert(ns, "last-row-start-column") == NS_text::LN_last_row_start_column;
+ flag&=QName::tokenizer().insert(ns, "last-row-end-column") == NS_text::LN_last_row_end_column;
+ flag&=QName::tokenizer().insert(ns, "global") == NS_text::LN_global;
+ flag&=QName::tokenizer().insert(ns, "object-index-source") == NS_text::LN_object_index_source;
+ flag&=QName::tokenizer().insert(ns, "use-spreadsheet-objects") == NS_text::LN_use_spreadsheet_objects;
+ flag&=QName::tokenizer().insert(ns, "use-math-objects") == NS_text::LN_use_math_objects;
+ flag&=QName::tokenizer().insert(ns, "use-draw-objects") == NS_text::LN_use_draw_objects;
+ flag&=QName::tokenizer().insert(ns, "use-chart-objects") == NS_text::LN_use_chart_objects;
+ flag&=QName::tokenizer().insert(ns, "use-other-objects") == NS_text::LN_use_other_objects;
+ flag&=QName::tokenizer().insert(ns, "object-index-entry-template") == NS_text::LN_object_index_entry_template;
+ flag&=QName::tokenizer().insert(ns, "user-index") == NS_text::LN_user_index;
+ flag&=QName::tokenizer().insert(ns, "user-index-source") == NS_text::LN_user_index_source;
+ flag&=QName::tokenizer().insert(ns, "use-graphics") == NS_text::LN_use_graphics;
+ flag&=QName::tokenizer().insert(ns, "use-tables") == NS_text::LN_use_tables;
+ flag&=QName::tokenizer().insert(ns, "use-floating-frames") == NS_text::LN_use_floating_frames;
+ flag&=QName::tokenizer().insert(ns, "use-objects") == NS_text::LN_use_objects;
+ flag&=QName::tokenizer().insert(ns, "copy-outline-levels") == NS_text::LN_copy_outline_levels;
+ flag&=QName::tokenizer().insert(ns, "user-index-entry-template") == NS_text::LN_user_index_entry_template;
+ flag&=QName::tokenizer().insert(ns, "alphabetical-index") == NS_text::LN_alphabetical_index;
+ flag&=QName::tokenizer().insert(ns, "alphabetical-index-source") == NS_text::LN_alphabetical_index_source;
+ flag&=QName::tokenizer().insert(ns, "ignore-case") == NS_text::LN_ignore_case;
+ flag&=QName::tokenizer().insert(ns, "main-entry-style-name") == NS_text::LN_main_entry_style_name;
+ flag&=QName::tokenizer().insert(ns, "alphabetical-separators") == NS_text::LN_alphabetical_separators;
+ flag&=QName::tokenizer().insert(ns, "combine-entries") == NS_text::LN_combine_entries;
+ flag&=QName::tokenizer().insert(ns, "combine-entries-with-dash") == NS_text::LN_combine_entries_with_dash;
+ flag&=QName::tokenizer().insert(ns, "combine-entries-with-pp") == NS_text::LN_combine_entries_with_pp;
+ flag&=QName::tokenizer().insert(ns, "use-keys-as-entries") == NS_text::LN_use_keys_as_entries;
+ flag&=QName::tokenizer().insert(ns, "capitalize-entries") == NS_text::LN_capitalize_entries;
+ flag&=QName::tokenizer().insert(ns, "comma-separated") == NS_text::LN_comma_separated;
+ flag&=QName::tokenizer().insert(ns, "sort-algorithm") == NS_text::LN_sort_algorithm;
+ flag&=QName::tokenizer().insert(ns, "alphabetical-index-auto-mark-file") == NS_text::LN_alphabetical_index_auto_mark_file;
+ flag&=QName::tokenizer().insert(ns, "alphabetical-index-entry-template") == NS_text::LN_alphabetical_index_entry_template;
+ flag&=QName::tokenizer().insert(ns, "bibliography") == NS_text::LN_bibliography;
+ flag&=QName::tokenizer().insert(ns, "bibliography-source") == NS_text::LN_bibliography_source;
+ flag&=QName::tokenizer().insert(ns, "bibliography-entry-template") == NS_text::LN_bibliography_entry_template;
+ flag&=QName::tokenizer().insert(ns, "index-source-styles") == NS_text::LN_index_source_styles;
+ flag&=QName::tokenizer().insert(ns, "h") == NS_text::LN_h;
+ flag&=QName::tokenizer().insert(ns, "index-source-style") == NS_text::LN_index_source_style;
+ flag&=QName::tokenizer().insert(ns, "outline-level") == NS_text::LN_outline_level;
+ flag&=QName::tokenizer().insert(ns, "index-title-template") == NS_text::LN_index_title_template;
+ flag&=QName::tokenizer().insert(ns, "restart-numbering") == NS_text::LN_restart_numbering;
+ flag&=QName::tokenizer().insert(ns, "start-value") == NS_text::LN_start_value;
+ flag&=QName::tokenizer().insert(ns, "index-entry-chapter") == NS_text::LN_index_entry_chapter;
+ flag&=QName::tokenizer().insert(ns, "is-list-header") == NS_text::LN_is_list_header;
+ flag&=QName::tokenizer().insert(ns, "index-entry-text") == NS_text::LN_index_entry_text;
+ flag&=QName::tokenizer().insert(ns, "number") == NS_text::LN_number;
+ flag&=QName::tokenizer().insert(ns, "p") == NS_text::LN_p;
+ flag&=QName::tokenizer().insert(ns, "index-entry-page-number") == NS_text::LN_index_entry_page_number;
+ flag&=QName::tokenizer().insert(ns, "style-name") == NS_text::LN_style_name;
+ flag&=QName::tokenizer().insert(ns, "class-names") == NS_text::LN_class_names;
+ flag&=QName::tokenizer().insert(ns, "index-entry-span") == NS_text::LN_index_entry_span;
+ flag&=QName::tokenizer().insert(ns, "cond-style-name") == NS_text::LN_cond_style_name;
+ flag&=QName::tokenizer().insert(ns, "index-entry-bibliography") == NS_text::LN_index_entry_bibliography;
+ flag&=QName::tokenizer().insert(ns, "page-sequence") == NS_text::LN_page_sequence;
+ flag&=QName::tokenizer().insert(ns, "page") == NS_text::LN_page;
+ flag&=QName::tokenizer().insert(ns, "bibliography-data-field") == NS_text::LN_bibliography_data_field;
+ flag&=QName::tokenizer().insert(ns, "master-page-name") == NS_text::LN_master_page_name;
+ flag&=QName::tokenizer().insert(ns, "index-entry-tab-stop") == NS_text::LN_index_entry_tab_stop;
+ flag&=QName::tokenizer().insert(ns, "list") == NS_text::LN_list;
+ flag&=QName::tokenizer().insert(ns, "continue-numbering") == NS_text::LN_continue_numbering;
+ flag&=QName::tokenizer().insert(ns, "list-item") == NS_text::LN_list_item;
+ flag&=QName::tokenizer().insert(ns, "list-header") == NS_text::LN_list_header;
+ flag&=QName::tokenizer().insert(ns, "index-entry-link-start") == NS_text::LN_index_entry_link_start;
+ flag&=QName::tokenizer().insert(ns, "numbered-paragraph") == NS_text::LN_numbered_paragraph;
+ flag&=QName::tokenizer().insert(ns, "index-entry-link-end") == NS_text::LN_index_entry_link_end;
+ flag&=QName::tokenizer().insert(ns, "level") == NS_text::LN_level;
+ flag&=QName::tokenizer().insert(ns, "section") == NS_text::LN_section;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_text::LN_name;
+ flag&=QName::tokenizer().insert(ns, "protected") == NS_text::LN_protected;
+ flag&=QName::tokenizer().insert(ns, "protection-key") == NS_text::LN_protection_key;
+ flag&=QName::tokenizer().insert(ns, "display") == NS_text::LN_display;
+ flag&=QName::tokenizer().insert(ns, "condition") == NS_text::LN_condition;
+ flag&=QName::tokenizer().insert(ns, "section-source") == NS_text::LN_section_source;
+ flag&=QName::tokenizer().insert(ns, "section-name") == NS_text::LN_section_name;
+ flag&=QName::tokenizer().insert(ns, "filter-name") == NS_text::LN_filter_name;
+ flag&=QName::tokenizer().insert(ns, "linenumbering-configuration") == NS_text::LN_linenumbering_configuration;
+ flag&=QName::tokenizer().insert(ns, "tracked-changes") == NS_text::LN_tracked_changes;
+ flag&=QName::tokenizer().insert(ns, "number-lines") == NS_text::LN_number_lines;
+ flag&=QName::tokenizer().insert(ns, "track-changes") == NS_text::LN_track_changes;
+ flag&=QName::tokenizer().insert(ns, "increment") == NS_text::LN_increment;
+ flag&=QName::tokenizer().insert(ns, "changed-region") == NS_text::LN_changed_region;
+ flag&=QName::tokenizer().insert(ns, "number-position") == NS_text::LN_number_position;
+ flag&=QName::tokenizer().insert(ns, "id") == NS_text::LN_id;
+ flag&=QName::tokenizer().insert(ns, "offset") == NS_text::LN_offset;
+ flag&=QName::tokenizer().insert(ns, "insertion") == NS_text::LN_insertion;
+ flag&=QName::tokenizer().insert(ns, "count-empty-lines") == NS_text::LN_count_empty_lines;
+ flag&=QName::tokenizer().insert(ns, "deletion") == NS_text::LN_deletion;
+ flag&=QName::tokenizer().insert(ns, "format-change") == NS_text::LN_format_change;
+ flag&=QName::tokenizer().insert(ns, "count-in-text-boxes") == NS_text::LN_count_in_text_boxes;
+ flag&=QName::tokenizer().insert(ns, "change") == NS_text::LN_change;
+ flag&=QName::tokenizer().insert(ns, "restart-on-page") == NS_text::LN_restart_on_page;
+ flag&=QName::tokenizer().insert(ns, "change-start") == NS_text::LN_change_start;
+ flag&=QName::tokenizer().insert(ns, "change-end") == NS_text::LN_change_end;
+ flag&=QName::tokenizer().insert(ns, "linenumbering-separator") == NS_text::LN_linenumbering_separator;
+ flag&=QName::tokenizer().insert(ns, "change-id") == NS_text::LN_change_id;
+ flag&=QName::tokenizer().insert(ns, "notes-configuration") == NS_text::LN_notes_configuration;
+ flag&=QName::tokenizer().insert(ns, "variable-decls") == NS_text::LN_variable_decls;
+ flag&=QName::tokenizer().insert(ns, "citation-style-name") == NS_text::LN_citation_style_name;
+ flag&=QName::tokenizer().insert(ns, "sequence-decls") == NS_text::LN_sequence_decls;
+ flag&=QName::tokenizer().insert(ns, "user-field-decls") == NS_text::LN_user_field_decls;
+ flag&=QName::tokenizer().insert(ns, "citation-body-style-name") == NS_text::LN_citation_body_style_name;
+ flag&=QName::tokenizer().insert(ns, "dde-connection-decls") == NS_text::LN_dde_connection_decls;
+ flag&=QName::tokenizer().insert(ns, "default-style-name") == NS_text::LN_default_style_name;
+ flag&=QName::tokenizer().insert(ns, "s") == NS_text::LN_s;
+ flag&=QName::tokenizer().insert(ns, "c") == NS_text::LN_c;
+ flag&=QName::tokenizer().insert(ns, "start-numbering-at") == NS_text::LN_start_numbering_at;
+ flag&=QName::tokenizer().insert(ns, "tab") == NS_text::LN_tab;
+ flag&=QName::tokenizer().insert(ns, "tab-ref") == NS_text::LN_tab_ref;
+ flag&=QName::tokenizer().insert(ns, "footnotes-position") == NS_text::LN_footnotes_position;
+ flag&=QName::tokenizer().insert(ns, "line-break") == NS_text::LN_line_break;
+ flag&=QName::tokenizer().insert(ns, "span") == NS_text::LN_span;
+ flag&=QName::tokenizer().insert(ns, "a") == NS_text::LN_a;
+ flag&=QName::tokenizer().insert(ns, "note-continuation-notice-forward") == NS_text::LN_note_continuation_notice_forward;
+ flag&=QName::tokenizer().insert(ns, "visited-style-name") == NS_text::LN_visited_style_name;
+ flag&=QName::tokenizer().insert(ns, "note-continuation-notice-backward") == NS_text::LN_note_continuation_notice_backward;
+ flag&=QName::tokenizer().insert(ns, "bookmark") == NS_text::LN_bookmark;
+ flag&=QName::tokenizer().insert(ns, "bookmark-start") == NS_text::LN_bookmark_start;
+ flag&=QName::tokenizer().insert(ns, "bibliography-configuration") == NS_text::LN_bibliography_configuration;
+ flag&=QName::tokenizer().insert(ns, "bookmark-end") == NS_text::LN_bookmark_end;
+ flag&=QName::tokenizer().insert(ns, "prefix") == NS_text::LN_prefix;
+ flag&=QName::tokenizer().insert(ns, "suffix") == NS_text::LN_suffix;
+ flag&=QName::tokenizer().insert(ns, "reference-mark") == NS_text::LN_reference_mark;
+ flag&=QName::tokenizer().insert(ns, "numbered-entries") == NS_text::LN_numbered_entries;
+ flag&=QName::tokenizer().insert(ns, "reference-mark-start") == NS_text::LN_reference_mark_start;
+ flag&=QName::tokenizer().insert(ns, "sort-by-position") == NS_text::LN_sort_by_position;
+ flag&=QName::tokenizer().insert(ns, "reference-mark-end") == NS_text::LN_reference_mark_end;
+ flag&=QName::tokenizer().insert(ns, "sort-key") == NS_text::LN_sort_key;
+ flag&=QName::tokenizer().insert(ns, "note") == NS_text::LN_note;
+ flag&=QName::tokenizer().insert(ns, "key") == NS_text::LN_key;
+ flag&=QName::tokenizer().insert(ns, "note-citation") == NS_text::LN_note_citation;
+ flag&=QName::tokenizer().insert(ns, "sort-ascending") == NS_text::LN_sort_ascending;
+ flag&=QName::tokenizer().insert(ns, "label") == NS_text::LN_label;
+ flag&=QName::tokenizer().insert(ns, "list-style") == NS_text::LN_list_style;
+ flag&=QName::tokenizer().insert(ns, "note-body") == NS_text::LN_note_body;
+ flag&=QName::tokenizer().insert(ns, "note-class") == NS_text::LN_note_class;
+ flag&=QName::tokenizer().insert(ns, "consecutive-numbering") == NS_text::LN_consecutive_numbering;
+ flag&=QName::tokenizer().insert(ns, "ruby") == NS_text::LN_ruby;
+ flag&=QName::tokenizer().insert(ns, "ruby-base") == NS_text::LN_ruby_base;
+ flag&=QName::tokenizer().insert(ns, "list-level-style-number") == NS_text::LN_list_level_style_number;
+ flag&=QName::tokenizer().insert(ns, "ruby-text") == NS_text::LN_ruby_text;
+ flag&=QName::tokenizer().insert(ns, "date") == NS_text::LN_date;
+ flag&=QName::tokenizer().insert(ns, "display-levels") == NS_text::LN_display_levels;
+ flag&=QName::tokenizer().insert(ns, "date-value") == NS_text::LN_date_value;
+ flag&=QName::tokenizer().insert(ns, "list-level-style-bullet") == NS_text::LN_list_level_style_bullet;
+ flag&=QName::tokenizer().insert(ns, "date-adjust") == NS_text::LN_date_adjust;
+ flag&=QName::tokenizer().insert(ns, "time") == NS_text::LN_time;
+ flag&=QName::tokenizer().insert(ns, "bullet-char") == NS_text::LN_bullet_char;
+ flag&=QName::tokenizer().insert(ns, "time-value") == NS_text::LN_time_value;
+ flag&=QName::tokenizer().insert(ns, "bullet-relative-size") == NS_text::LN_bullet_relative_size;
+ flag&=QName::tokenizer().insert(ns, "time-adjust") == NS_text::LN_time_adjust;
+ flag&=QName::tokenizer().insert(ns, "page-number") == NS_text::LN_page_number;
+ flag&=QName::tokenizer().insert(ns, "list-level-style-image") == NS_text::LN_list_level_style_image;
+ flag&=QName::tokenizer().insert(ns, "page-adjust") == NS_text::LN_page_adjust;
+ flag&=QName::tokenizer().insert(ns, "outline-style") == NS_text::LN_outline_style;
+ flag&=QName::tokenizer().insert(ns, "select-page") == NS_text::LN_select_page;
+ flag&=QName::tokenizer().insert(ns, "outline-level-style") == NS_text::LN_outline_level_style;
+ flag&=QName::tokenizer().insert(ns, "page-continuation") == NS_text::LN_page_continuation;
+ flag&=QName::tokenizer().insert(ns, "string-value") == NS_text::LN_string_value;
+ flag&=QName::tokenizer().insert(ns, "sender-firstname") == NS_text::LN_sender_firstname;
+ flag&=QName::tokenizer().insert(ns, "sender-lastname") == NS_text::LN_sender_lastname;
+ flag&=QName::tokenizer().insert(ns, "sender-initials") == NS_text::LN_sender_initials;
+ flag&=QName::tokenizer().insert(ns, "sender-title") == NS_text::LN_sender_title;
+ flag&=QName::tokenizer().insert(ns, "sender-position") == NS_text::LN_sender_position;
+ flag&=QName::tokenizer().insert(ns, "sender-email") == NS_text::LN_sender_email;
+ flag&=QName::tokenizer().insert(ns, "sender-phone-private") == NS_text::LN_sender_phone_private;
+ flag&=QName::tokenizer().insert(ns, "sender-fax") == NS_text::LN_sender_fax;
+ flag&=QName::tokenizer().insert(ns, "sender-company") == NS_text::LN_sender_company;
+ flag&=QName::tokenizer().insert(ns, "sender-phone-work") == NS_text::LN_sender_phone_work;
+ flag&=QName::tokenizer().insert(ns, "sender-street") == NS_text::LN_sender_street;
+ flag&=QName::tokenizer().insert(ns, "sender-city") == NS_text::LN_sender_city;
+ flag&=QName::tokenizer().insert(ns, "sender-postal-code") == NS_text::LN_sender_postal_code;
+ flag&=QName::tokenizer().insert(ns, "sender-country") == NS_text::LN_sender_country;
+ flag&=QName::tokenizer().insert(ns, "sender-state-or-province") == NS_text::LN_sender_state_or_province;
+ flag&=QName::tokenizer().insert(ns, "author-name") == NS_text::LN_author_name;
+ flag&=QName::tokenizer().insert(ns, "author-initials") == NS_text::LN_author_initials;
+ flag&=QName::tokenizer().insert(ns, "chapter") == NS_text::LN_chapter;
+ flag&=QName::tokenizer().insert(ns, "file-name") == NS_text::LN_file_name;
+ flag&=QName::tokenizer().insert(ns, "template-name") == NS_text::LN_template_name;
+ flag&=QName::tokenizer().insert(ns, "sheet-name") == NS_text::LN_sheet_name;
+ flag&=QName::tokenizer().insert(ns, "variable-decl") == NS_text::LN_variable_decl;
+ flag&=QName::tokenizer().insert(ns, "variable-set") == NS_text::LN_variable_set;
+ flag&=QName::tokenizer().insert(ns, "variable-get") == NS_text::LN_variable_get;
+ flag&=QName::tokenizer().insert(ns, "variable-input") == NS_text::LN_variable_input;
+ flag&=QName::tokenizer().insert(ns, "user-field-decl") == NS_text::LN_user_field_decl;
+ flag&=QName::tokenizer().insert(ns, "user-field-get") == NS_text::LN_user_field_get;
+ flag&=QName::tokenizer().insert(ns, "user-field-input") == NS_text::LN_user_field_input;
+ flag&=QName::tokenizer().insert(ns, "sequence-decl") == NS_text::LN_sequence_decl;
+ flag&=QName::tokenizer().insert(ns, "display-outline-level") == NS_text::LN_display_outline_level;
+ flag&=QName::tokenizer().insert(ns, "separation-character") == NS_text::LN_separation_character;
+ flag&=QName::tokenizer().insert(ns, "sequence") == NS_text::LN_sequence;
+ flag&=QName::tokenizer().insert(ns, "ref-name") == NS_text::LN_ref_name;
+ flag&=QName::tokenizer().insert(ns, "expression") == NS_text::LN_expression;
+ flag&=QName::tokenizer().insert(ns, "text-input") == NS_text::LN_text_input;
+ flag&=QName::tokenizer().insert(ns, "initial-creator") == NS_text::LN_initial_creator;
+ flag&=QName::tokenizer().insert(ns, "creation-date") == NS_text::LN_creation_date;
+ flag&=QName::tokenizer().insert(ns, "creation-time") == NS_text::LN_creation_time;
+ flag&=QName::tokenizer().insert(ns, "description") == NS_text::LN_description;
+ flag&=QName::tokenizer().insert(ns, "user-defined") == NS_text::LN_user_defined;
+ flag&=QName::tokenizer().insert(ns, "print-time") == NS_text::LN_print_time;
+ flag&=QName::tokenizer().insert(ns, "print-date") == NS_text::LN_print_date;
+ flag&=QName::tokenizer().insert(ns, "printed-by") == NS_text::LN_printed_by;
+ flag&=QName::tokenizer().insert(ns, "title") == NS_text::LN_title;
+ flag&=QName::tokenizer().insert(ns, "subject") == NS_text::LN_subject;
+ flag&=QName::tokenizer().insert(ns, "keywords") == NS_text::LN_keywords;
+ flag&=QName::tokenizer().insert(ns, "editing-cycles") == NS_text::LN_editing_cycles;
+ flag&=QName::tokenizer().insert(ns, "editing-duration") == NS_text::LN_editing_duration;
+ flag&=QName::tokenizer().insert(ns, "duration") == NS_text::LN_duration;
+ flag&=QName::tokenizer().insert(ns, "modification-time") == NS_text::LN_modification_time;
+ flag&=QName::tokenizer().insert(ns, "modification-date") == NS_text::LN_modification_date;
+ flag&=QName::tokenizer().insert(ns, "creator") == NS_text::LN_creator;
+ flag&=QName::tokenizer().insert(ns, "database-name") == NS_text::LN_database_name;
+ flag&=QName::tokenizer().insert(ns, "table-name") == NS_text::LN_table_name;
+ flag&=QName::tokenizer().insert(ns, "table-type") == NS_text::LN_table_type;
+ flag&=QName::tokenizer().insert(ns, "database-display") == NS_text::LN_database_display;
+ flag&=QName::tokenizer().insert(ns, "column-name") == NS_text::LN_column_name;
+ flag&=QName::tokenizer().insert(ns, "database-next") == NS_text::LN_database_next;
+ flag&=QName::tokenizer().insert(ns, "database-row-select") == NS_text::LN_database_row_select;
+ flag&=QName::tokenizer().insert(ns, "row-number") == NS_text::LN_row_number;
+ flag&=QName::tokenizer().insert(ns, "database-row-number") == NS_text::LN_database_row_number;
+ flag&=QName::tokenizer().insert(ns, "value") == NS_text::LN_value;
+ flag&=QName::tokenizer().insert(ns, "page-variable-set") == NS_text::LN_page_variable_set;
+ flag&=QName::tokenizer().insert(ns, "active") == NS_text::LN_active;
+ flag&=QName::tokenizer().insert(ns, "page-variable-get") == NS_text::LN_page_variable_get;
+ flag&=QName::tokenizer().insert(ns, "placeholder") == NS_text::LN_placeholder;
+ flag&=QName::tokenizer().insert(ns, "placeholder-type") == NS_text::LN_placeholder_type;
+ flag&=QName::tokenizer().insert(ns, "conditional-text") == NS_text::LN_conditional_text;
+ flag&=QName::tokenizer().insert(ns, "string-value-if-true") == NS_text::LN_string_value_if_true;
+ flag&=QName::tokenizer().insert(ns, "string-value-if-false") == NS_text::LN_string_value_if_false;
+ flag&=QName::tokenizer().insert(ns, "current-value") == NS_text::LN_current_value;
+ flag&=QName::tokenizer().insert(ns, "hidden-text") == NS_text::LN_hidden_text;
+ flag&=QName::tokenizer().insert(ns, "is-hidden") == NS_text::LN_is_hidden;
+ flag&=QName::tokenizer().insert(ns, "note-ref") == NS_text::LN_note_ref;
+ flag&=QName::tokenizer().insert(ns, "sequence-ref") == NS_text::LN_sequence_ref;
+ flag&=QName::tokenizer().insert(ns, "reference-format") == NS_text::LN_reference_format;
+ flag&=QName::tokenizer().insert(ns, "script") == NS_text::LN_script;
+ flag&=QName::tokenizer().insert(ns, "execute-macro") == NS_text::LN_execute_macro;
+ flag&=QName::tokenizer().insert(ns, "hidden-paragraph") == NS_text::LN_hidden_paragraph;
+ flag&=QName::tokenizer().insert(ns, "dde-connection") == NS_text::LN_dde_connection;
+ flag&=QName::tokenizer().insert(ns, "connection-name") == NS_text::LN_connection_name;
+ flag&=QName::tokenizer().insert(ns, "measure") == NS_text::LN_measure;
+ flag&=QName::tokenizer().insert(ns, "kind") == NS_text::LN_kind;
+ flag&=QName::tokenizer().insert(ns, "table-formula") == NS_text::LN_table_formula;
+ flag&=QName::tokenizer().insert(ns, "fixed") == NS_text::LN_fixed;
+ flag&=QName::tokenizer().insert(ns, "formula") == NS_text::LN_formula;
+ flag&=QName::tokenizer().insert(ns, "toc-mark-start") == NS_text::LN_toc_mark_start;
+ flag&=QName::tokenizer().insert(ns, "toc-mark-end") == NS_text::LN_toc_mark_end;
+ flag&=QName::tokenizer().insert(ns, "toc-mark") == NS_text::LN_toc_mark;
+ flag&=QName::tokenizer().insert(ns, "user-index-mark-start") == NS_text::LN_user_index_mark_start;
+ flag&=QName::tokenizer().insert(ns, "line-number") == NS_text::LN_line_number;
+ flag&=QName::tokenizer().insert(ns, "user-index-mark-end") == NS_text::LN_user_index_mark_end;
+ flag&=QName::tokenizer().insert(ns, "user-index-mark") == NS_text::LN_user_index_mark;
+ flag&=QName::tokenizer().insert(ns, "index-name") == NS_text::LN_index_name;
+ flag&=QName::tokenizer().insert(ns, "alphabetical-index-mark-start") == NS_text::LN_alphabetical_index_mark_start;
+ flag&=QName::tokenizer().insert(ns, "alphabetical-index-mark-end") == NS_text::LN_alphabetical_index_mark_end;
+ flag&=QName::tokenizer().insert(ns, "alphabetical-index-mark") == NS_text::LN_alphabetical_index_mark;
+ flag&=QName::tokenizer().insert(ns, "key1") == NS_text::LN_key1;
+ flag&=QName::tokenizer().insert(ns, "key2") == NS_text::LN_key2;
+ flag&=QName::tokenizer().insert(ns, "string-value-phonetic") == NS_text::LN_string_value_phonetic;
+ flag&=QName::tokenizer().insert(ns, "key1-phonetic") == NS_text::LN_key1_phonetic;
+ flag&=QName::tokenizer().insert(ns, "key2-phonetic") == NS_text::LN_key2_phonetic;
+ flag&=QName::tokenizer().insert(ns, "main-entry") == NS_text::LN_main_entry;
+ flag&=QName::tokenizer().insert(ns, "bibliography-mark") == NS_text::LN_bibliography_mark;
+ flag&=QName::tokenizer().insert(ns, "bibliography-type") == NS_text::LN_bibliography_type;
+ flag&=QName::tokenizer().insert(ns, "index-body") == NS_text::LN_index_body;
+ flag&=QName::tokenizer().insert(ns, "index-title") == NS_text::LN_index_title;
+ flag&=QName::tokenizer().insert(ns, "table-of-content") == NS_text::LN_table_of_content;
+ flag&=QName::tokenizer().insert(ns, "table-of-content-source") == NS_text::LN_table_of_content_source;
+ flag&=QName::tokenizer().insert(ns, "use-outline-level") == NS_text::LN_use_outline_level;
+ flag&=QName::tokenizer().insert(ns, "use-index-marks") == NS_text::LN_use_index_marks;
+ flag&=QName::tokenizer().insert(ns, "dont-balance-text-columns") == NS_text::LN_dont_balance_text_columns;
+ flag&=QName::tokenizer().insert(ns, "use-index-source-styles") == NS_text::LN_use_index_source_styles;
+ flag&=QName::tokenizer().insert(ns, "index-scope") == NS_text::LN_index_scope;
+ flag&=QName::tokenizer().insert(ns, "relative-tab-stop-position") == NS_text::LN_relative_tab_stop_position;
+ flag&=QName::tokenizer().insert(ns, "table-of-content-entry-template") == NS_text::LN_table_of_content_entry_template;
+ flag&=QName::tokenizer().insert(ns, "illustration-index") == NS_text::LN_illustration_index;
+ flag&=QName::tokenizer().insert(ns, "illustration-index-source") == NS_text::LN_illustration_index_source;
+ flag&=QName::tokenizer().insert(ns, "use-caption") == NS_text::LN_use_caption;
+ flag&=QName::tokenizer().insert(ns, "caption-sequence-name") == NS_text::LN_caption_sequence_name;
+ flag&=QName::tokenizer().insert(ns, "caption-sequence-format") == NS_text::LN_caption_sequence_format;
+ flag&=QName::tokenizer().insert(ns, "illustration-index-entry-template") == NS_text::LN_illustration_index_entry_template;
+ flag&=QName::tokenizer().insert(ns, "table-index") == NS_text::LN_table_index;
+ flag&=QName::tokenizer().insert(ns, "table-index-source") == NS_text::LN_table_index_source;
+ flag&=QName::tokenizer().insert(ns, "table-index-entry-template") == NS_text::LN_table_index_entry_template;
+ flag&=QName::tokenizer().insert(ns, "object-index") == NS_text::LN_object_index;
+ flag&=QName::tokenizer().insert(ns, "space-before") == NS_text::LN_space_before;
+ flag&=QName::tokenizer().insert(ns, "min-label-width") == NS_text::LN_min_label_width;
+ flag&=QName::tokenizer().insert(ns, "min-label-distance") == NS_text::LN_min_label_distance;
+ flag&=QName::tokenizer().insert(ns, "animation") == NS_text::LN_animation;
+ flag&=QName::tokenizer().insert(ns, "animation-direction") == NS_text::LN_animation_direction;
+ flag&=QName::tokenizer().insert(ns, "animation-start-inside") == NS_text::LN_animation_start_inside;
+ flag&=QName::tokenizer().insert(ns, "animation-stop-inside") == NS_text::LN_animation_stop_inside;
+ flag&=QName::tokenizer().insert(ns, "animation-repeat") == NS_text::LN_animation_repeat;
+ flag&=QName::tokenizer().insert(ns, "animation-delay") == NS_text::LN_animation_delay;
+ flag&=QName::tokenizer().insert(ns, "animation-steps") == NS_text::LN_animation_steps;
+ flag&=QName::tokenizer().insert(ns, "anchor-type") == NS_text::LN_anchor_type;
+ flag&=QName::tokenizer().insert(ns, "anchor-page-number") == NS_text::LN_anchor_page_number;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace text failed", flag);}
+ void test_tbl12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/table";
+ flag&=QName::tokenizer().insert(ns, "table") == NS_tbl12::LN_table;
+ flag&=QName::tokenizer().insert(ns, "autofilter") == NS_tbl12::LN_autofilter;
+ flag&=QName::tokenizer().insert(ns, "sortState") == NS_tbl12::LN_sortState;
+ flag&=QName::tokenizer().insert(ns, "cols") == NS_tbl12::LN_cols;
+ flag&=QName::tokenizer().insert(ns, "tableStyle") == NS_tbl12::LN_tableStyle;
+ flag&=QName::tokenizer().insert(ns, "fsb") == NS_tbl12::LN_fsb;
+ flag&=QName::tokenizer().insert(ns, "col") == NS_tbl12::LN_col;
+ flag&=QName::tokenizer().insert(ns, "ccFmla") == NS_tbl12::LN_ccFmla;
+ flag&=QName::tokenizer().insert(ns, "trFmla") == NS_tbl12::LN_trFmla;
+ flag&=QName::tokenizer().insert(ns, "xmlCPr") == NS_tbl12::LN_xmlCPr;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace tbl12 failed", flag);}
+ void test_pr(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:presentation:1.0";
+ flag&=QName::tokenizer().insert(ns, "transition-type") == NS_pr::LN_transition_type;
+ flag&=QName::tokenizer().insert(ns, "transition-style") == NS_pr::LN_transition_style;
+ flag&=QName::tokenizer().insert(ns, "transition-speed") == NS_pr::LN_transition_speed;
+ flag&=QName::tokenizer().insert(ns, "duration") == NS_pr::LN_duration;
+ flag&=QName::tokenizer().insert(ns, "visibility") == NS_pr::LN_visibility;
+ flag&=QName::tokenizer().insert(ns, "background-objects-visible") == NS_pr::LN_background_objects_visible;
+ flag&=QName::tokenizer().insert(ns, "background-visible") == NS_pr::LN_background_visible;
+ flag&=QName::tokenizer().insert(ns, "display-header") == NS_pr::LN_display_header;
+ flag&=QName::tokenizer().insert(ns, "display-footer") == NS_pr::LN_display_footer;
+ flag&=QName::tokenizer().insert(ns, "display-page-number") == NS_pr::LN_display_page_number;
+ flag&=QName::tokenizer().insert(ns, "display-date-time") == NS_pr::LN_display_date_time;
+ flag&=QName::tokenizer().insert(ns, "class") == NS_pr::LN_class;
+ flag&=QName::tokenizer().insert(ns, "placeholder") == NS_pr::LN_placeholder;
+ flag&=QName::tokenizer().insert(ns, "user-transformed") == NS_pr::LN_user_transformed;
+ flag&=QName::tokenizer().insert(ns, "animations") == NS_pr::LN_animations;
+ flag&=QName::tokenizer().insert(ns, "sound") == NS_pr::LN_sound;
+ flag&=QName::tokenizer().insert(ns, "play-full") == NS_pr::LN_play_full;
+ flag&=QName::tokenizer().insert(ns, "show-shape") == NS_pr::LN_show_shape;
+ flag&=QName::tokenizer().insert(ns, "notes") == NS_pr::LN_notes;
+ flag&=QName::tokenizer().insert(ns, "object") == NS_pr::LN_object;
+ flag&=QName::tokenizer().insert(ns, "presentation-page-layout-name") == NS_pr::LN_presentation_page_layout_name;
+ flag&=QName::tokenizer().insert(ns, "use-header-name") == NS_pr::LN_use_header_name;
+ flag&=QName::tokenizer().insert(ns, "effect") == NS_pr::LN_effect;
+ flag&=QName::tokenizer().insert(ns, "direction") == NS_pr::LN_direction;
+ flag&=QName::tokenizer().insert(ns, "speed") == NS_pr::LN_speed;
+ flag&=QName::tokenizer().insert(ns, "use-footer-name") == NS_pr::LN_use_footer_name;
+ flag&=QName::tokenizer().insert(ns, "delay") == NS_pr::LN_delay;
+ flag&=QName::tokenizer().insert(ns, "start-scale") == NS_pr::LN_start_scale;
+ flag&=QName::tokenizer().insert(ns, "use-date-time-name") == NS_pr::LN_use_date_time_name;
+ flag&=QName::tokenizer().insert(ns, "path-id") == NS_pr::LN_path_id;
+ flag&=QName::tokenizer().insert(ns, "show-text") == NS_pr::LN_show_text;
+ flag&=QName::tokenizer().insert(ns, "hide-shape") == NS_pr::LN_hide_shape;
+ flag&=QName::tokenizer().insert(ns, "hide-text") == NS_pr::LN_hide_text;
+ flag&=QName::tokenizer().insert(ns, "dim") == NS_pr::LN_dim;
+ flag&=QName::tokenizer().insert(ns, "play") == NS_pr::LN_play;
+ flag&=QName::tokenizer().insert(ns, "animation-group") == NS_pr::LN_animation_group;
+ flag&=QName::tokenizer().insert(ns, "node-type") == NS_pr::LN_node_type;
+ flag&=QName::tokenizer().insert(ns, "preset-id") == NS_pr::LN_preset_id;
+ flag&=QName::tokenizer().insert(ns, "preset-sub-type") == NS_pr::LN_preset_sub_type;
+ flag&=QName::tokenizer().insert(ns, "preset-class") == NS_pr::LN_preset_class;
+ flag&=QName::tokenizer().insert(ns, "master-element") == NS_pr::LN_master_element;
+ flag&=QName::tokenizer().insert(ns, "group-id") == NS_pr::LN_group_id;
+ flag&=QName::tokenizer().insert(ns, "event-listener") == NS_pr::LN_event_listener;
+ flag&=QName::tokenizer().insert(ns, "action") == NS_pr::LN_action;
+ flag&=QName::tokenizer().insert(ns, "verb") == NS_pr::LN_verb;
+ flag&=QName::tokenizer().insert(ns, "header") == NS_pr::LN_header;
+ flag&=QName::tokenizer().insert(ns, "footer") == NS_pr::LN_footer;
+ flag&=QName::tokenizer().insert(ns, "date-time") == NS_pr::LN_date_time;
+ flag&=QName::tokenizer().insert(ns, "header-decl") == NS_pr::LN_header_decl;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_pr::LN_name;
+ flag&=QName::tokenizer().insert(ns, "footer-decl") == NS_pr::LN_footer_decl;
+ flag&=QName::tokenizer().insert(ns, "date-time-decl") == NS_pr::LN_date_time_decl;
+ flag&=QName::tokenizer().insert(ns, "source") == NS_pr::LN_source;
+ flag&=QName::tokenizer().insert(ns, "settings") == NS_pr::LN_settings;
+ flag&=QName::tokenizer().insert(ns, "start-page") == NS_pr::LN_start_page;
+ flag&=QName::tokenizer().insert(ns, "show") == NS_pr::LN_show;
+ flag&=QName::tokenizer().insert(ns, "full-screen") == NS_pr::LN_full_screen;
+ flag&=QName::tokenizer().insert(ns, "endless") == NS_pr::LN_endless;
+ flag&=QName::tokenizer().insert(ns, "pause") == NS_pr::LN_pause;
+ flag&=QName::tokenizer().insert(ns, "show-logo") == NS_pr::LN_show_logo;
+ flag&=QName::tokenizer().insert(ns, "force-manual") == NS_pr::LN_force_manual;
+ flag&=QName::tokenizer().insert(ns, "mouse-visible") == NS_pr::LN_mouse_visible;
+ flag&=QName::tokenizer().insert(ns, "mouse-as-pen") == NS_pr::LN_mouse_as_pen;
+ flag&=QName::tokenizer().insert(ns, "start-with-navigator") == NS_pr::LN_start_with_navigator;
+ flag&=QName::tokenizer().insert(ns, "transition-on-click") == NS_pr::LN_transition_on_click;
+ flag&=QName::tokenizer().insert(ns, "stay-on-top") == NS_pr::LN_stay_on_top;
+ flag&=QName::tokenizer().insert(ns, "pages") == NS_pr::LN_pages;
+ flag&=QName::tokenizer().insert(ns, "style-name") == NS_pr::LN_style_name;
+ flag&=QName::tokenizer().insert(ns, "class-names") == NS_pr::LN_class_names;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace pr failed", flag);}
+ void test_udcxf11(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/data/udc/xmlfile";
+ flag&=QName::tokenizer().insert(ns, "File") == NS_udcxf11::LN_File;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace udcxf11 failed", flag);}
+ void test_office(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:office:1.0";
+ flag&=QName::tokenizer().insert(ns, "annotation") == NS_office::LN_annotation;
+ flag&=QName::tokenizer().insert(ns, "display") == NS_office::LN_display;
+ flag&=QName::tokenizer().insert(ns, "change-info") == NS_office::LN_change_info;
+ flag&=QName::tokenizer().insert(ns, "event-listeners") == NS_office::LN_event_listeners;
+ flag&=QName::tokenizer().insert(ns, "dde-application") == NS_office::LN_dde_application;
+ flag&=QName::tokenizer().insert(ns, "dde-topic") == NS_office::LN_dde_topic;
+ flag&=QName::tokenizer().insert(ns, "dde-item") == NS_office::LN_dde_item;
+ flag&=QName::tokenizer().insert(ns, "automatic-update") == NS_office::LN_automatic_update;
+ flag&=QName::tokenizer().insert(ns, "dde-source") == NS_office::LN_dde_source;
+ flag&=QName::tokenizer().insert(ns, "conversion-mode") == NS_office::LN_conversion_mode;
+ flag&=QName::tokenizer().insert(ns, "process-content") == NS_office::LN_process_content;
+ flag&=QName::tokenizer().insert(ns, "document") == NS_office::LN_document;
+ flag&=QName::tokenizer().insert(ns, "document-content") == NS_office::LN_document_content;
+ flag&=QName::tokenizer().insert(ns, "document-styles") == NS_office::LN_document_styles;
+ flag&=QName::tokenizer().insert(ns, "document-meta") == NS_office::LN_document_meta;
+ flag&=QName::tokenizer().insert(ns, "document-settings") == NS_office::LN_document_settings;
+ flag&=QName::tokenizer().insert(ns, "version") == NS_office::LN_version;
+ flag&=QName::tokenizer().insert(ns, "mimetype") == NS_office::LN_mimetype;
+ flag&=QName::tokenizer().insert(ns, "meta") == NS_office::LN_meta;
+ flag&=QName::tokenizer().insert(ns, "body") == NS_office::LN_body;
+ flag&=QName::tokenizer().insert(ns, "text") == NS_office::LN_text;
+ flag&=QName::tokenizer().insert(ns, "drawing") == NS_office::LN_drawing;
+ flag&=QName::tokenizer().insert(ns, "presentation") == NS_office::LN_presentation;
+ flag&=QName::tokenizer().insert(ns, "spreadsheet") == NS_office::LN_spreadsheet;
+ flag&=QName::tokenizer().insert(ns, "chart") == NS_office::LN_chart;
+ flag&=QName::tokenizer().insert(ns, "image") == NS_office::LN_image;
+ flag&=QName::tokenizer().insert(ns, "settings") == NS_office::LN_settings;
+ flag&=QName::tokenizer().insert(ns, "scripts") == NS_office::LN_scripts;
+ flag&=QName::tokenizer().insert(ns, "script") == NS_office::LN_script;
+ flag&=QName::tokenizer().insert(ns, "font-face-decls") == NS_office::LN_font_face_decls;
+ flag&=QName::tokenizer().insert(ns, "styles") == NS_office::LN_styles;
+ flag&=QName::tokenizer().insert(ns, "automatic-styles") == NS_office::LN_automatic_styles;
+ flag&=QName::tokenizer().insert(ns, "master-styles") == NS_office::LN_master_styles;
+ flag&=QName::tokenizer().insert(ns, "target-frame-name") == NS_office::LN_target_frame_name;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_office::LN_name;
+ flag&=QName::tokenizer().insert(ns, "value") == NS_office::LN_value;
+ flag&=QName::tokenizer().insert(ns, "date-value") == NS_office::LN_date_value;
+ flag&=QName::tokenizer().insert(ns, "time-value") == NS_office::LN_time_value;
+ flag&=QName::tokenizer().insert(ns, "boolean-value") == NS_office::LN_boolean_value;
+ flag&=QName::tokenizer().insert(ns, "string-value") == NS_office::LN_string_value;
+ flag&=QName::tokenizer().insert(ns, "value-type") == NS_office::LN_value_type;
+ flag&=QName::tokenizer().insert(ns, "currency") == NS_office::LN_currency;
+ flag&=QName::tokenizer().insert(ns, "binary-data") == NS_office::LN_binary_data;
+ flag&=QName::tokenizer().insert(ns, "forms") == NS_office::LN_forms;
+ flag&=QName::tokenizer().insert(ns, "target-frame") == NS_office::LN_target_frame;
+ flag&=QName::tokenizer().insert(ns, "server-map") == NS_office::LN_server_map;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace office failed", flag);}
+ void test_md12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/metadata";
+ flag&=QName::tokenizer().insert(ns, "Metadata") == NS_md12::LN_Metadata;
+ flag&=QName::tokenizer().insert(ns, "metadataTypes") == NS_md12::LN_metadataTypes;
+ flag&=QName::tokenizer().insert(ns, "cellMetadata") == NS_md12::LN_cellMetadata;
+ flag&=QName::tokenizer().insert(ns, "valueMetadata") == NS_md12::LN_valueMetadata;
+ flag&=QName::tokenizer().insert(ns, "mdxMetadata") == NS_md12::LN_mdxMetadata;
+ flag&=QName::tokenizer().insert(ns, "strMetadata") == NS_md12::LN_strMetadata;
+ flag&=QName::tokenizer().insert(ns, "futureMetadata") == NS_md12::LN_futureMetadata;
+ flag&=QName::tokenizer().insert(ns, "fsb") == NS_md12::LN_fsb;
+ flag&=QName::tokenizer().insert(ns, "metadataType") == NS_md12::LN_metadataType;
+ flag&=QName::tokenizer().insert(ns, "b") == NS_md12::LN_b;
+ flag&=QName::tokenizer().insert(ns, "r") == NS_md12::LN_r;
+ flag&=QName::tokenizer().insert(ns, "t") == NS_md12::LN_t;
+ flag&=QName::tokenizer().insert(ns, "s") == NS_md12::LN_s;
+ flag&=QName::tokenizer().insert(ns, "p") == NS_md12::LN_p;
+ flag&=QName::tokenizer().insert(ns, "k") == NS_md12::LN_k;
+ flag&=QName::tokenizer().insert(ns, "i") == NS_md12::LN_i;
+ flag&=QName::tokenizer().insert(ns, "ib") == NS_md12::LN_ib;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace md12 failed", flag);}
+ void test_pp12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/powerpoint/2005/8/pml";
+ flag&=QName::tokenizer().insert(ns, "snd") == NS_pp12::LN_snd;
+ flag&=QName::tokenizer().insert(ns, "stSnd") == NS_pp12::LN_stSnd;
+ flag&=QName::tokenizer().insert(ns, "endSnd") == NS_pp12::LN_endSnd;
+ flag&=QName::tokenizer().insert(ns, "blinds") == NS_pp12::LN_blinds;
+ flag&=QName::tokenizer().insert(ns, "checker") == NS_pp12::LN_checker;
+ flag&=QName::tokenizer().insert(ns, "circle") == NS_pp12::LN_circle;
+ flag&=QName::tokenizer().insert(ns, "dissolve") == NS_pp12::LN_dissolve;
+ flag&=QName::tokenizer().insert(ns, "comb") == NS_pp12::LN_comb;
+ flag&=QName::tokenizer().insert(ns, "cover") == NS_pp12::LN_cover;
+ flag&=QName::tokenizer().insert(ns, "cut") == NS_pp12::LN_cut;
+ flag&=QName::tokenizer().insert(ns, "diamond") == NS_pp12::LN_diamond;
+ flag&=QName::tokenizer().insert(ns, "fade") == NS_pp12::LN_fade;
+ flag&=QName::tokenizer().insert(ns, "newsflash") == NS_pp12::LN_newsflash;
+ flag&=QName::tokenizer().insert(ns, "plus") == NS_pp12::LN_plus;
+ flag&=QName::tokenizer().insert(ns, "pull") == NS_pp12::LN_pull;
+ flag&=QName::tokenizer().insert(ns, "push") == NS_pp12::LN_push;
+ flag&=QName::tokenizer().insert(ns, "random") == NS_pp12::LN_random;
+ flag&=QName::tokenizer().insert(ns, "randomBar") == NS_pp12::LN_randomBar;
+ flag&=QName::tokenizer().insert(ns, "split") == NS_pp12::LN_split;
+ flag&=QName::tokenizer().insert(ns, "strips") == NS_pp12::LN_strips;
+ flag&=QName::tokenizer().insert(ns, "wedge") == NS_pp12::LN_wedge;
+ flag&=QName::tokenizer().insert(ns, "wheel") == NS_pp12::LN_wheel;
+ flag&=QName::tokenizer().insert(ns, "wipe") == NS_pp12::LN_wipe;
+ flag&=QName::tokenizer().insert(ns, "zoom") == NS_pp12::LN_zoom;
+ flag&=QName::tokenizer().insert(ns, "sndAc") == NS_pp12::LN_sndAc;
+ flag&=QName::tokenizer().insert(ns, "sldRef") == NS_pp12::LN_sldRef;
+ flag&=QName::tokenizer().insert(ns, "ssJumpAc") == NS_pp12::LN_ssJumpAc;
+ flag&=QName::tokenizer().insert(ns, "sldJumpAc") == NS_pp12::LN_sldJumpAc;
+ flag&=QName::tokenizer().insert(ns, "urlAc") == NS_pp12::LN_urlAc;
+ flag&=QName::tokenizer().insert(ns, "fileAc") == NS_pp12::LN_fileAc;
+ flag&=QName::tokenizer().insert(ns, "presAc") == NS_pp12::LN_presAc;
+ flag&=QName::tokenizer().insert(ns, "tooltip") == NS_pp12::LN_tooltip;
+ flag&=QName::tokenizer().insert(ns, "custShow") == NS_pp12::LN_custShow;
+ flag&=QName::tokenizer().insert(ns, "programAc") == NS_pp12::LN_programAc;
+ flag&=QName::tokenizer().insert(ns, "macroAc") == NS_pp12::LN_macroAc;
+ flag&=QName::tokenizer().insert(ns, "hlinkAc") == NS_pp12::LN_hlinkAc;
+ flag&=QName::tokenizer().insert(ns, "oleVerbAc") == NS_pp12::LN_oleVerbAc;
+ flag&=QName::tokenizer().insert(ns, "mediaAc") == NS_pp12::LN_mediaAc;
+ flag&=QName::tokenizer().insert(ns, "custShowAc") == NS_pp12::LN_custShowAc;
+ flag&=QName::tokenizer().insert(ns, "onClick") == NS_pp12::LN_onClick;
+ flag&=QName::tokenizer().insert(ns, "onMouseOver") == NS_pp12::LN_onMouseOver;
+ flag&=QName::tokenizer().insert(ns, "seconds") == NS_pp12::LN_seconds;
+ flag&=QName::tokenizer().insert(ns, "percent") == NS_pp12::LN_percent;
+ flag&=QName::tokenizer().insert(ns, "chRg") == NS_pp12::LN_chRg;
+ flag&=QName::tokenizer().insert(ns, "pRg") == NS_pp12::LN_pRg;
+ flag&=QName::tokenizer().insert(ns, "bg") == NS_pp12::LN_bg;
+ flag&=QName::tokenizer().insert(ns, "subSp") == NS_pp12::LN_subSp;
+ flag&=QName::tokenizer().insert(ns, "oleChartEl") == NS_pp12::LN_oleChartEl;
+ flag&=QName::tokenizer().insert(ns, "tx") == NS_pp12::LN_tx;
+ flag&=QName::tokenizer().insert(ns, "e2o") == NS_pp12::LN_e2o;
+ flag&=QName::tokenizer().insert(ns, "sldTgt") == NS_pp12::LN_sldTgt;
+ flag&=QName::tokenizer().insert(ns, "sndTgt") == NS_pp12::LN_sndTgt;
+ flag&=QName::tokenizer().insert(ns, "spTgt") == NS_pp12::LN_spTgt;
+ flag&=QName::tokenizer().insert(ns, "tgtEl") == NS_pp12::LN_tgtEl;
+ flag&=QName::tokenizer().insert(ns, "tn") == NS_pp12::LN_tn;
+ flag&=QName::tokenizer().insert(ns, "rtn") == NS_pp12::LN_rtn;
+ flag&=QName::tokenizer().insert(ns, "cond") == NS_pp12::LN_cond;
+ flag&=QName::tokenizer().insert(ns, "par") == NS_pp12::LN_par;
+ flag&=QName::tokenizer().insert(ns, "seq") == NS_pp12::LN_seq;
+ flag&=QName::tokenizer().insert(ns, "excl") == NS_pp12::LN_excl;
+ flag&=QName::tokenizer().insert(ns, "animate") == NS_pp12::LN_animate;
+ flag&=QName::tokenizer().insert(ns, "animateColor") == NS_pp12::LN_animateColor;
+ flag&=QName::tokenizer().insert(ns, "animateEffect") == NS_pp12::LN_animateEffect;
+ flag&=QName::tokenizer().insert(ns, "animateMotion") == NS_pp12::LN_animateMotion;
+ flag&=QName::tokenizer().insert(ns, "animateRotation") == NS_pp12::LN_animateRotation;
+ flag&=QName::tokenizer().insert(ns, "animateScale") == NS_pp12::LN_animateScale;
+ flag&=QName::tokenizer().insert(ns, "command") == NS_pp12::LN_command;
+ flag&=QName::tokenizer().insert(ns, "set") == NS_pp12::LN_set;
+ flag&=QName::tokenizer().insert(ns, "audio") == NS_pp12::LN_audio;
+ flag&=QName::tokenizer().insert(ns, "video") == NS_pp12::LN_video;
+ flag&=QName::tokenizer().insert(ns, "beginCondLst") == NS_pp12::LN_beginCondLst;
+ flag&=QName::tokenizer().insert(ns, "endCondLst") == NS_pp12::LN_endCondLst;
+ flag&=QName::tokenizer().insert(ns, "endSync") == NS_pp12::LN_endSync;
+ flag&=QName::tokenizer().insert(ns, "iterate") == NS_pp12::LN_iterate;
+ flag&=QName::tokenizer().insert(ns, "childLst") == NS_pp12::LN_childLst;
+ flag&=QName::tokenizer().insert(ns, "subLst") == NS_pp12::LN_subLst;
+ flag&=QName::tokenizer().insert(ns, "timeNodeBase") == NS_pp12::LN_timeNodeBase;
+ flag&=QName::tokenizer().insert(ns, "prevCondLst") == NS_pp12::LN_prevCondLst;
+ flag&=QName::tokenizer().insert(ns, "nextCondLst") == NS_pp12::LN_nextCondLst;
+ flag&=QName::tokenizer().insert(ns, "attrName") == NS_pp12::LN_attrName;
+ flag&=QName::tokenizer().insert(ns, "attrNameLst") == NS_pp12::LN_attrNameLst;
+ flag&=QName::tokenizer().insert(ns, "boolVal") == NS_pp12::LN_boolVal;
+ flag&=QName::tokenizer().insert(ns, "intVal") == NS_pp12::LN_intVal;
+ flag&=QName::tokenizer().insert(ns, "fltVal") == NS_pp12::LN_fltVal;
+ flag&=QName::tokenizer().insert(ns, "strVal") == NS_pp12::LN_strVal;
+ flag&=QName::tokenizer().insert(ns, "val") == NS_pp12::LN_val;
+ flag&=QName::tokenizer().insert(ns, "tav") == NS_pp12::LN_tav;
+ flag&=QName::tokenizer().insert(ns, "behaviorBase") == NS_pp12::LN_behaviorBase;
+ flag&=QName::tokenizer().insert(ns, "tavLst") == NS_pp12::LN_tavLst;
+ flag&=QName::tokenizer().insert(ns, "rgb") == NS_pp12::LN_rgb;
+ flag&=QName::tokenizer().insert(ns, "hsl") == NS_pp12::LN_hsl;
+ flag&=QName::tokenizer().insert(ns, "by") == NS_pp12::LN_by;
+ flag&=QName::tokenizer().insert(ns, "from") == NS_pp12::LN_from;
+ flag&=QName::tokenizer().insert(ns, "to") == NS_pp12::LN_to;
+ flag&=QName::tokenizer().insert(ns, "progress") == NS_pp12::LN_progress;
+ flag&=QName::tokenizer().insert(ns, "rCenter") == NS_pp12::LN_rCenter;
+ flag&=QName::tokenizer().insert(ns, "mediaNodeBase") == NS_pp12::LN_mediaNodeBase;
+ flag&=QName::tokenizer().insert(ns, "timeNodeLst") == NS_pp12::LN_timeNodeLst;
+ flag&=QName::tokenizer().insert(ns, "tmpl") == NS_pp12::LN_tmpl;
+ flag&=QName::tokenizer().insert(ns, "tmplLst") == NS_pp12::LN_tmplLst;
+ flag&=QName::tokenizer().insert(ns, "bldAsOne") == NS_pp12::LN_bldAsOne;
+ flag&=QName::tokenizer().insert(ns, "bldSub") == NS_pp12::LN_bldSub;
+ flag&=QName::tokenizer().insert(ns, "bldP") == NS_pp12::LN_bldP;
+ flag&=QName::tokenizer().insert(ns, "bldDgm") == NS_pp12::LN_bldDgm;
+ flag&=QName::tokenizer().insert(ns, "bldOleChart") == NS_pp12::LN_bldOleChart;
+ flag&=QName::tokenizer().insert(ns, "bldE2o") == NS_pp12::LN_bldE2o;
+ flag&=QName::tokenizer().insert(ns, "buildLst") == NS_pp12::LN_buildLst;
+ flag&=QName::tokenizer().insert(ns, "sld") == NS_pp12::LN_sld;
+ flag&=QName::tokenizer().insert(ns, "all") == NS_pp12::LN_all;
+ flag&=QName::tokenizer().insert(ns, "range") == NS_pp12::LN_range;
+ flag&=QName::tokenizer().insert(ns, "custData") == NS_pp12::LN_custData;
+ flag&=QName::tokenizer().insert(ns, "commentAuthor") == NS_pp12::LN_commentAuthor;
+ flag&=QName::tokenizer().insert(ns, "pos") == NS_pp12::LN_pos;
+ flag&=QName::tokenizer().insert(ns, "text") == NS_pp12::LN_text;
+ flag&=QName::tokenizer().insert(ns, "cm") == NS_pp12::LN_cm;
+ flag&=QName::tokenizer().insert(ns, "embed") == NS_pp12::LN_embed;
+ flag&=QName::tokenizer().insert(ns, "link") == NS_pp12::LN_link;
+ flag&=QName::tokenizer().insert(ns, "sldId") == NS_pp12::LN_sldId;
+ flag&=QName::tokenizer().insert(ns, "sldMasterId") == NS_pp12::LN_sldMasterId;
+ flag&=QName::tokenizer().insert(ns, "notesMasterId") == NS_pp12::LN_notesMasterId;
+ flag&=QName::tokenizer().insert(ns, "handoutMasterId") == NS_pp12::LN_handoutMasterId;
+ flag&=QName::tokenizer().insert(ns, "sldLst") == NS_pp12::LN_sldLst;
+ flag&=QName::tokenizer().insert(ns, "sldMasterIdLst") == NS_pp12::LN_sldMasterIdLst;
+ flag&=QName::tokenizer().insert(ns, "sldIdLst") == NS_pp12::LN_sldIdLst;
+ flag&=QName::tokenizer().insert(ns, "notesMasterIdLst") == NS_pp12::LN_notesMasterIdLst;
+ flag&=QName::tokenizer().insert(ns, "handoutMasterIdLst") == NS_pp12::LN_handoutMasterIdLst;
+ flag&=QName::tokenizer().insert(ns, "slideSize") == NS_pp12::LN_slideSize;
+ flag&=QName::tokenizer().insert(ns, "notesSize") == NS_pp12::LN_notesSize;
+ flag&=QName::tokenizer().insert(ns, "custShowLst") == NS_pp12::LN_custShowLst;
+ flag&=QName::tokenizer().insert(ns, "photoAlbum") == NS_pp12::LN_photoAlbum;
+ flag&=QName::tokenizer().insert(ns, "commentAuthorLst") == NS_pp12::LN_commentAuthorLst;
+ flag&=QName::tokenizer().insert(ns, "custDataLst") == NS_pp12::LN_custDataLst;
+ flag&=QName::tokenizer().insert(ns, "creatingAppVersion") == NS_pp12::LN_creatingAppVersion;
+ flag&=QName::tokenizer().insert(ns, "editingAppVersion") == NS_pp12::LN_editingAppVersion;
+ flag&=QName::tokenizer().insert(ns, "presentation") == NS_pp12::LN_presentation;
+ flag&=QName::tokenizer().insert(ns, "pubWhat") == NS_pp12::LN_pubWhat;
+ flag&=QName::tokenizer().insert(ns, "pubAs") == NS_pp12::LN_pubAs;
+ flag&=QName::tokenizer().insert(ns, "present") == NS_pp12::LN_present;
+ flag&=QName::tokenizer().insert(ns, "browse") == NS_pp12::LN_browse;
+ flag&=QName::tokenizer().insert(ns, "kiosk") == NS_pp12::LN_kiosk;
+ flag&=QName::tokenizer().insert(ns, "showType") == NS_pp12::LN_showType;
+ flag&=QName::tokenizer().insert(ns, "showWhat") == NS_pp12::LN_showWhat;
+ flag&=QName::tokenizer().insert(ns, "penClr") == NS_pp12::LN_penClr;
+ flag&=QName::tokenizer().insert(ns, "htmlPubPr") == NS_pp12::LN_htmlPubPr;
+ flag&=QName::tokenizer().insert(ns, "webPr") == NS_pp12::LN_webPr;
+ flag&=QName::tokenizer().insert(ns, "prnPr") == NS_pp12::LN_prnPr;
+ flag&=QName::tokenizer().insert(ns, "showPr") == NS_pp12::LN_showPr;
+ flag&=QName::tokenizer().insert(ns, "presentationPr") == NS_pp12::LN_presentationPr;
+ flag&=QName::tokenizer().insert(ns, "str") == NS_pp12::LN_str;
+ flag&=QName::tokenizer().insert(ns, "bin") == NS_pp12::LN_bin;
+ flag&=QName::tokenizer().insert(ns, "tag") == NS_pp12::LN_tag;
+ flag&=QName::tokenizer().insert(ns, "ph") == NS_pp12::LN_ph;
+ flag&=QName::tokenizer().insert(ns, "media") == NS_pp12::LN_media;
+ flag&=QName::tokenizer().insert(ns, "actions") == NS_pp12::LN_actions;
+ flag&=QName::tokenizer().insert(ns, "anvPr") == NS_pp12::LN_anvPr;
+ flag&=QName::tokenizer().insert(ns, "anvSpPr") == NS_pp12::LN_anvSpPr;
+ flag&=QName::tokenizer().insert(ns, "pnvPr") == NS_pp12::LN_pnvPr;
+ flag&=QName::tokenizer().insert(ns, "nvSpPr") == NS_pp12::LN_nvSpPr;
+ flag&=QName::tokenizer().insert(ns, "spPr") == NS_pp12::LN_spPr;
+ flag&=QName::tokenizer().insert(ns, "style") == NS_pp12::LN_style;
+ flag&=QName::tokenizer().insert(ns, "txBody") == NS_pp12::LN_txBody;
+ flag&=QName::tokenizer().insert(ns, "anvCxnSpPr") == NS_pp12::LN_anvCxnSpPr;
+ flag&=QName::tokenizer().insert(ns, "nvCxnSpPr") == NS_pp12::LN_nvCxnSpPr;
+ flag&=QName::tokenizer().insert(ns, "anvGraphicFramePr") == NS_pp12::LN_anvGraphicFramePr;
+ flag&=QName::tokenizer().insert(ns, "nvGraphicFramePr") == NS_pp12::LN_nvGraphicFramePr;
+ flag&=QName::tokenizer().insert(ns, "xfrm") == NS_pp12::LN_xfrm;
+ flag&=QName::tokenizer().insert(ns, "graphic") == NS_pp12::LN_graphic;
+ flag&=QName::tokenizer().insert(ns, "anvGspPr") == NS_pp12::LN_anvGspPr;
+ flag&=QName::tokenizer().insert(ns, "nvGspPr") == NS_pp12::LN_nvGspPr;
+ flag&=QName::tokenizer().insert(ns, "gspPr") == NS_pp12::LN_gspPr;
+ flag&=QName::tokenizer().insert(ns, "sp") == NS_pp12::LN_sp;
+ flag&=QName::tokenizer().insert(ns, "gsp") == NS_pp12::LN_gsp;
+ flag&=QName::tokenizer().insert(ns, "graphicFrame") == NS_pp12::LN_graphicFrame;
+ flag&=QName::tokenizer().insert(ns, "cxnsp") == NS_pp12::LN_cxnsp;
+ flag&=QName::tokenizer().insert(ns, "clrMap") == NS_pp12::LN_clrMap;
+ flag&=QName::tokenizer().insert(ns, "clrMapOvr") == NS_pp12::LN_clrMapOvr;
+ flag&=QName::tokenizer().insert(ns, "fill") == NS_pp12::LN_fill;
+ flag&=QName::tokenizer().insert(ns, "bgPr") == NS_pp12::LN_bgPr;
+ flag&=QName::tokenizer().insert(ns, "bgLink") == NS_pp12::LN_bgLink;
+ flag&=QName::tokenizer().insert(ns, "bgMaster") == NS_pp12::LN_bgMaster;
+ flag&=QName::tokenizer().insert(ns, "spTree") == NS_pp12::LN_spTree;
+ flag&=QName::tokenizer().insert(ns, "tagLst") == NS_pp12::LN_tagLst;
+ flag&=QName::tokenizer().insert(ns, "sldBase") == NS_pp12::LN_sldBase;
+ flag&=QName::tokenizer().insert(ns, "cmLst") == NS_pp12::LN_cmLst;
+ flag&=QName::tokenizer().insert(ns, "transition") == NS_pp12::LN_transition;
+ flag&=QName::tokenizer().insert(ns, "timingInfo") == NS_pp12::LN_timingInfo;
+ flag&=QName::tokenizer().insert(ns, "hf") == NS_pp12::LN_hf;
+ flag&=QName::tokenizer().insert(ns, "sldLayout") == NS_pp12::LN_sldLayout;
+ flag&=QName::tokenizer().insert(ns, "defLink") == NS_pp12::LN_defLink;
+ flag&=QName::tokenizer().insert(ns, "outline1Link") == NS_pp12::LN_outline1Link;
+ flag&=QName::tokenizer().insert(ns, "outline2Link") == NS_pp12::LN_outline2Link;
+ flag&=QName::tokenizer().insert(ns, "lvl1Link") == NS_pp12::LN_lvl1Link;
+ flag&=QName::tokenizer().insert(ns, "lvl2Link") == NS_pp12::LN_lvl2Link;
+ flag&=QName::tokenizer().insert(ns, "lvl3Link") == NS_pp12::LN_lvl3Link;
+ flag&=QName::tokenizer().insert(ns, "lvl4Link") == NS_pp12::LN_lvl4Link;
+ flag&=QName::tokenizer().insert(ns, "lvl5Link") == NS_pp12::LN_lvl5Link;
+ flag&=QName::tokenizer().insert(ns, "lvl6Link") == NS_pp12::LN_lvl6Link;
+ flag&=QName::tokenizer().insert(ns, "lvl7Link") == NS_pp12::LN_lvl7Link;
+ flag&=QName::tokenizer().insert(ns, "lvl8Link") == NS_pp12::LN_lvl8Link;
+ flag&=QName::tokenizer().insert(ns, "lvl9Link") == NS_pp12::LN_lvl9Link;
+ flag&=QName::tokenizer().insert(ns, "txLstStyle") == NS_pp12::LN_txLstStyle;
+ flag&=QName::tokenizer().insert(ns, "themeLinkLst") == NS_pp12::LN_themeLinkLst;
+ flag&=QName::tokenizer().insert(ns, "titleStyle") == NS_pp12::LN_titleStyle;
+ flag&=QName::tokenizer().insert(ns, "bodyStyle") == NS_pp12::LN_bodyStyle;
+ flag&=QName::tokenizer().insert(ns, "notesStyle") == NS_pp12::LN_notesStyle;
+ flag&=QName::tokenizer().insert(ns, "otherStyle") == NS_pp12::LN_otherStyle;
+ flag&=QName::tokenizer().insert(ns, "sldLayoutId") == NS_pp12::LN_sldLayoutId;
+ flag&=QName::tokenizer().insert(ns, "sldLayoutIdLst") == NS_pp12::LN_sldLayoutIdLst;
+ flag&=QName::tokenizer().insert(ns, "txStyles") == NS_pp12::LN_txStyles;
+ flag&=QName::tokenizer().insert(ns, "sldMaster") == NS_pp12::LN_sldMaster;
+ flag&=QName::tokenizer().insert(ns, "handoutMaster") == NS_pp12::LN_handoutMaster;
+ flag&=QName::tokenizer().insert(ns, "notesMaster") == NS_pp12::LN_notesMaster;
+ flag&=QName::tokenizer().insert(ns, "notes") == NS_pp12::LN_notes;
+ flag&=QName::tokenizer().insert(ns, "restoredLeft") == NS_pp12::LN_restoredLeft;
+ flag&=QName::tokenizer().insert(ns, "restoredTop") == NS_pp12::LN_restoredTop;
+ flag&=QName::tokenizer().insert(ns, "scale") == NS_pp12::LN_scale;
+ flag&=QName::tokenizer().insert(ns, "origin") == NS_pp12::LN_origin;
+ flag&=QName::tokenizer().insert(ns, "viewPrBase") == NS_pp12::LN_viewPrBase;
+ flag&=QName::tokenizer().insert(ns, "guide") == NS_pp12::LN_guide;
+ flag&=QName::tokenizer().insert(ns, "guideLst") == NS_pp12::LN_guideLst;
+ flag&=QName::tokenizer().insert(ns, "sldViewPrBase") == NS_pp12::LN_sldViewPrBase;
+ flag&=QName::tokenizer().insert(ns, "normalViewPr") == NS_pp12::LN_normalViewPr;
+ flag&=QName::tokenizer().insert(ns, "slideViewPr") == NS_pp12::LN_slideViewPr;
+ flag&=QName::tokenizer().insert(ns, "outlineViewPr") == NS_pp12::LN_outlineViewPr;
+ flag&=QName::tokenizer().insert(ns, "notesTextViewPr") == NS_pp12::LN_notesTextViewPr;
+ flag&=QName::tokenizer().insert(ns, "sorterViewPr") == NS_pp12::LN_sorterViewPr;
+ flag&=QName::tokenizer().insert(ns, "notesViewPr") == NS_pp12::LN_notesViewPr;
+ flag&=QName::tokenizer().insert(ns, "gridSpacing") == NS_pp12::LN_gridSpacing;
+ flag&=QName::tokenizer().insert(ns, "viewPr") == NS_pp12::LN_viewPr;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace pp12 failed", flag);}
+ void test_v11(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/visio/2003/core";
+ flag&=QName::tokenizer().insert(ns, "VisioDocument") == NS_v11::LN_VisioDocument;
+ flag&=QName::tokenizer().insert(ns, "SolutionXML") == NS_v11::LN_SolutionXML;
+ flag&=QName::tokenizer().insert(ns, "cp") == NS_v11::LN_cp;
+ flag&=QName::tokenizer().insert(ns, "pp") == NS_v11::LN_pp;
+ flag&=QName::tokenizer().insert(ns, "tp") == NS_v11::LN_tp;
+ flag&=QName::tokenizer().insert(ns, "fld") == NS_v11::LN_fld;
+ flag&=QName::tokenizer().insert(ns, "XProp") == NS_v11::LN_XProp;
+ flag&=QName::tokenizer().insert(ns, "Text") == NS_v11::LN_Text;
+ flag&=QName::tokenizer().insert(ns, "XForm") == NS_v11::LN_XForm;
+ flag&=QName::tokenizer().insert(ns, "Line") == NS_v11::LN_Line;
+ flag&=QName::tokenizer().insert(ns, "Fill") == NS_v11::LN_Fill;
+ flag&=QName::tokenizer().insert(ns, "XForm1D") == NS_v11::LN_XForm1D;
+ flag&=QName::tokenizer().insert(ns, "Event") == NS_v11::LN_Event;
+ flag&=QName::tokenizer().insert(ns, "LayerMem") == NS_v11::LN_LayerMem;
+ flag&=QName::tokenizer().insert(ns, "StyleProp") == NS_v11::LN_StyleProp;
+ flag&=QName::tokenizer().insert(ns, "Foreign") == NS_v11::LN_Foreign;
+ flag&=QName::tokenizer().insert(ns, "PageProps") == NS_v11::LN_PageProps;
+ flag&=QName::tokenizer().insert(ns, "TextBlock") == NS_v11::LN_TextBlock;
+ flag&=QName::tokenizer().insert(ns, "TextXForm") == NS_v11::LN_TextXForm;
+ flag&=QName::tokenizer().insert(ns, "Align") == NS_v11::LN_Align;
+ flag&=QName::tokenizer().insert(ns, "Protection") == NS_v11::LN_Protection;
+ flag&=QName::tokenizer().insert(ns, "Help") == NS_v11::LN_Help;
+ flag&=QName::tokenizer().insert(ns, "Misc") == NS_v11::LN_Misc;
+ flag&=QName::tokenizer().insert(ns, "RulerGrid") == NS_v11::LN_RulerGrid;
+ flag&=QName::tokenizer().insert(ns, "DocProps") == NS_v11::LN_DocProps;
+ flag&=QName::tokenizer().insert(ns, "Image") == NS_v11::LN_Image;
+ flag&=QName::tokenizer().insert(ns, "Group") == NS_v11::LN_Group;
+ flag&=QName::tokenizer().insert(ns, "Layout") == NS_v11::LN_Layout;
+ flag&=QName::tokenizer().insert(ns, "PageLayout") == NS_v11::LN_PageLayout;
+ flag&=QName::tokenizer().insert(ns, "PrintProps") == NS_v11::LN_PrintProps;
+ flag&=QName::tokenizer().insert(ns, "Char") == NS_v11::LN_Char;
+ flag&=QName::tokenizer().insert(ns, "Para") == NS_v11::LN_Para;
+ flag&=QName::tokenizer().insert(ns, "Tabs") == NS_v11::LN_Tabs;
+ flag&=QName::tokenizer().insert(ns, "Scratch") == NS_v11::LN_Scratch;
+ flag&=QName::tokenizer().insert(ns, "Connection") == NS_v11::LN_Connection;
+ flag&=QName::tokenizer().insert(ns, "ConnectionABCD") == NS_v11::LN_ConnectionABCD;
+ flag&=QName::tokenizer().insert(ns, "Field") == NS_v11::LN_Field;
+ flag&=QName::tokenizer().insert(ns, "Control") == NS_v11::LN_Control;
+ flag&=QName::tokenizer().insert(ns, "Geom") == NS_v11::LN_Geom;
+ flag&=QName::tokenizer().insert(ns, "Act") == NS_v11::LN_Act;
+ flag&=QName::tokenizer().insert(ns, "Layer") == NS_v11::LN_Layer;
+ flag&=QName::tokenizer().insert(ns, "User") == NS_v11::LN_User;
+ flag&=QName::tokenizer().insert(ns, "Prop") == NS_v11::LN_Prop;
+ flag&=QName::tokenizer().insert(ns, "Hyperlink") == NS_v11::LN_Hyperlink;
+ flag&=QName::tokenizer().insert(ns, "Reviewer") == NS_v11::LN_Reviewer;
+ flag&=QName::tokenizer().insert(ns, "Annotation") == NS_v11::LN_Annotation;
+ flag&=QName::tokenizer().insert(ns, "SmartTagDef") == NS_v11::LN_SmartTagDef;
+ flag&=QName::tokenizer().insert(ns, "Data1") == NS_v11::LN_Data1;
+ flag&=QName::tokenizer().insert(ns, "Data2") == NS_v11::LN_Data2;
+ flag&=QName::tokenizer().insert(ns, "Data3") == NS_v11::LN_Data3;
+ flag&=QName::tokenizer().insert(ns, "ForeignData") == NS_v11::LN_ForeignData;
+ flag&=QName::tokenizer().insert(ns, "PinX") == NS_v11::LN_PinX;
+ flag&=QName::tokenizer().insert(ns, "PinY") == NS_v11::LN_PinY;
+ flag&=QName::tokenizer().insert(ns, "Width") == NS_v11::LN_Width;
+ flag&=QName::tokenizer().insert(ns, "Height") == NS_v11::LN_Height;
+ flag&=QName::tokenizer().insert(ns, "LocPinX") == NS_v11::LN_LocPinX;
+ flag&=QName::tokenizer().insert(ns, "LocPinY") == NS_v11::LN_LocPinY;
+ flag&=QName::tokenizer().insert(ns, "Angle") == NS_v11::LN_Angle;
+ flag&=QName::tokenizer().insert(ns, "FlipX") == NS_v11::LN_FlipX;
+ flag&=QName::tokenizer().insert(ns, "FlipY") == NS_v11::LN_FlipY;
+ flag&=QName::tokenizer().insert(ns, "ResizeMode") == NS_v11::LN_ResizeMode;
+ flag&=QName::tokenizer().insert(ns, "LineWeight") == NS_v11::LN_LineWeight;
+ flag&=QName::tokenizer().insert(ns, "LineColor") == NS_v11::LN_LineColor;
+ flag&=QName::tokenizer().insert(ns, "LinePattern") == NS_v11::LN_LinePattern;
+ flag&=QName::tokenizer().insert(ns, "Rounding") == NS_v11::LN_Rounding;
+ flag&=QName::tokenizer().insert(ns, "EndArrowSize") == NS_v11::LN_EndArrowSize;
+ flag&=QName::tokenizer().insert(ns, "BeginArrow") == NS_v11::LN_BeginArrow;
+ flag&=QName::tokenizer().insert(ns, "EndArrow") == NS_v11::LN_EndArrow;
+ flag&=QName::tokenizer().insert(ns, "LineCap") == NS_v11::LN_LineCap;
+ flag&=QName::tokenizer().insert(ns, "BeginArrowSize") == NS_v11::LN_BeginArrowSize;
+ flag&=QName::tokenizer().insert(ns, "LineColorTrans") == NS_v11::LN_LineColorTrans;
+ flag&=QName::tokenizer().insert(ns, "FillForegnd") == NS_v11::LN_FillForegnd;
+ flag&=QName::tokenizer().insert(ns, "FillBkgnd") == NS_v11::LN_FillBkgnd;
+ flag&=QName::tokenizer().insert(ns, "FillPattern") == NS_v11::LN_FillPattern;
+ flag&=QName::tokenizer().insert(ns, "ShdwForegnd") == NS_v11::LN_ShdwForegnd;
+ flag&=QName::tokenizer().insert(ns, "ShdwBkgnd") == NS_v11::LN_ShdwBkgnd;
+ flag&=QName::tokenizer().insert(ns, "ShdwPattern") == NS_v11::LN_ShdwPattern;
+ flag&=QName::tokenizer().insert(ns, "FillForegndTrans") == NS_v11::LN_FillForegndTrans;
+ flag&=QName::tokenizer().insert(ns, "FillBkgndTrans") == NS_v11::LN_FillBkgndTrans;
+ flag&=QName::tokenizer().insert(ns, "ShdwForegndTrans") == NS_v11::LN_ShdwForegndTrans;
+ flag&=QName::tokenizer().insert(ns, "ShdwBkgndTrans") == NS_v11::LN_ShdwBkgndTrans;
+ flag&=QName::tokenizer().insert(ns, "ShapeShdwType") == NS_v11::LN_ShapeShdwType;
+ flag&=QName::tokenizer().insert(ns, "ShapeShdwOffsetX") == NS_v11::LN_ShapeShdwOffsetX;
+ flag&=QName::tokenizer().insert(ns, "ShapeShdwOffsetY") == NS_v11::LN_ShapeShdwOffsetY;
+ flag&=QName::tokenizer().insert(ns, "ShapeShdwObliqueAngle") == NS_v11::LN_ShapeShdwObliqueAngle;
+ flag&=QName::tokenizer().insert(ns, "ShapeShdwScaleFactor") == NS_v11::LN_ShapeShdwScaleFactor;
+ flag&=QName::tokenizer().insert(ns, "BeginX") == NS_v11::LN_BeginX;
+ flag&=QName::tokenizer().insert(ns, "BeginY") == NS_v11::LN_BeginY;
+ flag&=QName::tokenizer().insert(ns, "EndX") == NS_v11::LN_EndX;
+ flag&=QName::tokenizer().insert(ns, "EndY") == NS_v11::LN_EndY;
+ flag&=QName::tokenizer().insert(ns, "TheData") == NS_v11::LN_TheData;
+ flag&=QName::tokenizer().insert(ns, "TheText") == NS_v11::LN_TheText;
+ flag&=QName::tokenizer().insert(ns, "EventDblClick") == NS_v11::LN_EventDblClick;
+ flag&=QName::tokenizer().insert(ns, "EventXFMod") == NS_v11::LN_EventXFMod;
+ flag&=QName::tokenizer().insert(ns, "EventDrop") == NS_v11::LN_EventDrop;
+ flag&=QName::tokenizer().insert(ns, "LayerMember") == NS_v11::LN_LayerMember;
+ flag&=QName::tokenizer().insert(ns, "EnableLineProps") == NS_v11::LN_EnableLineProps;
+ flag&=QName::tokenizer().insert(ns, "EnableFillProps") == NS_v11::LN_EnableFillProps;
+ flag&=QName::tokenizer().insert(ns, "EnableTextProps") == NS_v11::LN_EnableTextProps;
+ flag&=QName::tokenizer().insert(ns, "HideForApply") == NS_v11::LN_HideForApply;
+ flag&=QName::tokenizer().insert(ns, "ImgOffsetX") == NS_v11::LN_ImgOffsetX;
+ flag&=QName::tokenizer().insert(ns, "ImgOffsetY") == NS_v11::LN_ImgOffsetY;
+ flag&=QName::tokenizer().insert(ns, "ImgWidth") == NS_v11::LN_ImgWidth;
+ flag&=QName::tokenizer().insert(ns, "ImgHeight") == NS_v11::LN_ImgHeight;
+ flag&=QName::tokenizer().insert(ns, "PageWidth") == NS_v11::LN_PageWidth;
+ flag&=QName::tokenizer().insert(ns, "PageHeight") == NS_v11::LN_PageHeight;
+ flag&=QName::tokenizer().insert(ns, "ShdwOffsetX") == NS_v11::LN_ShdwOffsetX;
+ flag&=QName::tokenizer().insert(ns, "ShdwOffsetY") == NS_v11::LN_ShdwOffsetY;
+ flag&=QName::tokenizer().insert(ns, "PageScale") == NS_v11::LN_PageScale;
+ flag&=QName::tokenizer().insert(ns, "DrawingScale") == NS_v11::LN_DrawingScale;
+ flag&=QName::tokenizer().insert(ns, "DrawingSizeType") == NS_v11::LN_DrawingSizeType;
+ flag&=QName::tokenizer().insert(ns, "DrawingScaleType") == NS_v11::LN_DrawingScaleType;
+ flag&=QName::tokenizer().insert(ns, "InhibitSnap") == NS_v11::LN_InhibitSnap;
+ flag&=QName::tokenizer().insert(ns, "UIVisibility") == NS_v11::LN_UIVisibility;
+ flag&=QName::tokenizer().insert(ns, "ShdwType") == NS_v11::LN_ShdwType;
+ flag&=QName::tokenizer().insert(ns, "ShdwObliqueAngle") == NS_v11::LN_ShdwObliqueAngle;
+ flag&=QName::tokenizer().insert(ns, "ShdwScaleFactor") == NS_v11::LN_ShdwScaleFactor;
+ flag&=QName::tokenizer().insert(ns, "LeftMargin") == NS_v11::LN_LeftMargin;
+ flag&=QName::tokenizer().insert(ns, "RightMargin") == NS_v11::LN_RightMargin;
+ flag&=QName::tokenizer().insert(ns, "TopMargin") == NS_v11::LN_TopMargin;
+ flag&=QName::tokenizer().insert(ns, "BottomMargin") == NS_v11::LN_BottomMargin;
+ flag&=QName::tokenizer().insert(ns, "VerticalAlign") == NS_v11::LN_VerticalAlign;
+ flag&=QName::tokenizer().insert(ns, "TextBkgnd") == NS_v11::LN_TextBkgnd;
+ flag&=QName::tokenizer().insert(ns, "DefaultTabStop") == NS_v11::LN_DefaultTabStop;
+ flag&=QName::tokenizer().insert(ns, "TextDirection") == NS_v11::LN_TextDirection;
+ flag&=QName::tokenizer().insert(ns, "TextBkgndTrans") == NS_v11::LN_TextBkgndTrans;
+ flag&=QName::tokenizer().insert(ns, "TxtPinX") == NS_v11::LN_TxtPinX;
+ flag&=QName::tokenizer().insert(ns, "TxtPinY") == NS_v11::LN_TxtPinY;
+ flag&=QName::tokenizer().insert(ns, "TxtWidth") == NS_v11::LN_TxtWidth;
+ flag&=QName::tokenizer().insert(ns, "TxtHeight") == NS_v11::LN_TxtHeight;
+ flag&=QName::tokenizer().insert(ns, "TxtLocPinX") == NS_v11::LN_TxtLocPinX;
+ flag&=QName::tokenizer().insert(ns, "TxtLocPinY") == NS_v11::LN_TxtLocPinY;
+ flag&=QName::tokenizer().insert(ns, "TxtAngle") == NS_v11::LN_TxtAngle;
+ flag&=QName::tokenizer().insert(ns, "AlignLeft") == NS_v11::LN_AlignLeft;
+ flag&=QName::tokenizer().insert(ns, "AlignCenter") == NS_v11::LN_AlignCenter;
+ flag&=QName::tokenizer().insert(ns, "AlignRight") == NS_v11::LN_AlignRight;
+ flag&=QName::tokenizer().insert(ns, "AlignTop") == NS_v11::LN_AlignTop;
+ flag&=QName::tokenizer().insert(ns, "AlignMiddle") == NS_v11::LN_AlignMiddle;
+ flag&=QName::tokenizer().insert(ns, "AlignBottom") == NS_v11::LN_AlignBottom;
+ flag&=QName::tokenizer().insert(ns, "LockWidth") == NS_v11::LN_LockWidth;
+ flag&=QName::tokenizer().insert(ns, "LockHeight") == NS_v11::LN_LockHeight;
+ flag&=QName::tokenizer().insert(ns, "LockMoveX") == NS_v11::LN_LockMoveX;
+ flag&=QName::tokenizer().insert(ns, "LockMoveY") == NS_v11::LN_LockMoveY;
+ flag&=QName::tokenizer().insert(ns, "LockAspect") == NS_v11::LN_LockAspect;
+ flag&=QName::tokenizer().insert(ns, "LockDelete") == NS_v11::LN_LockDelete;
+ flag&=QName::tokenizer().insert(ns, "LockBegin") == NS_v11::LN_LockBegin;
+ flag&=QName::tokenizer().insert(ns, "LockEnd") == NS_v11::LN_LockEnd;
+ flag&=QName::tokenizer().insert(ns, "LockRotate") == NS_v11::LN_LockRotate;
+ flag&=QName::tokenizer().insert(ns, "LockCrop") == NS_v11::LN_LockCrop;
+ flag&=QName::tokenizer().insert(ns, "LockVtxEdit") == NS_v11::LN_LockVtxEdit;
+ flag&=QName::tokenizer().insert(ns, "LockTextEdit") == NS_v11::LN_LockTextEdit;
+ flag&=QName::tokenizer().insert(ns, "LockFormat") == NS_v11::LN_LockFormat;
+ flag&=QName::tokenizer().insert(ns, "LockGroup") == NS_v11::LN_LockGroup;
+ flag&=QName::tokenizer().insert(ns, "LockCalcWH") == NS_v11::LN_LockCalcWH;
+ flag&=QName::tokenizer().insert(ns, "LockSelect") == NS_v11::LN_LockSelect;
+ flag&=QName::tokenizer().insert(ns, "LockCustProp") == NS_v11::LN_LockCustProp;
+ flag&=QName::tokenizer().insert(ns, "HelpTopic") == NS_v11::LN_HelpTopic;
+ flag&=QName::tokenizer().insert(ns, "Copyright") == NS_v11::LN_Copyright;
+ flag&=QName::tokenizer().insert(ns, "NoObjHandles") == NS_v11::LN_NoObjHandles;
+ flag&=QName::tokenizer().insert(ns, "NonPrinting") == NS_v11::LN_NonPrinting;
+ flag&=QName::tokenizer().insert(ns, "NoCtlHandles") == NS_v11::LN_NoCtlHandles;
+ flag&=QName::tokenizer().insert(ns, "NoAlignBox") == NS_v11::LN_NoAlignBox;
+ flag&=QName::tokenizer().insert(ns, "UpdateAlignBox") == NS_v11::LN_UpdateAlignBox;
+ flag&=QName::tokenizer().insert(ns, "HideText") == NS_v11::LN_HideText;
+ flag&=QName::tokenizer().insert(ns, "DynFeedback") == NS_v11::LN_DynFeedback;
+ flag&=QName::tokenizer().insert(ns, "GlueType") == NS_v11::LN_GlueType;
+ flag&=QName::tokenizer().insert(ns, "WalkPreference") == NS_v11::LN_WalkPreference;
+ flag&=QName::tokenizer().insert(ns, "BegTrigger") == NS_v11::LN_BegTrigger;
+ flag&=QName::tokenizer().insert(ns, "EndTrigger") == NS_v11::LN_EndTrigger;
+ flag&=QName::tokenizer().insert(ns, "ObjType") == NS_v11::LN_ObjType;
+ flag&=QName::tokenizer().insert(ns, "Comment") == NS_v11::LN_Comment;
+ flag&=QName::tokenizer().insert(ns, "IsDropSource") == NS_v11::LN_IsDropSource;
+ flag&=QName::tokenizer().insert(ns, "NoLiveDynamics") == NS_v11::LN_NoLiveDynamics;
+ flag&=QName::tokenizer().insert(ns, "LocalizeMerge") == NS_v11::LN_LocalizeMerge;
+ flag&=QName::tokenizer().insert(ns, "Calendar") == NS_v11::LN_Calendar;
+ flag&=QName::tokenizer().insert(ns, "LangID") == NS_v11::LN_LangID;
+ flag&=QName::tokenizer().insert(ns, "ShapeKeywords") == NS_v11::LN_ShapeKeywords;
+ flag&=QName::tokenizer().insert(ns, "DropOnPageScale") == NS_v11::LN_DropOnPageScale;
+ flag&=QName::tokenizer().insert(ns, "XRulerDensity") == NS_v11::LN_XRulerDensity;
+ flag&=QName::tokenizer().insert(ns, "YRulerDensity") == NS_v11::LN_YRulerDensity;
+ flag&=QName::tokenizer().insert(ns, "XRulerOrigin") == NS_v11::LN_XRulerOrigin;
+ flag&=QName::tokenizer().insert(ns, "YRulerOrigin") == NS_v11::LN_YRulerOrigin;
+ flag&=QName::tokenizer().insert(ns, "XGridDensity") == NS_v11::LN_XGridDensity;
+ flag&=QName::tokenizer().insert(ns, "YGridDensity") == NS_v11::LN_YGridDensity;
+ flag&=QName::tokenizer().insert(ns, "XGridSpacing") == NS_v11::LN_XGridSpacing;
+ flag&=QName::tokenizer().insert(ns, "YGridSpacing") == NS_v11::LN_YGridSpacing;
+ flag&=QName::tokenizer().insert(ns, "XGridOrigin") == NS_v11::LN_XGridOrigin;
+ flag&=QName::tokenizer().insert(ns, "YGridOrigin") == NS_v11::LN_YGridOrigin;
+ flag&=QName::tokenizer().insert(ns, "OutputFormat") == NS_v11::LN_OutputFormat;
+ flag&=QName::tokenizer().insert(ns, "LockPreview") == NS_v11::LN_LockPreview;
+ flag&=QName::tokenizer().insert(ns, "AddMarkup") == NS_v11::LN_AddMarkup;
+ flag&=QName::tokenizer().insert(ns, "ViewMarkup") == NS_v11::LN_ViewMarkup;
+ flag&=QName::tokenizer().insert(ns, "PreviewQuality") == NS_v11::LN_PreviewQuality;
+ flag&=QName::tokenizer().insert(ns, "PreviewScope") == NS_v11::LN_PreviewScope;
+ flag&=QName::tokenizer().insert(ns, "DocLangID") == NS_v11::LN_DocLangID;
+ flag&=QName::tokenizer().insert(ns, "Gamma") == NS_v11::LN_Gamma;
+ flag&=QName::tokenizer().insert(ns, "Contrast") == NS_v11::LN_Contrast;
+ flag&=QName::tokenizer().insert(ns, "Brightness") == NS_v11::LN_Brightness;
+ flag&=QName::tokenizer().insert(ns, "Sharpen") == NS_v11::LN_Sharpen;
+ flag&=QName::tokenizer().insert(ns, "Blur") == NS_v11::LN_Blur;
+ flag&=QName::tokenizer().insert(ns, "Denoise") == NS_v11::LN_Denoise;
+ flag&=QName::tokenizer().insert(ns, "Transparency") == NS_v11::LN_Transparency;
+ flag&=QName::tokenizer().insert(ns, "SelectMode") == NS_v11::LN_SelectMode;
+ flag&=QName::tokenizer().insert(ns, "DisplayMode") == NS_v11::LN_DisplayMode;
+ flag&=QName::tokenizer().insert(ns, "IsDropTarget") == NS_v11::LN_IsDropTarget;
+ flag&=QName::tokenizer().insert(ns, "IsSnapTarget") == NS_v11::LN_IsSnapTarget;
+ flag&=QName::tokenizer().insert(ns, "IsTextEditTarget") == NS_v11::LN_IsTextEditTarget;
+ flag&=QName::tokenizer().insert(ns, "DontMoveChildren") == NS_v11::LN_DontMoveChildren;
+ flag&=QName::tokenizer().insert(ns, "ShapePermeableX") == NS_v11::LN_ShapePermeableX;
+ flag&=QName::tokenizer().insert(ns, "ShapePermeableY") == NS_v11::LN_ShapePermeableY;
+ flag&=QName::tokenizer().insert(ns, "ShapePermeablePlace") == NS_v11::LN_ShapePermeablePlace;
+ flag&=QName::tokenizer().insert(ns, "ShapeFixedCode") == NS_v11::LN_ShapeFixedCode;
+ flag&=QName::tokenizer().insert(ns, "ShapePlowCode") == NS_v11::LN_ShapePlowCode;
+ flag&=QName::tokenizer().insert(ns, "ShapeRouteStyle") == NS_v11::LN_ShapeRouteStyle;
+ flag&=QName::tokenizer().insert(ns, "ConFixedCode") == NS_v11::LN_ConFixedCode;
+ flag&=QName::tokenizer().insert(ns, "ConLineJumpCode") == NS_v11::LN_ConLineJumpCode;
+ flag&=QName::tokenizer().insert(ns, "ConLineJumpStyle") == NS_v11::LN_ConLineJumpStyle;
+ flag&=QName::tokenizer().insert(ns, "ConLineJumpDirX") == NS_v11::LN_ConLineJumpDirX;
+ flag&=QName::tokenizer().insert(ns, "ConLineJumpDirY") == NS_v11::LN_ConLineJumpDirY;
+ flag&=QName::tokenizer().insert(ns, "ShapePlaceFlip") == NS_v11::LN_ShapePlaceFlip;
+ flag&=QName::tokenizer().insert(ns, "ConLineRouteExt") == NS_v11::LN_ConLineRouteExt;
+ flag&=QName::tokenizer().insert(ns, "ShapeSplit") == NS_v11::LN_ShapeSplit;
+ flag&=QName::tokenizer().insert(ns, "ShapeSplittable") == NS_v11::LN_ShapeSplittable;
+ flag&=QName::tokenizer().insert(ns, "ResizePage") == NS_v11::LN_ResizePage;
+ flag&=QName::tokenizer().insert(ns, "EnableGrid") == NS_v11::LN_EnableGrid;
+ flag&=QName::tokenizer().insert(ns, "DynamicsOff") == NS_v11::LN_DynamicsOff;
+ flag&=QName::tokenizer().insert(ns, "CtrlAsInput") == NS_v11::LN_CtrlAsInput;
+ flag&=QName::tokenizer().insert(ns, "PlaceStyle") == NS_v11::LN_PlaceStyle;
+ flag&=QName::tokenizer().insert(ns, "RouteStyle") == NS_v11::LN_RouteStyle;
+ flag&=QName::tokenizer().insert(ns, "PlaceDepth") == NS_v11::LN_PlaceDepth;
+ flag&=QName::tokenizer().insert(ns, "PlowCode") == NS_v11::LN_PlowCode;
+ flag&=QName::tokenizer().insert(ns, "LineJumpCode") == NS_v11::LN_LineJumpCode;
+ flag&=QName::tokenizer().insert(ns, "LineJumpStyle") == NS_v11::LN_LineJumpStyle;
+ flag&=QName::tokenizer().insert(ns, "PageLineJumpDirX") == NS_v11::LN_PageLineJumpDirX;
+ flag&=QName::tokenizer().insert(ns, "PageLineJumpDirY") == NS_v11::LN_PageLineJumpDirY;
+ flag&=QName::tokenizer().insert(ns, "LineToNodeX") == NS_v11::LN_LineToNodeX;
+ flag&=QName::tokenizer().insert(ns, "LineToNodeY") == NS_v11::LN_LineToNodeY;
+ flag&=QName::tokenizer().insert(ns, "BlockSizeX") == NS_v11::LN_BlockSizeX;
+ flag&=QName::tokenizer().insert(ns, "BlockSizeY") == NS_v11::LN_BlockSizeY;
+ flag&=QName::tokenizer().insert(ns, "AvenueSizeX") == NS_v11::LN_AvenueSizeX;
+ flag&=QName::tokenizer().insert(ns, "AvenueSizeY") == NS_v11::LN_AvenueSizeY;
+ flag&=QName::tokenizer().insert(ns, "LineToLineX") == NS_v11::LN_LineToLineX;
+ flag&=QName::tokenizer().insert(ns, "LineToLineY") == NS_v11::LN_LineToLineY;
+ flag&=QName::tokenizer().insert(ns, "LineJumpFactorX") == NS_v11::LN_LineJumpFactorX;
+ flag&=QName::tokenizer().insert(ns, "LineJumpFactorY") == NS_v11::LN_LineJumpFactorY;
+ flag&=QName::tokenizer().insert(ns, "LineAdjustFrom") == NS_v11::LN_LineAdjustFrom;
+ flag&=QName::tokenizer().insert(ns, "LineAdjustTo") == NS_v11::LN_LineAdjustTo;
+ flag&=QName::tokenizer().insert(ns, "PlaceFlip") == NS_v11::LN_PlaceFlip;
+ flag&=QName::tokenizer().insert(ns, "LineRouteExt") == NS_v11::LN_LineRouteExt;
+ flag&=QName::tokenizer().insert(ns, "PageShapeSplit") == NS_v11::LN_PageShapeSplit;
+ flag&=QName::tokenizer().insert(ns, "PageLeftMargin") == NS_v11::LN_PageLeftMargin;
+ flag&=QName::tokenizer().insert(ns, "PageRightMargin") == NS_v11::LN_PageRightMargin;
+ flag&=QName::tokenizer().insert(ns, "PageTopMargin") == NS_v11::LN_PageTopMargin;
+ flag&=QName::tokenizer().insert(ns, "PageBottomMargin") == NS_v11::LN_PageBottomMargin;
+ flag&=QName::tokenizer().insert(ns, "ScaleX") == NS_v11::LN_ScaleX;
+ flag&=QName::tokenizer().insert(ns, "ScaleY") == NS_v11::LN_ScaleY;
+ flag&=QName::tokenizer().insert(ns, "PagesX") == NS_v11::LN_PagesX;
+ flag&=QName::tokenizer().insert(ns, "PagesY") == NS_v11::LN_PagesY;
+ flag&=QName::tokenizer().insert(ns, "CenterX") == NS_v11::LN_CenterX;
+ flag&=QName::tokenizer().insert(ns, "CenterY") == NS_v11::LN_CenterY;
+ flag&=QName::tokenizer().insert(ns, "OnPage") == NS_v11::LN_OnPage;
+ flag&=QName::tokenizer().insert(ns, "PrintGrid") == NS_v11::LN_PrintGrid;
+ flag&=QName::tokenizer().insert(ns, "PrintPageOrientation") == NS_v11::LN_PrintPageOrientation;
+ flag&=QName::tokenizer().insert(ns, "PaperKind") == NS_v11::LN_PaperKind;
+ flag&=QName::tokenizer().insert(ns, "PaperSource") == NS_v11::LN_PaperSource;
+ flag&=QName::tokenizer().insert(ns, "Font") == NS_v11::LN_Font;
+ flag&=QName::tokenizer().insert(ns, "Color") == NS_v11::LN_Color;
+ flag&=QName::tokenizer().insert(ns, "Style") == NS_v11::LN_Style;
+ flag&=QName::tokenizer().insert(ns, "Case") == NS_v11::LN_Case;
+ flag&=QName::tokenizer().insert(ns, "Pos") == NS_v11::LN_Pos;
+ flag&=QName::tokenizer().insert(ns, "FontScale") == NS_v11::LN_FontScale;
+ flag&=QName::tokenizer().insert(ns, "Locale") == NS_v11::LN_Locale;
+ flag&=QName::tokenizer().insert(ns, "Size") == NS_v11::LN_Size;
+ flag&=QName::tokenizer().insert(ns, "DblUnderline") == NS_v11::LN_DblUnderline;
+ flag&=QName::tokenizer().insert(ns, "Overline") == NS_v11::LN_Overline;
+ flag&=QName::tokenizer().insert(ns, "Strikethru") == NS_v11::LN_Strikethru;
+ flag&=QName::tokenizer().insert(ns, "Highlight") == NS_v11::LN_Highlight;
+ flag&=QName::tokenizer().insert(ns, "Perpendicular") == NS_v11::LN_Perpendicular;
+ flag&=QName::tokenizer().insert(ns, "DoubleStrikethrough") == NS_v11::LN_DoubleStrikethrough;
+ flag&=QName::tokenizer().insert(ns, "RTLText") == NS_v11::LN_RTLText;
+ flag&=QName::tokenizer().insert(ns, "UseVertical") == NS_v11::LN_UseVertical;
+ flag&=QName::tokenizer().insert(ns, "Letterspace") == NS_v11::LN_Letterspace;
+ flag&=QName::tokenizer().insert(ns, "ColorTrans") == NS_v11::LN_ColorTrans;
+ flag&=QName::tokenizer().insert(ns, "AsianFont") == NS_v11::LN_AsianFont;
+ flag&=QName::tokenizer().insert(ns, "ComplexScriptFont") == NS_v11::LN_ComplexScriptFont;
+ flag&=QName::tokenizer().insert(ns, "LocalizeFont") == NS_v11::LN_LocalizeFont;
+ flag&=QName::tokenizer().insert(ns, "ComplexScriptSize") == NS_v11::LN_ComplexScriptSize;
+ flag&=QName::tokenizer().insert(ns, "IndFirst") == NS_v11::LN_IndFirst;
+ flag&=QName::tokenizer().insert(ns, "IndLeft") == NS_v11::LN_IndLeft;
+ flag&=QName::tokenizer().insert(ns, "IndRight") == NS_v11::LN_IndRight;
+ flag&=QName::tokenizer().insert(ns, "SpLine") == NS_v11::LN_SpLine;
+ flag&=QName::tokenizer().insert(ns, "SpBefore") == NS_v11::LN_SpBefore;
+ flag&=QName::tokenizer().insert(ns, "SpAfter") == NS_v11::LN_SpAfter;
+ flag&=QName::tokenizer().insert(ns, "HorzAlign") == NS_v11::LN_HorzAlign;
+ flag&=QName::tokenizer().insert(ns, "Bullet") == NS_v11::LN_Bullet;
+ flag&=QName::tokenizer().insert(ns, "BulletStr") == NS_v11::LN_BulletStr;
+ flag&=QName::tokenizer().insert(ns, "BulletFont") == NS_v11::LN_BulletFont;
+ flag&=QName::tokenizer().insert(ns, "LocalizeBulletFont") == NS_v11::LN_LocalizeBulletFont;
+ flag&=QName::tokenizer().insert(ns, "BulletFontSize") == NS_v11::LN_BulletFontSize;
+ flag&=QName::tokenizer().insert(ns, "TextPosAfterBullet") == NS_v11::LN_TextPosAfterBullet;
+ flag&=QName::tokenizer().insert(ns, "Flags") == NS_v11::LN_Flags;
+ flag&=QName::tokenizer().insert(ns, "Tab") == NS_v11::LN_Tab;
+ flag&=QName::tokenizer().insert(ns, "Position") == NS_v11::LN_Position;
+ flag&=QName::tokenizer().insert(ns, "Alignment") == NS_v11::LN_Alignment;
+ flag&=QName::tokenizer().insert(ns, "Leader") == NS_v11::LN_Leader;
+ flag&=QName::tokenizer().insert(ns, "X") == NS_v11::LN_X;
+ flag&=QName::tokenizer().insert(ns, "Y") == NS_v11::LN_Y;
+ flag&=QName::tokenizer().insert(ns, "A") == NS_v11::LN_A;
+ flag&=QName::tokenizer().insert(ns, "B") == NS_v11::LN_B;
+ flag&=QName::tokenizer().insert(ns, "C") == NS_v11::LN_C;
+ flag&=QName::tokenizer().insert(ns, "D") == NS_v11::LN_D;
+ flag&=QName::tokenizer().insert(ns, "DirX") == NS_v11::LN_DirX;
+ flag&=QName::tokenizer().insert(ns, "DirY") == NS_v11::LN_DirY;
+ flag&=QName::tokenizer().insert(ns, "Type") == NS_v11::LN_Type;
+ flag&=QName::tokenizer().insert(ns, "AutoGen") == NS_v11::LN_AutoGen;
+ flag&=QName::tokenizer().insert(ns, "Prompt") == NS_v11::LN_Prompt;
+ flag&=QName::tokenizer().insert(ns, "Value") == NS_v11::LN_Value;
+ flag&=QName::tokenizer().insert(ns, "EditMode") == NS_v11::LN_EditMode;
+ flag&=QName::tokenizer().insert(ns, "Format") == NS_v11::LN_Format;
+ flag&=QName::tokenizer().insert(ns, "UICat") == NS_v11::LN_UICat;
+ flag&=QName::tokenizer().insert(ns, "UICod") == NS_v11::LN_UICod;
+ flag&=QName::tokenizer().insert(ns, "UIFmt") == NS_v11::LN_UIFmt;
+ flag&=QName::tokenizer().insert(ns, "ObjectKind") == NS_v11::LN_ObjectKind;
+ flag&=QName::tokenizer().insert(ns, "XDyn") == NS_v11::LN_XDyn;
+ flag&=QName::tokenizer().insert(ns, "YDyn") == NS_v11::LN_YDyn;
+ flag&=QName::tokenizer().insert(ns, "XCon") == NS_v11::LN_XCon;
+ flag&=QName::tokenizer().insert(ns, "YCon") == NS_v11::LN_YCon;
+ flag&=QName::tokenizer().insert(ns, "CanGlue") == NS_v11::LN_CanGlue;
+ flag&=QName::tokenizer().insert(ns, "NoFill") == NS_v11::LN_NoFill;
+ flag&=QName::tokenizer().insert(ns, "NoLine") == NS_v11::LN_NoLine;
+ flag&=QName::tokenizer().insert(ns, "NoShow") == NS_v11::LN_NoShow;
+ flag&=QName::tokenizer().insert(ns, "NoSnap") == NS_v11::LN_NoSnap;
+ flag&=QName::tokenizer().insert(ns, "MoveTo") == NS_v11::LN_MoveTo;
+ flag&=QName::tokenizer().insert(ns, "LineTo") == NS_v11::LN_LineTo;
+ flag&=QName::tokenizer().insert(ns, "ArcTo") == NS_v11::LN_ArcTo;
+ flag&=QName::tokenizer().insert(ns, "InfiniteLine") == NS_v11::LN_InfiniteLine;
+ flag&=QName::tokenizer().insert(ns, "Ellipse") == NS_v11::LN_Ellipse;
+ flag&=QName::tokenizer().insert(ns, "EllipticalArcTo") == NS_v11::LN_EllipticalArcTo;
+ flag&=QName::tokenizer().insert(ns, "SplineStart") == NS_v11::LN_SplineStart;
+ flag&=QName::tokenizer().insert(ns, "SplineKnot") == NS_v11::LN_SplineKnot;
+ flag&=QName::tokenizer().insert(ns, "PolylineTo") == NS_v11::LN_PolylineTo;
+ flag&=QName::tokenizer().insert(ns, "NURBSTo") == NS_v11::LN_NURBSTo;
+ flag&=QName::tokenizer().insert(ns, "E") == NS_v11::LN_E;
+ flag&=QName::tokenizer().insert(ns, "Menu") == NS_v11::LN_Menu;
+ flag&=QName::tokenizer().insert(ns, "Action") == NS_v11::LN_Action;
+ flag&=QName::tokenizer().insert(ns, "Checked") == NS_v11::LN_Checked;
+ flag&=QName::tokenizer().insert(ns, "Disabled") == NS_v11::LN_Disabled;
+ flag&=QName::tokenizer().insert(ns, "ReadOnly") == NS_v11::LN_ReadOnly;
+ flag&=QName::tokenizer().insert(ns, "Invisible") == NS_v11::LN_Invisible;
+ flag&=QName::tokenizer().insert(ns, "BeginGroup") == NS_v11::LN_BeginGroup;
+ flag&=QName::tokenizer().insert(ns, "TagName") == NS_v11::LN_TagName;
+ flag&=QName::tokenizer().insert(ns, "ButtonFace") == NS_v11::LN_ButtonFace;
+ flag&=QName::tokenizer().insert(ns, "SortKey") == NS_v11::LN_SortKey;
+ flag&=QName::tokenizer().insert(ns, "Name") == NS_v11::LN_Name;
+ flag&=QName::tokenizer().insert(ns, "Status") == NS_v11::LN_Status;
+ flag&=QName::tokenizer().insert(ns, "Visible") == NS_v11::LN_Visible;
+ flag&=QName::tokenizer().insert(ns, "Print") == NS_v11::LN_Print;
+ flag&=QName::tokenizer().insert(ns, "Active") == NS_v11::LN_Active;
+ flag&=QName::tokenizer().insert(ns, "Lock") == NS_v11::LN_Lock;
+ flag&=QName::tokenizer().insert(ns, "Snap") == NS_v11::LN_Snap;
+ flag&=QName::tokenizer().insert(ns, "Glue") == NS_v11::LN_Glue;
+ flag&=QName::tokenizer().insert(ns, "NameUniv") == NS_v11::LN_NameUniv;
+ flag&=QName::tokenizer().insert(ns, "Label") == NS_v11::LN_Label;
+ flag&=QName::tokenizer().insert(ns, "Verify") == NS_v11::LN_Verify;
+ flag&=QName::tokenizer().insert(ns, "Description") == NS_v11::LN_Description;
+ flag&=QName::tokenizer().insert(ns, "Address") == NS_v11::LN_Address;
+ flag&=QName::tokenizer().insert(ns, "SubAddress") == NS_v11::LN_SubAddress;
+ flag&=QName::tokenizer().insert(ns, "ExtraInfo") == NS_v11::LN_ExtraInfo;
+ flag&=QName::tokenizer().insert(ns, "Frame") == NS_v11::LN_Frame;
+ flag&=QName::tokenizer().insert(ns, "NewWindow") == NS_v11::LN_NewWindow;
+ flag&=QName::tokenizer().insert(ns, "Default") == NS_v11::LN_Default;
+ flag&=QName::tokenizer().insert(ns, "Initials") == NS_v11::LN_Initials;
+ flag&=QName::tokenizer().insert(ns, "ReviewerID") == NS_v11::LN_ReviewerID;
+ flag&=QName::tokenizer().insert(ns, "CurrentIndex") == NS_v11::LN_CurrentIndex;
+ flag&=QName::tokenizer().insert(ns, "MarkerIndex") == NS_v11::LN_MarkerIndex;
+ flag&=QName::tokenizer().insert(ns, "Date") == NS_v11::LN_Date;
+ flag&=QName::tokenizer().insert(ns, "XJustify") == NS_v11::LN_XJustify;
+ flag&=QName::tokenizer().insert(ns, "YJustify") == NS_v11::LN_YJustify;
+ flag&=QName::tokenizer().insert(ns, "Title") == NS_v11::LN_Title;
+ flag&=QName::tokenizer().insert(ns, "Subject") == NS_v11::LN_Subject;
+ flag&=QName::tokenizer().insert(ns, "Creator") == NS_v11::LN_Creator;
+ flag&=QName::tokenizer().insert(ns, "Manager") == NS_v11::LN_Manager;
+ flag&=QName::tokenizer().insert(ns, "Company") == NS_v11::LN_Company;
+ flag&=QName::tokenizer().insert(ns, "Category") == NS_v11::LN_Category;
+ flag&=QName::tokenizer().insert(ns, "Keywords") == NS_v11::LN_Keywords;
+ flag&=QName::tokenizer().insert(ns, "Desc") == NS_v11::LN_Desc;
+ flag&=QName::tokenizer().insert(ns, "HyperlinkBase") == NS_v11::LN_HyperlinkBase;
+ flag&=QName::tokenizer().insert(ns, "AlternateNames") == NS_v11::LN_AlternateNames;
+ flag&=QName::tokenizer().insert(ns, "Template") == NS_v11::LN_Template;
+ flag&=QName::tokenizer().insert(ns, "BuildNumberCreated") == NS_v11::LN_BuildNumberCreated;
+ flag&=QName::tokenizer().insert(ns, "BuildNumberEdited") == NS_v11::LN_BuildNumberEdited;
+ flag&=QName::tokenizer().insert(ns, "PreviewPicture") == NS_v11::LN_PreviewPicture;
+ flag&=QName::tokenizer().insert(ns, "CustomProps") == NS_v11::LN_CustomProps;
+ flag&=QName::tokenizer().insert(ns, "TimeCreated") == NS_v11::LN_TimeCreated;
+ flag&=QName::tokenizer().insert(ns, "TimeSaved") == NS_v11::LN_TimeSaved;
+ flag&=QName::tokenizer().insert(ns, "TimeEdited") == NS_v11::LN_TimeEdited;
+ flag&=QName::tokenizer().insert(ns, "TimePrinted") == NS_v11::LN_TimePrinted;
+ flag&=QName::tokenizer().insert(ns, "CustomProp") == NS_v11::LN_CustomProp;
+ flag&=QName::tokenizer().insert(ns, "GlueSettings") == NS_v11::LN_GlueSettings;
+ flag&=QName::tokenizer().insert(ns, "SnapSettings") == NS_v11::LN_SnapSettings;
+ flag&=QName::tokenizer().insert(ns, "SnapExtensions") == NS_v11::LN_SnapExtensions;
+ flag&=QName::tokenizer().insert(ns, "SnapAngles") == NS_v11::LN_SnapAngles;
+ flag&=QName::tokenizer().insert(ns, "DynamicGridEnabled") == NS_v11::LN_DynamicGridEnabled;
+ flag&=QName::tokenizer().insert(ns, "ProtectStyles") == NS_v11::LN_ProtectStyles;
+ flag&=QName::tokenizer().insert(ns, "ProtectShapes") == NS_v11::LN_ProtectShapes;
+ flag&=QName::tokenizer().insert(ns, "ProtectMasters") == NS_v11::LN_ProtectMasters;
+ flag&=QName::tokenizer().insert(ns, "ProtectBkgnds") == NS_v11::LN_ProtectBkgnds;
+ flag&=QName::tokenizer().insert(ns, "CustomMenusFile") == NS_v11::LN_CustomMenusFile;
+ flag&=QName::tokenizer().insert(ns, "CustomToolbarsFile") == NS_v11::LN_CustomToolbarsFile;
+ flag&=QName::tokenizer().insert(ns, "AttachedToolbars") == NS_v11::LN_AttachedToolbars;
+ flag&=QName::tokenizer().insert(ns, "SnapAngle") == NS_v11::LN_SnapAngle;
+ flag&=QName::tokenizer().insert(ns, "ColorEntry") == NS_v11::LN_ColorEntry;
+ flag&=QName::tokenizer().insert(ns, "PaperSize") == NS_v11::LN_PaperSize;
+ flag&=QName::tokenizer().insert(ns, "PaperWidth") == NS_v11::LN_PaperWidth;
+ flag&=QName::tokenizer().insert(ns, "PaperHeight") == NS_v11::LN_PaperHeight;
+ flag&=QName::tokenizer().insert(ns, "PrintCenteredH") == NS_v11::LN_PrintCenteredH;
+ flag&=QName::tokenizer().insert(ns, "PrintCenteredV") == NS_v11::LN_PrintCenteredV;
+ flag&=QName::tokenizer().insert(ns, "PrintFitOnPages") == NS_v11::LN_PrintFitOnPages;
+ flag&=QName::tokenizer().insert(ns, "PrintLandscape") == NS_v11::LN_PrintLandscape;
+ flag&=QName::tokenizer().insert(ns, "PrintPagesAcross") == NS_v11::LN_PrintPagesAcross;
+ flag&=QName::tokenizer().insert(ns, "PrintPagesDown") == NS_v11::LN_PrintPagesDown;
+ flag&=QName::tokenizer().insert(ns, "PrintScale") == NS_v11::LN_PrintScale;
+ flag&=QName::tokenizer().insert(ns, "FontEntry") == NS_v11::LN_FontEntry;
+ flag&=QName::tokenizer().insert(ns, "FaceName") == NS_v11::LN_FaceName;
+ flag&=QName::tokenizer().insert(ns, "StyleSheet") == NS_v11::LN_StyleSheet;
+ flag&=QName::tokenizer().insert(ns, "Master") == NS_v11::LN_Master;
+ flag&=QName::tokenizer().insert(ns, "MasterShortcut") == NS_v11::LN_MasterShortcut;
+ flag&=QName::tokenizer().insert(ns, "PageSheet") == NS_v11::LN_PageSheet;
+ flag&=QName::tokenizer().insert(ns, "Shapes") == NS_v11::LN_Shapes;
+ flag&=QName::tokenizer().insert(ns, "Icon") == NS_v11::LN_Icon;
+ flag&=QName::tokenizer().insert(ns, "Connects") == NS_v11::LN_Connects;
+ flag&=QName::tokenizer().insert(ns, "Shape") == NS_v11::LN_Shape;
+ flag&=QName::tokenizer().insert(ns, "Connect") == NS_v11::LN_Connect;
+ flag&=QName::tokenizer().insert(ns, "Page") == NS_v11::LN_Page;
+ flag&=QName::tokenizer().insert(ns, "Window") == NS_v11::LN_Window;
+ flag&=QName::tokenizer().insert(ns, "StencilGroup") == NS_v11::LN_StencilGroup;
+ flag&=QName::tokenizer().insert(ns, "StencilGroupPos") == NS_v11::LN_StencilGroupPos;
+ flag&=QName::tokenizer().insert(ns, "ShowRulers") == NS_v11::LN_ShowRulers;
+ flag&=QName::tokenizer().insert(ns, "ShowGrid") == NS_v11::LN_ShowGrid;
+ flag&=QName::tokenizer().insert(ns, "ShowPageBreaks") == NS_v11::LN_ShowPageBreaks;
+ flag&=QName::tokenizer().insert(ns, "ShowGuides") == NS_v11::LN_ShowGuides;
+ flag&=QName::tokenizer().insert(ns, "ShowConnectionPoints") == NS_v11::LN_ShowConnectionPoints;
+ flag&=QName::tokenizer().insert(ns, "TabSplitterPos") == NS_v11::LN_TabSplitterPos;
+ flag&=QName::tokenizer().insert(ns, "EventItem") == NS_v11::LN_EventItem;
+ flag&=QName::tokenizer().insert(ns, "HeaderMargin") == NS_v11::LN_HeaderMargin;
+ flag&=QName::tokenizer().insert(ns, "FooterMargin") == NS_v11::LN_FooterMargin;
+ flag&=QName::tokenizer().insert(ns, "HeaderLeft") == NS_v11::LN_HeaderLeft;
+ flag&=QName::tokenizer().insert(ns, "HeaderCenter") == NS_v11::LN_HeaderCenter;
+ flag&=QName::tokenizer().insert(ns, "HeaderRight") == NS_v11::LN_HeaderRight;
+ flag&=QName::tokenizer().insert(ns, "FooterLeft") == NS_v11::LN_FooterLeft;
+ flag&=QName::tokenizer().insert(ns, "FooterCenter") == NS_v11::LN_FooterCenter;
+ flag&=QName::tokenizer().insert(ns, "FooterRight") == NS_v11::LN_FooterRight;
+ flag&=QName::tokenizer().insert(ns, "HeaderFooterFont") == NS_v11::LN_HeaderFooterFont;
+ flag&=QName::tokenizer().insert(ns, "DocumentProperties") == NS_v11::LN_DocumentProperties;
+ flag&=QName::tokenizer().insert(ns, "DocumentSettings") == NS_v11::LN_DocumentSettings;
+ flag&=QName::tokenizer().insert(ns, "Colors") == NS_v11::LN_Colors;
+ flag&=QName::tokenizer().insert(ns, "PrintSetup") == NS_v11::LN_PrintSetup;
+ flag&=QName::tokenizer().insert(ns, "Fonts") == NS_v11::LN_Fonts;
+ flag&=QName::tokenizer().insert(ns, "FaceNames") == NS_v11::LN_FaceNames;
+ flag&=QName::tokenizer().insert(ns, "StyleSheets") == NS_v11::LN_StyleSheets;
+ flag&=QName::tokenizer().insert(ns, "DocumentSheet") == NS_v11::LN_DocumentSheet;
+ flag&=QName::tokenizer().insert(ns, "Masters") == NS_v11::LN_Masters;
+ flag&=QName::tokenizer().insert(ns, "Pages") == NS_v11::LN_Pages;
+ flag&=QName::tokenizer().insert(ns, "Windows") == NS_v11::LN_Windows;
+ flag&=QName::tokenizer().insert(ns, "EventList") == NS_v11::LN_EventList;
+ flag&=QName::tokenizer().insert(ns, "HeaderFooter") == NS_v11::LN_HeaderFooter;
+ flag&=QName::tokenizer().insert(ns, "VBProjectData") == NS_v11::LN_VBProjectData;
+ flag&=QName::tokenizer().insert(ns, "EmailRoutingData") == NS_v11::LN_EmailRoutingData;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace v11 failed", flag);}
+ void test_sst12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/sst";
+ flag&=QName::tokenizer().insert(ns, "Sst") == NS_sst12::LN_Sst;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace sst12 failed", flag);}
+ void test_swb12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/sharedworkbook";
+ flag&=QName::tokenizer().insert(ns, "revisions") == NS_swb12::LN_revisions;
+ flag&=QName::tokenizer().insert(ns, "info") == NS_swb12::LN_info;
+ flag&=QName::tokenizer().insert(ns, "header") == NS_swb12::LN_header;
+ flag&=QName::tokenizer().insert(ns, "rwCol") == NS_swb12::LN_rwCol;
+ flag&=QName::tokenizer().insert(ns, "move") == NS_swb12::LN_move;
+ flag&=QName::tokenizer().insert(ns, "userView") == NS_swb12::LN_userView;
+ flag&=QName::tokenizer().insert(ns, "sheetName") == NS_swb12::LN_sheetName;
+ flag&=QName::tokenizer().insert(ns, "sheet") == NS_swb12::LN_sheet;
+ flag&=QName::tokenizer().insert(ns, "cell") == NS_swb12::LN_cell;
+ flag&=QName::tokenizer().insert(ns, "formatting") == NS_swb12::LN_formatting;
+ flag&=QName::tokenizer().insert(ns, "autofmt") == NS_swb12::LN_autofmt;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_swb12::LN_name;
+ flag&=QName::tokenizer().insert(ns, "comment") == NS_swb12::LN_comment;
+ flag&=QName::tokenizer().insert(ns, "qtField") == NS_swb12::LN_qtField;
+ flag&=QName::tokenizer().insert(ns, "conflict") == NS_swb12::LN_conflict;
+ flag&=QName::tokenizer().insert(ns, "revdata") == NS_swb12::LN_revdata;
+ flag&=QName::tokenizer().insert(ns, "tabidMap") == NS_swb12::LN_tabidMap;
+ flag&=QName::tokenizer().insert(ns, "tabId") == NS_swb12::LN_tabId;
+ flag&=QName::tokenizer().insert(ns, "undoinfo") == NS_swb12::LN_undoinfo;
+ flag&=QName::tokenizer().insert(ns, "cellOld") == NS_swb12::LN_cellOld;
+ flag&=QName::tokenizer().insert(ns, "cellNew") == NS_swb12::LN_cellNew;
+ flag&=QName::tokenizer().insert(ns, "dxfOld") == NS_swb12::LN_dxfOld;
+ flag&=QName::tokenizer().insert(ns, "dxfNew") == NS_swb12::LN_dxfNew;
+ flag&=QName::tokenizer().insert(ns, "dxfFmt") == NS_swb12::LN_dxfFmt;
+ flag&=QName::tokenizer().insert(ns, "formula") == NS_swb12::LN_formula;
+ flag&=QName::tokenizer().insert(ns, "formulaOld") == NS_swb12::LN_formulaOld;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace swb12 failed", flag);}
+ void test_pic12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/officeart/2005/8/picture";
+ flag&=QName::tokenizer().insert(ns, "spPr") == NS_pic12::LN_spPr;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace pic12 failed", flag);}
+ void test_vml(){
+ bool flag=true;
+ static const char ns[] = "urn:schemas-microsoft-com:vml";
+ flag&=QName::tokenizer().insert(ns, "shape") == NS_vml::LN_shape;
+ flag&=QName::tokenizer().insert(ns, "group") == NS_vml::LN_group;
+ flag&=QName::tokenizer().insert(ns, "shapetype") == NS_vml::LN_shapetype;
+ flag&=QName::tokenizer().insert(ns, "VMLFrame") == NS_vml::LN_VMLFrame;
+ flag&=QName::tokenizer().insert(ns, "background") == NS_vml::LN_background;
+ flag&=QName::tokenizer().insert(ns, "path") == NS_vml::LN_path;
+ flag&=QName::tokenizer().insert(ns, "formulas") == NS_vml::LN_formulas;
+ flag&=QName::tokenizer().insert(ns, "f") == NS_vml::LN_f;
+ flag&=QName::tokenizer().insert(ns, "handles") == NS_vml::LN_handles;
+ flag&=QName::tokenizer().insert(ns, "h") == NS_vml::LN_h;
+ flag&=QName::tokenizer().insert(ns, "fill") == NS_vml::LN_fill;
+ flag&=QName::tokenizer().insert(ns, "stroke") == NS_vml::LN_stroke;
+ flag&=QName::tokenizer().insert(ns, "shadow") == NS_vml::LN_shadow;
+ flag&=QName::tokenizer().insert(ns, "textbox") == NS_vml::LN_textbox;
+ flag&=QName::tokenizer().insert(ns, "textpath") == NS_vml::LN_textpath;
+ flag&=QName::tokenizer().insert(ns, "imagedata") == NS_vml::LN_imagedata;
+ flag&=QName::tokenizer().insert(ns, "line") == NS_vml::LN_line;
+ flag&=QName::tokenizer().insert(ns, "Behavior") == NS_vml::LN_Behavior;
+ flag&=QName::tokenizer().insert(ns, "Sequence") == NS_vml::LN_Sequence;
+ flag&=QName::tokenizer().insert(ns, "Action") == NS_vml::LN_Action;
+ flag&=QName::tokenizer().insert(ns, "arc") == NS_vml::LN_arc;
+ flag&=QName::tokenizer().insert(ns, "curve") == NS_vml::LN_curve;
+ flag&=QName::tokenizer().insert(ns, "polyline") == NS_vml::LN_polyline;
+ flag&=QName::tokenizer().insert(ns, "rect") == NS_vml::LN_rect;
+ flag&=QName::tokenizer().insert(ns, "roundrect") == NS_vml::LN_roundrect;
+ flag&=QName::tokenizer().insert(ns, "oval") == NS_vml::LN_oval;
+ flag&=QName::tokenizer().insert(ns, "image") == NS_vml::LN_image;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace vml failed", flag);}
+ void test_ax12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/activeX/2005/ax";
+ flag&=QName::tokenizer().insert(ns, "ocx") == NS_ax12::LN_ocx;
+ flag&=QName::tokenizer().insert(ns, "ocxPr") == NS_ax12::LN_ocxPr;
+ flag&=QName::tokenizer().insert(ns, "ocxMBed") == NS_ax12::LN_ocxMBed;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace ax12 failed", flag);}
+ void test_ws12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/worksheet";
+ flag&=QName::tokenizer().insert(ns, "workSheet") == NS_ws12::LN_workSheet;
+ flag&=QName::tokenizer().insert(ns, "macroSheet") == NS_ws12::LN_macroSheet;
+ flag&=QName::tokenizer().insert(ns, "dialogSheet") == NS_ws12::LN_dialogSheet;
+ flag&=QName::tokenizer().insert(ns, "chartSheet") == NS_ws12::LN_chartSheet;
+ flag&=QName::tokenizer().insert(ns, "wsPr") == NS_ws12::LN_wsPr;
+ flag&=QName::tokenizer().insert(ns, "dimension") == NS_ws12::LN_dimension;
+ flag&=QName::tokenizer().insert(ns, "wsViews") == NS_ws12::LN_wsViews;
+ flag&=QName::tokenizer().insert(ns, "userShViews") == NS_ws12::LN_userShViews;
+ flag&=QName::tokenizer().insert(ns, "wsFmtInfo") == NS_ws12::LN_wsFmtInfo;
+ flag&=QName::tokenizer().insert(ns, "colInfos") == NS_ws12::LN_colInfos;
+ flag&=QName::tokenizer().insert(ns, "sheetData") == NS_ws12::LN_sheetData;
+ flag&=QName::tokenizer().insert(ns, "calcChains") == NS_ws12::LN_calcChains;
+ flag&=QName::tokenizer().insert(ns, "autofilter") == NS_ws12::LN_autofilter;
+ flag&=QName::tokenizer().insert(ns, "sortState") == NS_ws12::LN_sortState;
+ flag&=QName::tokenizer().insert(ns, "rwBrks") == NS_ws12::LN_rwBrks;
+ flag&=QName::tokenizer().insert(ns, "colBrks") == NS_ws12::LN_colBrks;
+ flag&=QName::tokenizer().insert(ns, "pageMargins") == NS_ws12::LN_pageMargins;
+ flag&=QName::tokenizer().insert(ns, "printOptions") == NS_ws12::LN_printOptions;
+ flag&=QName::tokenizer().insert(ns, "pageSetup") == NS_ws12::LN_pageSetup;
+ flag&=QName::tokenizer().insert(ns, "headerFooter") == NS_ws12::LN_headerFooter;
+ flag&=QName::tokenizer().insert(ns, "drawing") == NS_ws12::LN_drawing;
+ flag&=QName::tokenizer().insert(ns, "fsb") == NS_ws12::LN_fsb;
+ flag&=QName::tokenizer().insert(ns, "phonetic") == NS_ws12::LN_phonetic;
+ flag&=QName::tokenizer().insert(ns, "dataConsolidation") == NS_ws12::LN_dataConsolidation;
+ flag&=QName::tokenizer().insert(ns, "mergeCells") == NS_ws12::LN_mergeCells;
+ flag&=QName::tokenizer().insert(ns, "dVals") == NS_ws12::LN_dVals;
+ flag&=QName::tokenizer().insert(ns, "smartTags") == NS_ws12::LN_smartTags;
+ flag&=QName::tokenizer().insert(ns, "hyperlinks") == NS_ws12::LN_hyperlinks;
+ flag&=QName::tokenizer().insert(ns, "conditionalFormatting") == NS_ws12::LN_conditionalFormatting;
+ flag&=QName::tokenizer().insert(ns, "legacyDrawing") == NS_ws12::LN_legacyDrawing;
+ flag&=QName::tokenizer().insert(ns, "scenarios") == NS_ws12::LN_scenarios;
+ flag&=QName::tokenizer().insert(ns, "cellWatches") == NS_ws12::LN_cellWatches;
+ flag&=QName::tokenizer().insert(ns, "sheetProtection") == NS_ws12::LN_sheetProtection;
+ flag&=QName::tokenizer().insert(ns, "protectedRanges") == NS_ws12::LN_protectedRanges;
+ flag&=QName::tokenizer().insert(ns, "picture") == NS_ws12::LN_picture;
+ flag&=QName::tokenizer().insert(ns, "webPubItems") == NS_ws12::LN_webPubItems;
+ flag&=QName::tokenizer().insert(ns, "row") == NS_ws12::LN_row;
+ flag&=QName::tokenizer().insert(ns, "chain") == NS_ws12::LN_chain;
+ flag&=QName::tokenizer().insert(ns, "c") == NS_ws12::LN_c;
+ flag&=QName::tokenizer().insert(ns, "colInfo") == NS_ws12::LN_colInfo;
+ flag&=QName::tokenizer().insert(ns, "f") == NS_ws12::LN_f;
+ flag&=QName::tokenizer().insert(ns, "v") == NS_ws12::LN_v;
+ flag&=QName::tokenizer().insert(ns, "rst") == NS_ws12::LN_rst;
+ flag&=QName::tokenizer().insert(ns, "tabColor") == NS_ws12::LN_tabColor;
+ flag&=QName::tokenizer().insert(ns, "wsView") == NS_ws12::LN_wsView;
+ flag&=QName::tokenizer().insert(ns, "pane") == NS_ws12::LN_pane;
+ flag&=QName::tokenizer().insert(ns, "selection") == NS_ws12::LN_selection;
+ flag&=QName::tokenizer().insert(ns, "brk") == NS_ws12::LN_brk;
+ flag&=QName::tokenizer().insert(ns, "afdd") == NS_ws12::LN_afdd;
+ flag&=QName::tokenizer().insert(ns, "filter") == NS_ws12::LN_filter;
+ flag&=QName::tokenizer().insert(ns, "DateGroupItem") == NS_ws12::LN_DateGroupItem;
+ flag&=QName::tokenizer().insert(ns, "criteria") == NS_ws12::LN_criteria;
+ flag&=QName::tokenizer().insert(ns, "criteriaColor") == NS_ws12::LN_criteriaColor;
+ flag&=QName::tokenizer().insert(ns, "criteriaCellIcon") == NS_ws12::LN_criteriaCellIcon;
+ flag&=QName::tokenizer().insert(ns, "dataRefs") == NS_ws12::LN_dataRefs;
+ flag&=QName::tokenizer().insert(ns, "dataRef") == NS_ws12::LN_dataRef;
+ flag&=QName::tokenizer().insert(ns, "mergeCell") == NS_ws12::LN_mergeCell;
+ flag&=QName::tokenizer().insert(ns, "cellSmartTags") == NS_ws12::LN_cellSmartTags;
+ flag&=QName::tokenizer().insert(ns, "cellSmartTag") == NS_ws12::LN_cellSmartTag;
+ flag&=QName::tokenizer().insert(ns, "cellSmartTagPr") == NS_ws12::LN_cellSmartTagPr;
+ flag&=QName::tokenizer().insert(ns, "userShView") == NS_ws12::LN_userShView;
+ flag&=QName::tokenizer().insert(ns, "dVal") == NS_ws12::LN_dVal;
+ flag&=QName::tokenizer().insert(ns, "formula1") == NS_ws12::LN_formula1;
+ flag&=QName::tokenizer().insert(ns, "formula2") == NS_ws12::LN_formula2;
+ flag&=QName::tokenizer().insert(ns, "cfRule") == NS_ws12::LN_cfRule;
+ flag&=QName::tokenizer().insert(ns, "formula") == NS_ws12::LN_formula;
+ flag&=QName::tokenizer().insert(ns, "colorScale") == NS_ws12::LN_colorScale;
+ flag&=QName::tokenizer().insert(ns, "databar") == NS_ws12::LN_databar;
+ flag&=QName::tokenizer().insert(ns, "iconset") == NS_ws12::LN_iconset;
+ flag&=QName::tokenizer().insert(ns, "hyperlink") == NS_ws12::LN_hyperlink;
+ flag&=QName::tokenizer().insert(ns, "cfvo") == NS_ws12::LN_cfvo;
+ flag&=QName::tokenizer().insert(ns, "color") == NS_ws12::LN_color;
+ flag&=QName::tokenizer().insert(ns, "oddHeader") == NS_ws12::LN_oddHeader;
+ flag&=QName::tokenizer().insert(ns, "oddFooter") == NS_ws12::LN_oddFooter;
+ flag&=QName::tokenizer().insert(ns, "evenHeader") == NS_ws12::LN_evenHeader;
+ flag&=QName::tokenizer().insert(ns, "evenFooter") == NS_ws12::LN_evenFooter;
+ flag&=QName::tokenizer().insert(ns, "firstHeader") == NS_ws12::LN_firstHeader;
+ flag&=QName::tokenizer().insert(ns, "firstFooter") == NS_ws12::LN_firstFooter;
+ flag&=QName::tokenizer().insert(ns, "sortCondition") == NS_ws12::LN_sortCondition;
+ flag&=QName::tokenizer().insert(ns, "sct") == NS_ws12::LN_sct;
+ flag&=QName::tokenizer().insert(ns, "rangeProtection") == NS_ws12::LN_rangeProtection;
+ flag&=QName::tokenizer().insert(ns, "slc") == NS_ws12::LN_slc;
+ flag&=QName::tokenizer().insert(ns, "cellWatch") == NS_ws12::LN_cellWatch;
+ flag&=QName::tokenizer().insert(ns, "t") == NS_ws12::LN_t;
+ flag&=QName::tokenizer().insert(ns, "r") == NS_ws12::LN_r;
+ flag&=QName::tokenizer().insert(ns, "rt") == NS_ws12::LN_rt;
+ flag&=QName::tokenizer().insert(ns, "rubyBase") == NS_ws12::LN_rubyBase;
+ flag&=QName::tokenizer().insert(ns, "rPr") == NS_ws12::LN_rPr;
+ flag&=QName::tokenizer().insert(ns, "font") == NS_ws12::LN_font;
+ flag&=QName::tokenizer().insert(ns, "charset") == NS_ws12::LN_charset;
+ flag&=QName::tokenizer().insert(ns, "family") == NS_ws12::LN_family;
+ flag&=QName::tokenizer().insert(ns, "b") == NS_ws12::LN_b;
+ flag&=QName::tokenizer().insert(ns, "i") == NS_ws12::LN_i;
+ flag&=QName::tokenizer().insert(ns, "strike") == NS_ws12::LN_strike;
+ flag&=QName::tokenizer().insert(ns, "outline") == NS_ws12::LN_outline;
+ flag&=QName::tokenizer().insert(ns, "shadow") == NS_ws12::LN_shadow;
+ flag&=QName::tokenizer().insert(ns, "condense") == NS_ws12::LN_condense;
+ flag&=QName::tokenizer().insert(ns, "extend") == NS_ws12::LN_extend;
+ flag&=QName::tokenizer().insert(ns, "sz") == NS_ws12::LN_sz;
+ flag&=QName::tokenizer().insert(ns, "u") == NS_ws12::LN_u;
+ flag&=QName::tokenizer().insert(ns, "vertAlign") == NS_ws12::LN_vertAlign;
+ flag&=QName::tokenizer().insert(ns, "ruby") == NS_ws12::LN_ruby;
+ flag&=QName::tokenizer().insert(ns, "sstItem") == NS_ws12::LN_sstItem;
+ flag&=QName::tokenizer().insert(ns, "webPubItem") == NS_ws12::LN_webPubItem;
+ flag&=QName::tokenizer().insert(ns, "csViews") == NS_ws12::LN_csViews;
+ flag&=QName::tokenizer().insert(ns, "csView") == NS_ws12::LN_csView;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace ws12 failed", flag);}
+ void test_wddr12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/officeart/2005/8/wddr";
+ flag&=QName::tokenizer().insert(ns, "extent") == NS_wddr12::LN_extent;
+ flag&=QName::tokenizer().insert(ns, "effectExtent") == NS_wddr12::LN_effectExtent;
+ flag&=QName::tokenizer().insert(ns, "docPr") == NS_wddr12::LN_docPr;
+ flag&=QName::tokenizer().insert(ns, "graphic") == NS_wddr12::LN_graphic;
+ flag&=QName::tokenizer().insert(ns, "start") == NS_wddr12::LN_start;
+ flag&=QName::tokenizer().insert(ns, "lineTo") == NS_wddr12::LN_lineTo;
+ flag&=QName::tokenizer().insert(ns, "wrapPolygon") == NS_wddr12::LN_wrapPolygon;
+ flag&=QName::tokenizer().insert(ns, "wrapNone") == NS_wddr12::LN_wrapNone;
+ flag&=QName::tokenizer().insert(ns, "wrapSquare") == NS_wddr12::LN_wrapSquare;
+ flag&=QName::tokenizer().insert(ns, "wrapTight") == NS_wddr12::LN_wrapTight;
+ flag&=QName::tokenizer().insert(ns, "wrapThrough") == NS_wddr12::LN_wrapThrough;
+ flag&=QName::tokenizer().insert(ns, "wrapTopAndBottom") == NS_wddr12::LN_wrapTopAndBottom;
+ flag&=QName::tokenizer().insert(ns, "align") == NS_wddr12::LN_align;
+ flag&=QName::tokenizer().insert(ns, "offset") == NS_wddr12::LN_offset;
+ flag&=QName::tokenizer().insert(ns, "simplePos") == NS_wddr12::LN_simplePos;
+ flag&=QName::tokenizer().insert(ns, "positionH") == NS_wddr12::LN_positionH;
+ flag&=QName::tokenizer().insert(ns, "positionV") == NS_wddr12::LN_positionV;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace wddr12 failed", flag);}
+ void test_a12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/officeart/2005/8/oartml";
+ flag&=QName::tokenizer().insert(ns, "spcPct") == NS_a12::LN_spcPct;
+ flag&=QName::tokenizer().insert(ns, "spcPts") == NS_a12::LN_spcPts;
+ flag&=QName::tokenizer().insert(ns, "tab") == NS_a12::LN_tab;
+ flag&=QName::tokenizer().insert(ns, "lineSpc") == NS_a12::LN_lineSpc;
+ flag&=QName::tokenizer().insert(ns, "spcBef") == NS_a12::LN_spcBef;
+ flag&=QName::tokenizer().insert(ns, "spcAft") == NS_a12::LN_spcAft;
+ flag&=QName::tokenizer().insert(ns, "tabLst") == NS_a12::LN_tabLst;
+ flag&=QName::tokenizer().insert(ns, "defRPr") == NS_a12::LN_defRPr;
+ flag&=QName::tokenizer().insert(ns, "br") == NS_a12::LN_br;
+ flag&=QName::tokenizer().insert(ns, "field") == NS_a12::LN_field;
+ flag&=QName::tokenizer().insert(ns, "math") == NS_a12::LN_math;
+ flag&=QName::tokenizer().insert(ns, "t") == NS_a12::LN_t;
+ flag&=QName::tokenizer().insert(ns, "st") == NS_a12::LN_st;
+ flag&=QName::tokenizer().insert(ns, "end") == NS_a12::LN_end;
+ flag&=QName::tokenizer().insert(ns, "audioCd") == NS_a12::LN_audioCd;
+ flag&=QName::tokenizer().insert(ns, "audioFile") == NS_a12::LN_audioFile;
+ flag&=QName::tokenizer().insert(ns, "videoFile") == NS_a12::LN_videoFile;
+ flag&=QName::tokenizer().insert(ns, "dark1") == NS_a12::LN_dark1;
+ flag&=QName::tokenizer().insert(ns, "light1") == NS_a12::LN_light1;
+ flag&=QName::tokenizer().insert(ns, "dark2") == NS_a12::LN_dark2;
+ flag&=QName::tokenizer().insert(ns, "light2") == NS_a12::LN_light2;
+ flag&=QName::tokenizer().insert(ns, "accent1") == NS_a12::LN_accent1;
+ flag&=QName::tokenizer().insert(ns, "accent2") == NS_a12::LN_accent2;
+ flag&=QName::tokenizer().insert(ns, "accent3") == NS_a12::LN_accent3;
+ flag&=QName::tokenizer().insert(ns, "accent4") == NS_a12::LN_accent4;
+ flag&=QName::tokenizer().insert(ns, "accent5") == NS_a12::LN_accent5;
+ flag&=QName::tokenizer().insert(ns, "accent6") == NS_a12::LN_accent6;
+ flag&=QName::tokenizer().insert(ns, "hlink") == NS_a12::LN_hlink;
+ flag&=QName::tokenizer().insert(ns, "folHlink") == NS_a12::LN_folHlink;
+ flag&=QName::tokenizer().insert(ns, "custClr") == NS_a12::LN_custClr;
+ flag&=QName::tokenizer().insert(ns, "latin") == NS_a12::LN_latin;
+ flag&=QName::tokenizer().insert(ns, "highAnsi") == NS_a12::LN_highAnsi;
+ flag&=QName::tokenizer().insert(ns, "complexScript") == NS_a12::LN_complexScript;
+ flag&=QName::tokenizer().insert(ns, "eastAsian") == NS_a12::LN_eastAsian;
+ flag&=QName::tokenizer().insert(ns, "majorFont") == NS_a12::LN_majorFont;
+ flag&=QName::tokenizer().insert(ns, "minorFont") == NS_a12::LN_minorFont;
+ flag&=QName::tokenizer().insert(ns, "fillStyle") == NS_a12::LN_fillStyle;
+ flag&=QName::tokenizer().insert(ns, "line") == NS_a12::LN_line;
+ flag&=QName::tokenizer().insert(ns, "lineStyle") == NS_a12::LN_lineStyle;
+ flag&=QName::tokenizer().insert(ns, "scene3d") == NS_a12::LN_scene3d;
+ flag&=QName::tokenizer().insert(ns, "sp3d") == NS_a12::LN_sp3d;
+ flag&=QName::tokenizer().insert(ns, "effectStyle") == NS_a12::LN_effectStyle;
+ flag&=QName::tokenizer().insert(ns, "bgFillStyle") == NS_a12::LN_bgFillStyle;
+ flag&=QName::tokenizer().insert(ns, "fillStyleLst") == NS_a12::LN_fillStyleLst;
+ flag&=QName::tokenizer().insert(ns, "lineStyleLst") == NS_a12::LN_lineStyleLst;
+ flag&=QName::tokenizer().insert(ns, "effectStyleLst") == NS_a12::LN_effectStyleLst;
+ flag&=QName::tokenizer().insert(ns, "bgFillStyleLst") == NS_a12::LN_bgFillStyleLst;
+ flag&=QName::tokenizer().insert(ns, "clrScheme") == NS_a12::LN_clrScheme;
+ flag&=QName::tokenizer().insert(ns, "custClrLst") == NS_a12::LN_custClrLst;
+ flag&=QName::tokenizer().insert(ns, "fontScheme") == NS_a12::LN_fontScheme;
+ flag&=QName::tokenizer().insert(ns, "effectScheme") == NS_a12::LN_effectScheme;
+ flag&=QName::tokenizer().insert(ns, "sx") == NS_a12::LN_sx;
+ flag&=QName::tokenizer().insert(ns, "sy") == NS_a12::LN_sy;
+ flag&=QName::tokenizer().insert(ns, "off") == NS_a12::LN_off;
+ flag&=QName::tokenizer().insert(ns, "ext") == NS_a12::LN_ext;
+ flag&=QName::tokenizer().insert(ns, "chOff") == NS_a12::LN_chOff;
+ flag&=QName::tokenizer().insert(ns, "chExt") == NS_a12::LN_chExt;
+ flag&=QName::tokenizer().insert(ns, "tint") == NS_a12::LN_tint;
+ flag&=QName::tokenizer().insert(ns, "shade") == NS_a12::LN_shade;
+ flag&=QName::tokenizer().insert(ns, "comp") == NS_a12::LN_comp;
+ flag&=QName::tokenizer().insert(ns, "inv") == NS_a12::LN_inv;
+ flag&=QName::tokenizer().insert(ns, "gray") == NS_a12::LN_gray;
+ flag&=QName::tokenizer().insert(ns, "alpha") == NS_a12::LN_alpha;
+ flag&=QName::tokenizer().insert(ns, "alphaOff") == NS_a12::LN_alphaOff;
+ flag&=QName::tokenizer().insert(ns, "alphaMod") == NS_a12::LN_alphaMod;
+ flag&=QName::tokenizer().insert(ns, "hue") == NS_a12::LN_hue;
+ flag&=QName::tokenizer().insert(ns, "hueOff") == NS_a12::LN_hueOff;
+ flag&=QName::tokenizer().insert(ns, "hueMod") == NS_a12::LN_hueMod;
+ flag&=QName::tokenizer().insert(ns, "sat") == NS_a12::LN_sat;
+ flag&=QName::tokenizer().insert(ns, "satOff") == NS_a12::LN_satOff;
+ flag&=QName::tokenizer().insert(ns, "satMod") == NS_a12::LN_satMod;
+ flag&=QName::tokenizer().insert(ns, "lum") == NS_a12::LN_lum;
+ flag&=QName::tokenizer().insert(ns, "lumOff") == NS_a12::LN_lumOff;
+ flag&=QName::tokenizer().insert(ns, "lumMod") == NS_a12::LN_lumMod;
+ flag&=QName::tokenizer().insert(ns, "red") == NS_a12::LN_red;
+ flag&=QName::tokenizer().insert(ns, "redOff") == NS_a12::LN_redOff;
+ flag&=QName::tokenizer().insert(ns, "redMod") == NS_a12::LN_redMod;
+ flag&=QName::tokenizer().insert(ns, "green") == NS_a12::LN_green;
+ flag&=QName::tokenizer().insert(ns, "greenOff") == NS_a12::LN_greenOff;
+ flag&=QName::tokenizer().insert(ns, "greenMod") == NS_a12::LN_greenMod;
+ flag&=QName::tokenizer().insert(ns, "blue") == NS_a12::LN_blue;
+ flag&=QName::tokenizer().insert(ns, "blueOff") == NS_a12::LN_blueOff;
+ flag&=QName::tokenizer().insert(ns, "blueMod") == NS_a12::LN_blueMod;
+ flag&=QName::tokenizer().insert(ns, "scrgbClr") == NS_a12::LN_scrgbClr;
+ flag&=QName::tokenizer().insert(ns, "srgbClr") == NS_a12::LN_srgbClr;
+ flag&=QName::tokenizer().insert(ns, "hslClr") == NS_a12::LN_hslClr;
+ flag&=QName::tokenizer().insert(ns, "sysClr") == NS_a12::LN_sysClr;
+ flag&=QName::tokenizer().insert(ns, "schemeClr") == NS_a12::LN_schemeClr;
+ flag&=QName::tokenizer().insert(ns, "prstClr") == NS_a12::LN_prstClr;
+ flag&=QName::tokenizer().insert(ns, "spLock") == NS_a12::LN_spLock;
+ flag&=QName::tokenizer().insert(ns, "cxnSpLock") == NS_a12::LN_cxnSpLock;
+ flag&=QName::tokenizer().insert(ns, "stCxn") == NS_a12::LN_stCxn;
+ flag&=QName::tokenizer().insert(ns, "endCxn") == NS_a12::LN_endCxn;
+ flag&=QName::tokenizer().insert(ns, "gspLock") == NS_a12::LN_gspLock;
+ flag&=QName::tokenizer().insert(ns, "graphicFrameLock") == NS_a12::LN_graphicFrameLock;
+ flag&=QName::tokenizer().insert(ns, "bounds") == NS_a12::LN_bounds;
+ flag&=QName::tokenizer().insert(ns, "graphicData") == NS_a12::LN_graphicData;
+ flag&=QName::tokenizer().insert(ns, "graphic") == NS_a12::LN_graphic;
+ flag&=QName::tokenizer().insert(ns, "igx") == NS_a12::LN_igx;
+ flag&=QName::tokenizer().insert(ns, "chart") == NS_a12::LN_chart;
+ flag&=QName::tokenizer().insert(ns, "bldIgx") == NS_a12::LN_bldIgx;
+ flag&=QName::tokenizer().insert(ns, "bldChart") == NS_a12::LN_bldChart;
+ flag&=QName::tokenizer().insert(ns, "txBody") == NS_a12::LN_txBody;
+ flag&=QName::tokenizer().insert(ns, "xfrm") == NS_a12::LN_xfrm;
+ flag&=QName::tokenizer().insert(ns, "useSpRect") == NS_a12::LN_useSpRect;
+ flag&=QName::tokenizer().insert(ns, "anvPr") == NS_a12::LN_anvPr;
+ flag&=QName::tokenizer().insert(ns, "anvSpPr") == NS_a12::LN_anvSpPr;
+ flag&=QName::tokenizer().insert(ns, "nvSpPr") == NS_a12::LN_nvSpPr;
+ flag&=QName::tokenizer().insert(ns, "spPr") == NS_a12::LN_spPr;
+ flag&=QName::tokenizer().insert(ns, "txsp") == NS_a12::LN_txsp;
+ flag&=QName::tokenizer().insert(ns, "style") == NS_a12::LN_style;
+ flag&=QName::tokenizer().insert(ns, "anvCxnSpPr") == NS_a12::LN_anvCxnSpPr;
+ flag&=QName::tokenizer().insert(ns, "nvCxnSpPr") == NS_a12::LN_nvCxnSpPr;
+ flag&=QName::tokenizer().insert(ns, "anvGraphicFramePr") == NS_a12::LN_anvGraphicFramePr;
+ flag&=QName::tokenizer().insert(ns, "nvGraphicFramePr") == NS_a12::LN_nvGraphicFramePr;
+ flag&=QName::tokenizer().insert(ns, "anvGspPr") == NS_a12::LN_anvGspPr;
+ flag&=QName::tokenizer().insert(ns, "nvGspPr") == NS_a12::LN_nvGspPr;
+ flag&=QName::tokenizer().insert(ns, "gspPr") == NS_a12::LN_gspPr;
+ flag&=QName::tokenizer().insert(ns, "sp") == NS_a12::LN_sp;
+ flag&=QName::tokenizer().insert(ns, "cxnsp") == NS_a12::LN_cxnsp;
+ flag&=QName::tokenizer().insert(ns, "graphicFrame") == NS_a12::LN_graphicFrame;
+ flag&=QName::tokenizer().insert(ns, "gsp") == NS_a12::LN_gsp;
+ flag&=QName::tokenizer().insert(ns, "spid") == NS_a12::LN_spid;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_a12::LN_name;
+ flag&=QName::tokenizer().insert(ns, "descr") == NS_a12::LN_descr;
+ flag&=QName::tokenizer().insert(ns, "rot") == NS_a12::LN_rot;
+ flag&=QName::tokenizer().insert(ns, "camera") == NS_a12::LN_camera;
+ flag&=QName::tokenizer().insert(ns, "lightRig") == NS_a12::LN_lightRig;
+ flag&=QName::tokenizer().insert(ns, "backdrop") == NS_a12::LN_backdrop;
+ flag&=QName::tokenizer().insert(ns, "anchor") == NS_a12::LN_anchor;
+ flag&=QName::tokenizer().insert(ns, "normal") == NS_a12::LN_normal;
+ flag&=QName::tokenizer().insert(ns, "up") == NS_a12::LN_up;
+ flag&=QName::tokenizer().insert(ns, "bevelT") == NS_a12::LN_bevelT;
+ flag&=QName::tokenizer().insert(ns, "bevelB") == NS_a12::LN_bevelB;
+ flag&=QName::tokenizer().insert(ns, "extrusionClr") == NS_a12::LN_extrusionClr;
+ flag&=QName::tokenizer().insert(ns, "contourClr") == NS_a12::LN_contourClr;
+ flag&=QName::tokenizer().insert(ns, "flatTx") == NS_a12::LN_flatTx;
+ flag&=QName::tokenizer().insert(ns, "clrFrom") == NS_a12::LN_clrFrom;
+ flag&=QName::tokenizer().insert(ns, "clrTo") == NS_a12::LN_clrTo;
+ flag&=QName::tokenizer().insert(ns, "fillToRect") == NS_a12::LN_fillToRect;
+ flag&=QName::tokenizer().insert(ns, "gs") == NS_a12::LN_gs;
+ flag&=QName::tokenizer().insert(ns, "gsList") == NS_a12::LN_gsList;
+ flag&=QName::tokenizer().insert(ns, "lin") == NS_a12::LN_lin;
+ flag&=QName::tokenizer().insert(ns, "path") == NS_a12::LN_path;
+ flag&=QName::tokenizer().insert(ns, "tileRect") == NS_a12::LN_tileRect;
+ flag&=QName::tokenizer().insert(ns, "fillRect") == NS_a12::LN_fillRect;
+ flag&=QName::tokenizer().insert(ns, "alphaBiLevel") == NS_a12::LN_alphaBiLevel;
+ flag&=QName::tokenizer().insert(ns, "alphaCeiling") == NS_a12::LN_alphaCeiling;
+ flag&=QName::tokenizer().insert(ns, "alphaFloor") == NS_a12::LN_alphaFloor;
+ flag&=QName::tokenizer().insert(ns, "alphaInv") == NS_a12::LN_alphaInv;
+ flag&=QName::tokenizer().insert(ns, "alphaModFix") == NS_a12::LN_alphaModFix;
+ flag&=QName::tokenizer().insert(ns, "alphaRepl") == NS_a12::LN_alphaRepl;
+ flag&=QName::tokenizer().insert(ns, "biLevel") == NS_a12::LN_biLevel;
+ flag&=QName::tokenizer().insert(ns, "blur") == NS_a12::LN_blur;
+ flag&=QName::tokenizer().insert(ns, "clrBal") == NS_a12::LN_clrBal;
+ flag&=QName::tokenizer().insert(ns, "clrChange") == NS_a12::LN_clrChange;
+ flag&=QName::tokenizer().insert(ns, "clrRepl") == NS_a12::LN_clrRepl;
+ flag&=QName::tokenizer().insert(ns, "duotone") == NS_a12::LN_duotone;
+ flag&=QName::tokenizer().insert(ns, "fillOverlay") == NS_a12::LN_fillOverlay;
+ flag&=QName::tokenizer().insert(ns, "grayscl") == NS_a12::LN_grayscl;
+ flag&=QName::tokenizer().insert(ns, "hsl") == NS_a12::LN_hsl;
+ flag&=QName::tokenizer().insert(ns, "luminance") == NS_a12::LN_luminance;
+ flag&=QName::tokenizer().insert(ns, "sharpen") == NS_a12::LN_sharpen;
+ flag&=QName::tokenizer().insert(ns, "blip") == NS_a12::LN_blip;
+ flag&=QName::tokenizer().insert(ns, "srcRect") == NS_a12::LN_srcRect;
+ flag&=QName::tokenizer().insert(ns, "tile") == NS_a12::LN_tile;
+ flag&=QName::tokenizer().insert(ns, "stretch") == NS_a12::LN_stretch;
+ flag&=QName::tokenizer().insert(ns, "fgClr") == NS_a12::LN_fgClr;
+ flag&=QName::tokenizer().insert(ns, "bgClr") == NS_a12::LN_bgClr;
+ flag&=QName::tokenizer().insert(ns, "noFill") == NS_a12::LN_noFill;
+ flag&=QName::tokenizer().insert(ns, "solidFill") == NS_a12::LN_solidFill;
+ flag&=QName::tokenizer().insert(ns, "gradFill") == NS_a12::LN_gradFill;
+ flag&=QName::tokenizer().insert(ns, "blipFill") == NS_a12::LN_blipFill;
+ flag&=QName::tokenizer().insert(ns, "pattFill") == NS_a12::LN_pattFill;
+ flag&=QName::tokenizer().insert(ns, "grpFill") == NS_a12::LN_grpFill;
+ flag&=QName::tokenizer().insert(ns, "cont") == NS_a12::LN_cont;
+ flag&=QName::tokenizer().insert(ns, "effect") == NS_a12::LN_effect;
+ flag&=QName::tokenizer().insert(ns, "alphaOutset") == NS_a12::LN_alphaOutset;
+ flag&=QName::tokenizer().insert(ns, "blend") == NS_a12::LN_blend;
+ flag&=QName::tokenizer().insert(ns, "fill") == NS_a12::LN_fill;
+ flag&=QName::tokenizer().insert(ns, "glow") == NS_a12::LN_glow;
+ flag&=QName::tokenizer().insert(ns, "innerShdw") == NS_a12::LN_innerShdw;
+ flag&=QName::tokenizer().insert(ns, "outerShdw") == NS_a12::LN_outerShdw;
+ flag&=QName::tokenizer().insert(ns, "prstShdw") == NS_a12::LN_prstShdw;
+ flag&=QName::tokenizer().insert(ns, "reflection") == NS_a12::LN_reflection;
+ flag&=QName::tokenizer().insert(ns, "relOff") == NS_a12::LN_relOff;
+ flag&=QName::tokenizer().insert(ns, "sftEdg") == NS_a12::LN_sftEdg;
+ flag&=QName::tokenizer().insert(ns, "effectLst") == NS_a12::LN_effectLst;
+ flag&=QName::tokenizer().insert(ns, "effectDag") == NS_a12::LN_effectDag;
+ flag&=QName::tokenizer().insert(ns, "gd") == NS_a12::LN_gd;
+ flag&=QName::tokenizer().insert(ns, "pos") == NS_a12::LN_pos;
+ flag&=QName::tokenizer().insert(ns, "ahXY") == NS_a12::LN_ahXY;
+ flag&=QName::tokenizer().insert(ns, "ahPolar") == NS_a12::LN_ahPolar;
+ flag&=QName::tokenizer().insert(ns, "cxn") == NS_a12::LN_cxn;
+ flag&=QName::tokenizer().insert(ns, "rect") == NS_a12::LN_rect;
+ flag&=QName::tokenizer().insert(ns, "pt") == NS_a12::LN_pt;
+ flag&=QName::tokenizer().insert(ns, "close") == NS_a12::LN_close;
+ flag&=QName::tokenizer().insert(ns, "moveTo") == NS_a12::LN_moveTo;
+ flag&=QName::tokenizer().insert(ns, "lineTo") == NS_a12::LN_lineTo;
+ flag&=QName::tokenizer().insert(ns, "arcTo") == NS_a12::LN_arcTo;
+ flag&=QName::tokenizer().insert(ns, "quadBezTo") == NS_a12::LN_quadBezTo;
+ flag&=QName::tokenizer().insert(ns, "cubicBezTo") == NS_a12::LN_cubicBezTo;
+ flag&=QName::tokenizer().insert(ns, "avLst") == NS_a12::LN_avLst;
+ flag&=QName::tokenizer().insert(ns, "gdLst") == NS_a12::LN_gdLst;
+ flag&=QName::tokenizer().insert(ns, "ahLst") == NS_a12::LN_ahLst;
+ flag&=QName::tokenizer().insert(ns, "cxnLst") == NS_a12::LN_cxnLst;
+ flag&=QName::tokenizer().insert(ns, "rectLst") == NS_a12::LN_rectLst;
+ flag&=QName::tokenizer().insert(ns, "pathLst") == NS_a12::LN_pathLst;
+ flag&=QName::tokenizer().insert(ns, "custGeom") == NS_a12::LN_custGeom;
+ flag&=QName::tokenizer().insert(ns, "prstGeom") == NS_a12::LN_prstGeom;
+ flag&=QName::tokenizer().insert(ns, "round") == NS_a12::LN_round;
+ flag&=QName::tokenizer().insert(ns, "bevel") == NS_a12::LN_bevel;
+ flag&=QName::tokenizer().insert(ns, "miter") == NS_a12::LN_miter;
+ flag&=QName::tokenizer().insert(ns, "prstDash") == NS_a12::LN_prstDash;
+ flag&=QName::tokenizer().insert(ns, "custDash") == NS_a12::LN_custDash;
+ flag&=QName::tokenizer().insert(ns, "headEnd") == NS_a12::LN_headEnd;
+ flag&=QName::tokenizer().insert(ns, "tailEnd") == NS_a12::LN_tailEnd;
+ flag&=QName::tokenizer().insert(ns, "ds") == NS_a12::LN_ds;
+ flag&=QName::tokenizer().insert(ns, "noLine") == NS_a12::LN_noLine;
+ flag&=QName::tokenizer().insert(ns, "solidLine") == NS_a12::LN_solidLine;
+ flag&=QName::tokenizer().insert(ns, "gradLine") == NS_a12::LN_gradLine;
+ flag&=QName::tokenizer().insert(ns, "pattLine") == NS_a12::LN_pattLine;
+ flag&=QName::tokenizer().insert(ns, "font") == NS_a12::LN_font;
+ flag&=QName::tokenizer().insert(ns, "txbPr") == NS_a12::LN_txbPr;
+ flag&=QName::tokenizer().insert(ns, "txLstStyle") == NS_a12::LN_txLstStyle;
+ flag&=QName::tokenizer().insert(ns, "spDef") == NS_a12::LN_spDef;
+ flag&=QName::tokenizer().insert(ns, "lnDef") == NS_a12::LN_lnDef;
+ flag&=QName::tokenizer().insert(ns, "txbxDef") == NS_a12::LN_txbxDef;
+ flag&=QName::tokenizer().insert(ns, "masterClrMapping") == NS_a12::LN_masterClrMapping;
+ flag&=QName::tokenizer().insert(ns, "overrideClrMapping") == NS_a12::LN_overrideClrMapping;
+ flag&=QName::tokenizer().insert(ns, "baseStyles") == NS_a12::LN_baseStyles;
+ flag&=QName::tokenizer().insert(ns, "objectDefaults") == NS_a12::LN_objectDefaults;
+ flag&=QName::tokenizer().insert(ns, "masterClrScheme") == NS_a12::LN_masterClrScheme;
+ flag&=QName::tokenizer().insert(ns, "overrideClrScheme") == NS_a12::LN_overrideClrScheme;
+ flag&=QName::tokenizer().insert(ns, "masterFontScheme") == NS_a12::LN_masterFontScheme;
+ flag&=QName::tokenizer().insert(ns, "overrideFontScheme") == NS_a12::LN_overrideFontScheme;
+ flag&=QName::tokenizer().insert(ns, "masterStyleMatrix") == NS_a12::LN_masterStyleMatrix;
+ flag&=QName::tokenizer().insert(ns, "overrideStyleMatrix") == NS_a12::LN_overrideStyleMatrix;
+ flag&=QName::tokenizer().insert(ns, "clrMap") == NS_a12::LN_clrMap;
+ flag&=QName::tokenizer().insert(ns, "lnL") == NS_a12::LN_lnL;
+ flag&=QName::tokenizer().insert(ns, "lnR") == NS_a12::LN_lnR;
+ flag&=QName::tokenizer().insert(ns, "lnT") == NS_a12::LN_lnT;
+ flag&=QName::tokenizer().insert(ns, "lnB") == NS_a12::LN_lnB;
+ flag&=QName::tokenizer().insert(ns, "lnTlToBr") == NS_a12::LN_lnTlToBr;
+ flag&=QName::tokenizer().insert(ns, "lnBlToTr") == NS_a12::LN_lnBlToTr;
+ flag&=QName::tokenizer().insert(ns, "cell3D") == NS_a12::LN_cell3D;
+ flag&=QName::tokenizer().insert(ns, "gridCol") == NS_a12::LN_gridCol;
+ flag&=QName::tokenizer().insert(ns, "txbx") == NS_a12::LN_txbx;
+ flag&=QName::tokenizer().insert(ns, "tcPr") == NS_a12::LN_tcPr;
+ flag&=QName::tokenizer().insert(ns, "tc") == NS_a12::LN_tc;
+ flag&=QName::tokenizer().insert(ns, "tableStyle") == NS_a12::LN_tableStyle;
+ flag&=QName::tokenizer().insert(ns, "tableStyleId") == NS_a12::LN_tableStyleId;
+ flag&=QName::tokenizer().insert(ns, "tblPr") == NS_a12::LN_tblPr;
+ flag&=QName::tokenizer().insert(ns, "tblGrid") == NS_a12::LN_tblGrid;
+ flag&=QName::tokenizer().insert(ns, "tr") == NS_a12::LN_tr;
+ flag&=QName::tokenizer().insert(ns, "unthemedFill") == NS_a12::LN_unthemedFill;
+ flag&=QName::tokenizer().insert(ns, "themedFill") == NS_a12::LN_themedFill;
+ flag&=QName::tokenizer().insert(ns, "ln") == NS_a12::LN_ln;
+ flag&=QName::tokenizer().insert(ns, "unthemedLine") == NS_a12::LN_unthemedLine;
+ flag&=QName::tokenizer().insert(ns, "themedLine") == NS_a12::LN_themedLine;
+ flag&=QName::tokenizer().insert(ns, "unthemedFonts") == NS_a12::LN_unthemedFonts;
+ flag&=QName::tokenizer().insert(ns, "themedFonts") == NS_a12::LN_themedFonts;
+ flag&=QName::tokenizer().insert(ns, "fonts") == NS_a12::LN_fonts;
+ flag&=QName::tokenizer().insert(ns, "b") == NS_a12::LN_b;
+ flag&=QName::tokenizer().insert(ns, "i") == NS_a12::LN_i;
+ flag&=QName::tokenizer().insert(ns, "left") == NS_a12::LN_left;
+ flag&=QName::tokenizer().insert(ns, "right") == NS_a12::LN_right;
+ flag&=QName::tokenizer().insert(ns, "top") == NS_a12::LN_top;
+ flag&=QName::tokenizer().insert(ns, "bottom") == NS_a12::LN_bottom;
+ flag&=QName::tokenizer().insert(ns, "insideH") == NS_a12::LN_insideH;
+ flag&=QName::tokenizer().insert(ns, "insideV") == NS_a12::LN_insideV;
+ flag&=QName::tokenizer().insert(ns, "tl2br") == NS_a12::LN_tl2br;
+ flag&=QName::tokenizer().insert(ns, "tr2bl") == NS_a12::LN_tr2bl;
+ flag&=QName::tokenizer().insert(ns, "tcBorders") == NS_a12::LN_tcBorders;
+ flag&=QName::tokenizer().insert(ns, "rPr") == NS_a12::LN_rPr;
+ flag&=QName::tokenizer().insert(ns, "tableBg") == NS_a12::LN_tableBg;
+ flag&=QName::tokenizer().insert(ns, "wholeTable") == NS_a12::LN_wholeTable;
+ flag&=QName::tokenizer().insert(ns, "band1Horz") == NS_a12::LN_band1Horz;
+ flag&=QName::tokenizer().insert(ns, "band2Horz") == NS_a12::LN_band2Horz;
+ flag&=QName::tokenizer().insert(ns, "band1Vert") == NS_a12::LN_band1Vert;
+ flag&=QName::tokenizer().insert(ns, "band2Vert") == NS_a12::LN_band2Vert;
+ flag&=QName::tokenizer().insert(ns, "lastCol") == NS_a12::LN_lastCol;
+ flag&=QName::tokenizer().insert(ns, "firstCol") == NS_a12::LN_firstCol;
+ flag&=QName::tokenizer().insert(ns, "lastRow") == NS_a12::LN_lastRow;
+ flag&=QName::tokenizer().insert(ns, "seCell") == NS_a12::LN_seCell;
+ flag&=QName::tokenizer().insert(ns, "swCell") == NS_a12::LN_swCell;
+ flag&=QName::tokenizer().insert(ns, "firstRow") == NS_a12::LN_firstRow;
+ flag&=QName::tokenizer().insert(ns, "neCell") == NS_a12::LN_neCell;
+ flag&=QName::tokenizer().insert(ns, "nwCell") == NS_a12::LN_nwCell;
+ flag&=QName::tokenizer().insert(ns, "topBaseline") == NS_a12::LN_topBaseline;
+ flag&=QName::tokenizer().insert(ns, "bottomBaseline") == NS_a12::LN_bottomBaseline;
+ flag&=QName::tokenizer().insert(ns, "pPr") == NS_a12::LN_pPr;
+ flag&=QName::tokenizer().insert(ns, "endParaRPr") == NS_a12::LN_endParaRPr;
+ flag&=QName::tokenizer().insert(ns, "defPPr") == NS_a12::LN_defPPr;
+ flag&=QName::tokenizer().insert(ns, "outline1pPr") == NS_a12::LN_outline1pPr;
+ flag&=QName::tokenizer().insert(ns, "outline2pPr") == NS_a12::LN_outline2pPr;
+ flag&=QName::tokenizer().insert(ns, "lvl1pPr") == NS_a12::LN_lvl1pPr;
+ flag&=QName::tokenizer().insert(ns, "lvl2pPr") == NS_a12::LN_lvl2pPr;
+ flag&=QName::tokenizer().insert(ns, "lvl3pPr") == NS_a12::LN_lvl3pPr;
+ flag&=QName::tokenizer().insert(ns, "lvl4pPr") == NS_a12::LN_lvl4pPr;
+ flag&=QName::tokenizer().insert(ns, "lvl5pPr") == NS_a12::LN_lvl5pPr;
+ flag&=QName::tokenizer().insert(ns, "lvl6pPr") == NS_a12::LN_lvl6pPr;
+ flag&=QName::tokenizer().insert(ns, "lvl7pPr") == NS_a12::LN_lvl7pPr;
+ flag&=QName::tokenizer().insert(ns, "lvl8pPr") == NS_a12::LN_lvl8pPr;
+ flag&=QName::tokenizer().insert(ns, "lvl9pPr") == NS_a12::LN_lvl9pPr;
+ flag&=QName::tokenizer().insert(ns, "noAutofit") == NS_a12::LN_noAutofit;
+ flag&=QName::tokenizer().insert(ns, "normAutofit") == NS_a12::LN_normAutofit;
+ flag&=QName::tokenizer().insert(ns, "shapeAutofit") == NS_a12::LN_shapeAutofit;
+ flag&=QName::tokenizer().insert(ns, "textWarp") == NS_a12::LN_textWarp;
+ flag&=QName::tokenizer().insert(ns, "prot") == NS_a12::LN_prot;
+ flag&=QName::tokenizer().insert(ns, "bodyPr") == NS_a12::LN_bodyPr;
+ flag&=QName::tokenizer().insert(ns, "lstStyle") == NS_a12::LN_lstStyle;
+ flag&=QName::tokenizer().insert(ns, "p") == NS_a12::LN_p;
+ flag&=QName::tokenizer().insert(ns, "buColorTx") == NS_a12::LN_buColorTx;
+ flag&=QName::tokenizer().insert(ns, "buColor") == NS_a12::LN_buColor;
+ flag&=QName::tokenizer().insert(ns, "buSzTx") == NS_a12::LN_buSzTx;
+ flag&=QName::tokenizer().insert(ns, "buSzPct") == NS_a12::LN_buSzPct;
+ flag&=QName::tokenizer().insert(ns, "buSzPts") == NS_a12::LN_buSzPts;
+ flag&=QName::tokenizer().insert(ns, "buFontTx") == NS_a12::LN_buFontTx;
+ flag&=QName::tokenizer().insert(ns, "buFont") == NS_a12::LN_buFont;
+ flag&=QName::tokenizer().insert(ns, "buBlip") == NS_a12::LN_buBlip;
+ flag&=QName::tokenizer().insert(ns, "noBullet") == NS_a12::LN_noBullet;
+ flag&=QName::tokenizer().insert(ns, "autonumberBullet") == NS_a12::LN_autonumberBullet;
+ flag&=QName::tokenizer().insert(ns, "charBullet") == NS_a12::LN_charBullet;
+ flag&=QName::tokenizer().insert(ns, "blipBullet") == NS_a12::LN_blipBullet;
+ flag&=QName::tokenizer().insert(ns, "shadow") == NS_a12::LN_shadow;
+ flag&=QName::tokenizer().insert(ns, "outline") == NS_a12::LN_outline;
+ flag&=QName::tokenizer().insert(ns, "engrave") == NS_a12::LN_engrave;
+ flag&=QName::tokenizer().insert(ns, "emboss") == NS_a12::LN_emboss;
+ flag&=QName::tokenizer().insert(ns, "highlight") == NS_a12::LN_highlight;
+ flag&=QName::tokenizer().insert(ns, "formatting") == NS_a12::LN_formatting;
+ flag&=QName::tokenizer().insert(ns, "u") == NS_a12::LN_u;
+ flag&=QName::tokenizer().insert(ns, "ascii") == NS_a12::LN_ascii;
+ flag&=QName::tokenizer().insert(ns, "ea") == NS_a12::LN_ea;
+ flag&=QName::tokenizer().insert(ns, "cs") == NS_a12::LN_cs;
+ flag&=QName::tokenizer().insert(ns, "hAnsi") == NS_a12::LN_hAnsi;
+ flag&=QName::tokenizer().insert(ns, "sym") == NS_a12::LN_sym;
+ flag&=QName::tokenizer().insert(ns, "link") == NS_a12::LN_link;
+ flag&=QName::tokenizer().insert(ns, "acc") == NS_a12::LN_acc;
+ flag&=QName::tokenizer().insert(ns, "bar") == NS_a12::LN_bar;
+ flag&=QName::tokenizer().insert(ns, "box") == NS_a12::LN_box;
+ flag&=QName::tokenizer().insert(ns, "d") == NS_a12::LN_d;
+ flag&=QName::tokenizer().insert(ns, "eqArray") == NS_a12::LN_eqArray;
+ flag&=QName::tokenizer().insert(ns, "f") == NS_a12::LN_f;
+ flag&=QName::tokenizer().insert(ns, "func") == NS_a12::LN_func;
+ flag&=QName::tokenizer().insert(ns, "groupChr") == NS_a12::LN_groupChr;
+ flag&=QName::tokenizer().insert(ns, "lLow") == NS_a12::LN_lLow;
+ flag&=QName::tokenizer().insert(ns, "lUp") == NS_a12::LN_lUp;
+ flag&=QName::tokenizer().insert(ns, "m") == NS_a12::LN_m;
+ flag&=QName::tokenizer().insert(ns, "nary") == NS_a12::LN_nary;
+ flag&=QName::tokenizer().insert(ns, "phant") == NS_a12::LN_phant;
+ flag&=QName::tokenizer().insert(ns, "rad") == NS_a12::LN_rad;
+ flag&=QName::tokenizer().insert(ns, "sPre") == NS_a12::LN_sPre;
+ flag&=QName::tokenizer().insert(ns, "sSub") == NS_a12::LN_sSub;
+ flag&=QName::tokenizer().insert(ns, "sSubSup") == NS_a12::LN_sSubSup;
+ flag&=QName::tokenizer().insert(ns, "sSup") == NS_a12::LN_sSup;
+ flag&=QName::tokenizer().insert(ns, "r") == NS_a12::LN_r;
+ flag&=QName::tokenizer().insert(ns, "chr") == NS_a12::LN_chr;
+ flag&=QName::tokenizer().insert(ns, "accPr") == NS_a12::LN_accPr;
+ flag&=QName::tokenizer().insert(ns, "e") == NS_a12::LN_e;
+ flag&=QName::tokenizer().insert(ns, "barPr") == NS_a12::LN_barPr;
+ flag&=QName::tokenizer().insert(ns, "begChr") == NS_a12::LN_begChr;
+ flag&=QName::tokenizer().insert(ns, "sepChr") == NS_a12::LN_sepChr;
+ flag&=QName::tokenizer().insert(ns, "endChr") == NS_a12::LN_endChr;
+ flag&=QName::tokenizer().insert(ns, "grow") == NS_a12::LN_grow;
+ flag&=QName::tokenizer().insert(ns, "shp") == NS_a12::LN_shp;
+ flag&=QName::tokenizer().insert(ns, "dPr") == NS_a12::LN_dPr;
+ flag&=QName::tokenizer().insert(ns, "baseJc") == NS_a12::LN_baseJc;
+ flag&=QName::tokenizer().insert(ns, "maxDist") == NS_a12::LN_maxDist;
+ flag&=QName::tokenizer().insert(ns, "objDist") == NS_a12::LN_objDist;
+ flag&=QName::tokenizer().insert(ns, "eqArrPr") == NS_a12::LN_eqArrPr;
+ flag&=QName::tokenizer().insert(ns, "type") == NS_a12::LN_type;
+ flag&=QName::tokenizer().insert(ns, "numJc") == NS_a12::LN_numJc;
+ flag&=QName::tokenizer().insert(ns, "denJc") == NS_a12::LN_denJc;
+ flag&=QName::tokenizer().insert(ns, "fPr") == NS_a12::LN_fPr;
+ flag&=QName::tokenizer().insert(ns, "num") == NS_a12::LN_num;
+ flag&=QName::tokenizer().insert(ns, "den") == NS_a12::LN_den;
+ flag&=QName::tokenizer().insert(ns, "fName") == NS_a12::LN_fName;
+ flag&=QName::tokenizer().insert(ns, "groupChrPr") == NS_a12::LN_groupChrPr;
+ flag&=QName::tokenizer().insert(ns, "lim") == NS_a12::LN_lim;
+ flag&=QName::tokenizer().insert(ns, "count") == NS_a12::LN_count;
+ flag&=QName::tokenizer().insert(ns, "mcJc") == NS_a12::LN_mcJc;
+ flag&=QName::tokenizer().insert(ns, "mcPr") == NS_a12::LN_mcPr;
+ flag&=QName::tokenizer().insert(ns, "mc") == NS_a12::LN_mc;
+ flag&=QName::tokenizer().insert(ns, "plcHide") == NS_a12::LN_plcHide;
+ flag&=QName::tokenizer().insert(ns, "mcs") == NS_a12::LN_mcs;
+ flag&=QName::tokenizer().insert(ns, "mrJc") == NS_a12::LN_mrJc;
+ flag&=QName::tokenizer().insert(ns, "mrPr") == NS_a12::LN_mrPr;
+ flag&=QName::tokenizer().insert(ns, "mPr") == NS_a12::LN_mPr;
+ flag&=QName::tokenizer().insert(ns, "mr") == NS_a12::LN_mr;
+ flag&=QName::tokenizer().insert(ns, "limLoc") == NS_a12::LN_limLoc;
+ flag&=QName::tokenizer().insert(ns, "subHide") == NS_a12::LN_subHide;
+ flag&=QName::tokenizer().insert(ns, "supHide") == NS_a12::LN_supHide;
+ flag&=QName::tokenizer().insert(ns, "naryPr") == NS_a12::LN_naryPr;
+ flag&=QName::tokenizer().insert(ns, "sub") == NS_a12::LN_sub;
+ flag&=QName::tokenizer().insert(ns, "sup") == NS_a12::LN_sup;
+ flag&=QName::tokenizer().insert(ns, "width") == NS_a12::LN_width;
+ flag&=QName::tokenizer().insert(ns, "asc") == NS_a12::LN_asc;
+ flag&=QName::tokenizer().insert(ns, "desc") == NS_a12::LN_desc;
+ flag&=QName::tokenizer().insert(ns, "phantPr") == NS_a12::LN_phantPr;
+ flag&=QName::tokenizer().insert(ns, "degHide") == NS_a12::LN_degHide;
+ flag&=QName::tokenizer().insert(ns, "radPr") == NS_a12::LN_radPr;
+ flag&=QName::tokenizer().insert(ns, "deg") == NS_a12::LN_deg;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace a12 failed", flag);}
+ void test_svg(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0";
+ flag&=QName::tokenizer().insert(ns, "path") == NS_svg::LN_path;
+ flag&=QName::tokenizer().insert(ns, "origin") == NS_svg::LN_origin;
+ flag&=QName::tokenizer().insert(ns, "type") == NS_svg::LN_type;
+ flag&=QName::tokenizer().insert(ns, "font-family") == NS_svg::LN_font_family;
+ flag&=QName::tokenizer().insert(ns, "font-style") == NS_svg::LN_font_style;
+ flag&=QName::tokenizer().insert(ns, "font-variant") == NS_svg::LN_font_variant;
+ flag&=QName::tokenizer().insert(ns, "font-weight") == NS_svg::LN_font_weight;
+ flag&=QName::tokenizer().insert(ns, "font-stretch") == NS_svg::LN_font_stretch;
+ flag&=QName::tokenizer().insert(ns, "font-size") == NS_svg::LN_font_size;
+ flag&=QName::tokenizer().insert(ns, "unicode-range") == NS_svg::LN_unicode_range;
+ flag&=QName::tokenizer().insert(ns, "units-per-em") == NS_svg::LN_units_per_em;
+ flag&=QName::tokenizer().insert(ns, "panose-1") == NS_svg::LN_panose_1;
+ flag&=QName::tokenizer().insert(ns, "stemv") == NS_svg::LN_stemv;
+ flag&=QName::tokenizer().insert(ns, "stemh") == NS_svg::LN_stemh;
+ flag&=QName::tokenizer().insert(ns, "slope") == NS_svg::LN_slope;
+ flag&=QName::tokenizer().insert(ns, "cap-height") == NS_svg::LN_cap_height;
+ flag&=QName::tokenizer().insert(ns, "x-height") == NS_svg::LN_x_height;
+ flag&=QName::tokenizer().insert(ns, "accent-height") == NS_svg::LN_accent_height;
+ flag&=QName::tokenizer().insert(ns, "ascent") == NS_svg::LN_ascent;
+ flag&=QName::tokenizer().insert(ns, "descent") == NS_svg::LN_descent;
+ flag&=QName::tokenizer().insert(ns, "widths") == NS_svg::LN_widths;
+ flag&=QName::tokenizer().insert(ns, "bbox") == NS_svg::LN_bbox;
+ flag&=QName::tokenizer().insert(ns, "ideographic") == NS_svg::LN_ideographic;
+ flag&=QName::tokenizer().insert(ns, "alphabetic") == NS_svg::LN_alphabetic;
+ flag&=QName::tokenizer().insert(ns, "mathematical") == NS_svg::LN_mathematical;
+ flag&=QName::tokenizer().insert(ns, "hanging") == NS_svg::LN_hanging;
+ flag&=QName::tokenizer().insert(ns, "v-ideographic") == NS_svg::LN_v_ideographic;
+ flag&=QName::tokenizer().insert(ns, "v-alphabetic") == NS_svg::LN_v_alphabetic;
+ flag&=QName::tokenizer().insert(ns, "v-mathematical") == NS_svg::LN_v_mathematical;
+ flag&=QName::tokenizer().insert(ns, "v-hanging") == NS_svg::LN_v_hanging;
+ flag&=QName::tokenizer().insert(ns, "underline-position") == NS_svg::LN_underline_position;
+ flag&=QName::tokenizer().insert(ns, "underline-thickness") == NS_svg::LN_underline_thickness;
+ flag&=QName::tokenizer().insert(ns, "strikethrough-position") == NS_svg::LN_strikethrough_position;
+ flag&=QName::tokenizer().insert(ns, "strikethrough-thickness") == NS_svg::LN_strikethrough_thickness;
+ flag&=QName::tokenizer().insert(ns, "overline-position") == NS_svg::LN_overline_position;
+ flag&=QName::tokenizer().insert(ns, "overline-thickness") == NS_svg::LN_overline_thickness;
+ flag&=QName::tokenizer().insert(ns, "font-face-src") == NS_svg::LN_font_face_src;
+ flag&=QName::tokenizer().insert(ns, "font-face-uri") == NS_svg::LN_font_face_uri;
+ flag&=QName::tokenizer().insert(ns, "font-face-format") == NS_svg::LN_font_face_format;
+ flag&=QName::tokenizer().insert(ns, "string") == NS_svg::LN_string;
+ flag&=QName::tokenizer().insert(ns, "font-face-name") == NS_svg::LN_font_face_name;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_svg::LN_name;
+ flag&=QName::tokenizer().insert(ns, "definition-src") == NS_svg::LN_definition_src;
+ flag&=QName::tokenizer().insert(ns, "linearGradient") == NS_svg::LN_linearGradient;
+ flag&=QName::tokenizer().insert(ns, "radialGradient") == NS_svg::LN_radialGradient;
+ flag&=QName::tokenizer().insert(ns, "fx") == NS_svg::LN_fx;
+ flag&=QName::tokenizer().insert(ns, "fy") == NS_svg::LN_fy;
+ flag&=QName::tokenizer().insert(ns, "stop") == NS_svg::LN_stop;
+ flag&=QName::tokenizer().insert(ns, "offset") == NS_svg::LN_offset;
+ flag&=QName::tokenizer().insert(ns, "stop-color") == NS_svg::LN_stop_color;
+ flag&=QName::tokenizer().insert(ns, "stop-opacity") == NS_svg::LN_stop_opacity;
+ flag&=QName::tokenizer().insert(ns, "gradientUnits") == NS_svg::LN_gradientUnits;
+ flag&=QName::tokenizer().insert(ns, "gradientTransform") == NS_svg::LN_gradientTransform;
+ flag&=QName::tokenizer().insert(ns, "spreadMethod") == NS_svg::LN_spreadMethod;
+ flag&=QName::tokenizer().insert(ns, "stroke-width") == NS_svg::LN_stroke_width;
+ flag&=QName::tokenizer().insert(ns, "stroke-color") == NS_svg::LN_stroke_color;
+ flag&=QName::tokenizer().insert(ns, "stroke-opacity") == NS_svg::LN_stroke_opacity;
+ flag&=QName::tokenizer().insert(ns, "fill-rule") == NS_svg::LN_fill_rule;
+ flag&=QName::tokenizer().insert(ns, "x1") == NS_svg::LN_x1;
+ flag&=QName::tokenizer().insert(ns, "y1") == NS_svg::LN_y1;
+ flag&=QName::tokenizer().insert(ns, "x2") == NS_svg::LN_x2;
+ flag&=QName::tokenizer().insert(ns, "y2") == NS_svg::LN_y2;
+ flag&=QName::tokenizer().insert(ns, "d") == NS_svg::LN_d;
+ flag&=QName::tokenizer().insert(ns, "cx") == NS_svg::LN_cx;
+ flag&=QName::tokenizer().insert(ns, "cy") == NS_svg::LN_cy;
+ flag&=QName::tokenizer().insert(ns, "r") == NS_svg::LN_r;
+ flag&=QName::tokenizer().insert(ns, "rx") == NS_svg::LN_rx;
+ flag&=QName::tokenizer().insert(ns, "ry") == NS_svg::LN_ry;
+ flag&=QName::tokenizer().insert(ns, "y") == NS_svg::LN_y;
+ flag&=QName::tokenizer().insert(ns, "x") == NS_svg::LN_x;
+ flag&=QName::tokenizer().insert(ns, "width") == NS_svg::LN_width;
+ flag&=QName::tokenizer().insert(ns, "height") == NS_svg::LN_height;
+ flag&=QName::tokenizer().insert(ns, "viewBox") == NS_svg::LN_viewBox;
+ flag&=QName::tokenizer().insert(ns, "desc") == NS_svg::LN_desc;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace svg failed", flag);}
+ void test_on12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/onenote/2004/import";
+ flag&=QName::tokenizer().insert(ns, "Import") == NS_on12::LN_Import;
+ flag&=QName::tokenizer().insert(ns, "EnsurePage") == NS_on12::LN_EnsurePage;
+ flag&=QName::tokenizer().insert(ns, "PlaceObjects") == NS_on12::LN_PlaceObjects;
+ flag&=QName::tokenizer().insert(ns, "Object") == NS_on12::LN_Object;
+ flag&=QName::tokenizer().insert(ns, "Delete") == NS_on12::LN_Delete;
+ flag&=QName::tokenizer().insert(ns, "Position") == NS_on12::LN_Position;
+ flag&=QName::tokenizer().insert(ns, "Image") == NS_on12::LN_Image;
+ flag&=QName::tokenizer().insert(ns, "Ink") == NS_on12::LN_Ink;
+ flag&=QName::tokenizer().insert(ns, "Outline") == NS_on12::LN_Outline;
+ flag&=QName::tokenizer().insert(ns, "Html") == NS_on12::LN_Html;
+ flag&=QName::tokenizer().insert(ns, "File") == NS_on12::LN_File;
+ flag&=QName::tokenizer().insert(ns, "Data") == NS_on12::LN_Data;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace on12 failed", flag);}
+ void test_form(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:form:1.0";
+ flag&=QName::tokenizer().insert(ns, "detail-fields") == NS_form::LN_detail_fields;
+ flag&=QName::tokenizer().insert(ns, "escape-processing") == NS_form::LN_escape_processing;
+ flag&=QName::tokenizer().insert(ns, "filter") == NS_form::LN_filter;
+ flag&=QName::tokenizer().insert(ns, "ignore-result") == NS_form::LN_ignore_result;
+ flag&=QName::tokenizer().insert(ns, "navigation-mode") == NS_form::LN_navigation_mode;
+ flag&=QName::tokenizer().insert(ns, "order") == NS_form::LN_order;
+ flag&=QName::tokenizer().insert(ns, "tab-cycle") == NS_form::LN_tab_cycle;
+ flag&=QName::tokenizer().insert(ns, "connection-resource") == NS_form::LN_connection_resource;
+ flag&=QName::tokenizer().insert(ns, "text") == NS_form::LN_text;
+ flag&=QName::tokenizer().insert(ns, "textarea") == NS_form::LN_textarea;
+ flag&=QName::tokenizer().insert(ns, "password") == NS_form::LN_password;
+ flag&=QName::tokenizer().insert(ns, "echo-char") == NS_form::LN_echo_char;
+ flag&=QName::tokenizer().insert(ns, "file") == NS_form::LN_file;
+ flag&=QName::tokenizer().insert(ns, "formatted-text") == NS_form::LN_formatted_text;
+ flag&=QName::tokenizer().insert(ns, "max-value") == NS_form::LN_max_value;
+ flag&=QName::tokenizer().insert(ns, "min-value") == NS_form::LN_min_value;
+ flag&=QName::tokenizer().insert(ns, "validation") == NS_form::LN_validation;
+ flag&=QName::tokenizer().insert(ns, "number") == NS_form::LN_number;
+ flag&=QName::tokenizer().insert(ns, "value") == NS_form::LN_value;
+ flag&=QName::tokenizer().insert(ns, "current-value") == NS_form::LN_current_value;
+ flag&=QName::tokenizer().insert(ns, "date") == NS_form::LN_date;
+ flag&=QName::tokenizer().insert(ns, "time") == NS_form::LN_time;
+ flag&=QName::tokenizer().insert(ns, "fixed-text") == NS_form::LN_fixed_text;
+ flag&=QName::tokenizer().insert(ns, "multi-line") == NS_form::LN_multi_line;
+ flag&=QName::tokenizer().insert(ns, "combobox") == NS_form::LN_combobox;
+ flag&=QName::tokenizer().insert(ns, "auto-complete") == NS_form::LN_auto_complete;
+ flag&=QName::tokenizer().insert(ns, "item") == NS_form::LN_item;
+ flag&=QName::tokenizer().insert(ns, "listbox") == NS_form::LN_listbox;
+ flag&=QName::tokenizer().insert(ns, "multiple") == NS_form::LN_multiple;
+ flag&=QName::tokenizer().insert(ns, "xforms-list-source") == NS_form::LN_xforms_list_source;
+ flag&=QName::tokenizer().insert(ns, "option") == NS_form::LN_option;
+ flag&=QName::tokenizer().insert(ns, "button") == NS_form::LN_button;
+ flag&=QName::tokenizer().insert(ns, "default-button") == NS_form::LN_default_button;
+ flag&=QName::tokenizer().insert(ns, "toggle") == NS_form::LN_toggle;
+ flag&=QName::tokenizer().insert(ns, "focus-on-click") == NS_form::LN_focus_on_click;
+ flag&=QName::tokenizer().insert(ns, "xforms-submission") == NS_form::LN_xforms_submission;
+ flag&=QName::tokenizer().insert(ns, "image") == NS_form::LN_image;
+ flag&=QName::tokenizer().insert(ns, "checkbox") == NS_form::LN_checkbox;
+ flag&=QName::tokenizer().insert(ns, "current-state") == NS_form::LN_current_state;
+ flag&=QName::tokenizer().insert(ns, "is-tristate") == NS_form::LN_is_tristate;
+ flag&=QName::tokenizer().insert(ns, "state") == NS_form::LN_state;
+ flag&=QName::tokenizer().insert(ns, "radio") == NS_form::LN_radio;
+ flag&=QName::tokenizer().insert(ns, "frame") == NS_form::LN_frame;
+ flag&=QName::tokenizer().insert(ns, "image-frame") == NS_form::LN_image_frame;
+ flag&=QName::tokenizer().insert(ns, "hidden") == NS_form::LN_hidden;
+ flag&=QName::tokenizer().insert(ns, "grid") == NS_form::LN_grid;
+ flag&=QName::tokenizer().insert(ns, "column") == NS_form::LN_column;
+ flag&=QName::tokenizer().insert(ns, "text-style-name") == NS_form::LN_text_style_name;
+ flag&=QName::tokenizer().insert(ns, "value-range") == NS_form::LN_value_range;
+ flag&=QName::tokenizer().insert(ns, "step-size") == NS_form::LN_step_size;
+ flag&=QName::tokenizer().insert(ns, "page-step-size") == NS_form::LN_page_step_size;
+ flag&=QName::tokenizer().insert(ns, "delay-for-repeat") == NS_form::LN_delay_for_repeat;
+ flag&=QName::tokenizer().insert(ns, "orientation") == NS_form::LN_orientation;
+ flag&=QName::tokenizer().insert(ns, "generic-control") == NS_form::LN_generic_control;
+ flag&=QName::tokenizer().insert(ns, "name") == NS_form::LN_name;
+ flag&=QName::tokenizer().insert(ns, "control-implementation") == NS_form::LN_control_implementation;
+ flag&=QName::tokenizer().insert(ns, "button-type") == NS_form::LN_button_type;
+ flag&=QName::tokenizer().insert(ns, "id") == NS_form::LN_id;
+ flag&=QName::tokenizer().insert(ns, "current-selected") == NS_form::LN_current_selected;
+ flag&=QName::tokenizer().insert(ns, "disabled") == NS_form::LN_disabled;
+ flag&=QName::tokenizer().insert(ns, "dropdown") == NS_form::LN_dropdown;
+ flag&=QName::tokenizer().insert(ns, "for") == NS_form::LN_for;
+ flag&=QName::tokenizer().insert(ns, "image-data") == NS_form::LN_image_data;
+ flag&=QName::tokenizer().insert(ns, "label") == NS_form::LN_label;
+ flag&=QName::tokenizer().insert(ns, "max-length") == NS_form::LN_max_length;
+ flag&=QName::tokenizer().insert(ns, "printable") == NS_form::LN_printable;
+ flag&=QName::tokenizer().insert(ns, "readonly") == NS_form::LN_readonly;
+ flag&=QName::tokenizer().insert(ns, "selected") == NS_form::LN_selected;
+ flag&=QName::tokenizer().insert(ns, "size") == NS_form::LN_size;
+ flag&=QName::tokenizer().insert(ns, "tab-index") == NS_form::LN_tab_index;
+ flag&=QName::tokenizer().insert(ns, "tab-stop") == NS_form::LN_tab_stop;
+ flag&=QName::tokenizer().insert(ns, "title") == NS_form::LN_title;
+ flag&=QName::tokenizer().insert(ns, "visual-effect") == NS_form::LN_visual_effect;
+ flag&=QName::tokenizer().insert(ns, "image-position") == NS_form::LN_image_position;
+ flag&=QName::tokenizer().insert(ns, "image-align") == NS_form::LN_image_align;
+ flag&=QName::tokenizer().insert(ns, "bound-column") == NS_form::LN_bound_column;
+ flag&=QName::tokenizer().insert(ns, "convert-empty-to-null") == NS_form::LN_convert_empty_to_null;
+ flag&=QName::tokenizer().insert(ns, "data-field") == NS_form::LN_data_field;
+ flag&=QName::tokenizer().insert(ns, "list-source") == NS_form::LN_list_source;
+ flag&=QName::tokenizer().insert(ns, "list-source-type") == NS_form::LN_list_source_type;
+ flag&=QName::tokenizer().insert(ns, "properties") == NS_form::LN_properties;
+ flag&=QName::tokenizer().insert(ns, "property") == NS_form::LN_property;
+ flag&=QName::tokenizer().insert(ns, "property-name") == NS_form::LN_property_name;
+ flag&=QName::tokenizer().insert(ns, "list-property") == NS_form::LN_list_property;
+ flag&=QName::tokenizer().insert(ns, "list-value") == NS_form::LN_list_value;
+ flag&=QName::tokenizer().insert(ns, "automatic-focus") == NS_form::LN_automatic_focus;
+ flag&=QName::tokenizer().insert(ns, "apply-design-mode") == NS_form::LN_apply_design_mode;
+ flag&=QName::tokenizer().insert(ns, "form") == NS_form::LN_form;
+ flag&=QName::tokenizer().insert(ns, "method") == NS_form::LN_method;
+ flag&=QName::tokenizer().insert(ns, "enctype") == NS_form::LN_enctype;
+ flag&=QName::tokenizer().insert(ns, "allow-deletes") == NS_form::LN_allow_deletes;
+ flag&=QName::tokenizer().insert(ns, "allow-inserts") == NS_form::LN_allow_inserts;
+ flag&=QName::tokenizer().insert(ns, "allow-updates") == NS_form::LN_allow_updates;
+ flag&=QName::tokenizer().insert(ns, "apply-filter") == NS_form::LN_apply_filter;
+ flag&=QName::tokenizer().insert(ns, "command-type") == NS_form::LN_command_type;
+ flag&=QName::tokenizer().insert(ns, "command") == NS_form::LN_command;
+ flag&=QName::tokenizer().insert(ns, "datasource") == NS_form::LN_datasource;
+ flag&=QName::tokenizer().insert(ns, "master-fields") == NS_form::LN_master_fields;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace form failed", flag);}
+ void test_script(){
+ bool flag=true;
+ static const char ns[] = "urn:oasis:names:tc:opendocument:xmlns:script:1.0";
+ flag&=QName::tokenizer().insert(ns, "event-listener") == NS_script::LN_event_listener;
+ flag&=QName::tokenizer().insert(ns, "macro-name") == NS_script::LN_macro_name;
+ flag&=QName::tokenizer().insert(ns, "language") == NS_script::LN_language;
+ flag&=QName::tokenizer().insert(ns, "event-name") == NS_script::LN_event_name;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace script failed", flag);}
+ void test_aml12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/aml/2001/core";
+ flag&=QName::tokenizer().insert(ns, "annotation") == NS_aml12::LN_annotation;
+ flag&=QName::tokenizer().insert(ns, "arc") == NS_aml12::LN_arc;
+ flag&=QName::tokenizer().insert(ns, "content") == NS_aml12::LN_content;
+ flag&=QName::tokenizer().insert(ns, "context") == NS_aml12::LN_context;
+ flag&=QName::tokenizer().insert(ns, "property") == NS_aml12::LN_property;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace aml12 failed", flag);}
+ void test_dc(){
+ bool flag=true;
+ static const char ns[] = "http://purl.org/dc/elements/1.1/";
+ flag&=QName::tokenizer().insert(ns, "title") == NS_dc::LN_title;
+ flag&=QName::tokenizer().insert(ns, "description") == NS_dc::LN_description;
+ flag&=QName::tokenizer().insert(ns, "subject") == NS_dc::LN_subject;
+ flag&=QName::tokenizer().insert(ns, "creator") == NS_dc::LN_creator;
+ flag&=QName::tokenizer().insert(ns, "date") == NS_dc::LN_date;
+ flag&=QName::tokenizer().insert(ns, "language") == NS_dc::LN_language;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace dc failed", flag);}
+ void test_wa11(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/word/2003/auxHint";
+ flag&=QName::tokenizer().insert(ns, "sect") == NS_wa11::LN_sect;
+ flag&=QName::tokenizer().insert(ns, "sub-section") == NS_wa11::LN_sub_section;
+ flag&=QName::tokenizer().insert(ns, "allowEmptyCollapse") == NS_wa11::LN_allowEmptyCollapse;
+ flag&=QName::tokenizer().insert(ns, "font") == NS_wa11::LN_font;
+ flag&=QName::tokenizer().insert(ns, "sym") == NS_wa11::LN_sym;
+ flag&=QName::tokenizer().insert(ns, "top") == NS_wa11::LN_top;
+ flag&=QName::tokenizer().insert(ns, "left") == NS_wa11::LN_left;
+ flag&=QName::tokenizer().insert(ns, "bottom") == NS_wa11::LN_bottom;
+ flag&=QName::tokenizer().insert(ns, "right") == NS_wa11::LN_right;
+ flag&=QName::tokenizer().insert(ns, "between") == NS_wa11::LN_between;
+ flag&=QName::tokenizer().insert(ns, "bar") == NS_wa11::LN_bar;
+ flag&=QName::tokenizer().insert(ns, "width") == NS_wa11::LN_width;
+ flag&=QName::tokenizer().insert(ns, "height") == NS_wa11::LN_height;
+ flag&=QName::tokenizer().insert(ns, "jc") == NS_wa11::LN_jc;
+ flag&=QName::tokenizer().insert(ns, "vertFromText") == NS_wa11::LN_vertFromText;
+ flag&=QName::tokenizer().insert(ns, "horizFromText") == NS_wa11::LN_horizFromText;
+ flag&=QName::tokenizer().insert(ns, "borders") == NS_wa11::LN_borders;
+ flag&=QName::tokenizer().insert(ns, "margin-left") == NS_wa11::LN_margin_left;
+ flag&=QName::tokenizer().insert(ns, "margin-right") == NS_wa11::LN_margin_right;
+ flag&=QName::tokenizer().insert(ns, "apo") == NS_wa11::LN_apo;
+ flag&=QName::tokenizer().insert(ns, "shd") == NS_wa11::LN_shd;
+ flag&=QName::tokenizer().insert(ns, "pBdrGroup") == NS_wa11::LN_pBdrGroup;
+ flag&=QName::tokenizer().insert(ns, "t") == NS_wa11::LN_t;
+ flag&=QName::tokenizer().insert(ns, "uiName") == NS_wa11::LN_uiName;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace wa11 failed", flag);}
+ void test_swbu12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/excel/2005/8/sharedworkbookusers";
+ flag&=QName::tokenizer().insert(ns, "users") == NS_swbu12::LN_users;
+ flag&=QName::tokenizer().insert(ns, "usrinfo") == NS_swbu12::LN_usrinfo;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace swbu12 failed", flag);}
+ void test_c12(){
+ bool flag=true;
+ static const char ns[] = "http://schemas.microsoft.com/office/2004/7/core";
+ flag&=QName::tokenizer().insert(ns, "SmartTagType") == NS_c12::LN_SmartTagType;
+ flag&=QName::tokenizer().insert(ns, "schemaRef") == NS_c12::LN_schemaRef;
+ CPPUNIT_ASSERT_MESSAGE("test for namespace c12 failed", flag);}
+
+
+ void test_context1()
+ {
+ std::auto_ptr<QNameTokenizerContext> context=QName::tokenizer().createQNameTokenizerContext();
+ context->addBinding("xmlns:test", "http://sample.org/test1");
+ CPPUNIT_ASSERT(rtl_str_compare(context->resolvePrefix("test"), "http://sample.org/test1")==0);
+ }
+
+ void test_context2()
+ {
+ std::auto_ptr<QNameTokenizerContext> context=QName::tokenizer().createQNameTokenizerContext();
+ context->addBinding("xmlns:test", "http://sample.org/test1");
+ context->enterScope();
+ CPPUNIT_ASSERT(rtl_str_compare(context->resolvePrefix("test"), "http://sample.org/test1")==0);
+ context->leaveScope();
+ CPPUNIT_ASSERT(rtl_str_compare(context->resolvePrefix("test"), "http://sample.org/test1")==0);
+ }
+
+ void test_context3()
+ {
+ std::auto_ptr<QNameTokenizerContext> context=QName::tokenizer().createQNameTokenizerContext();
+ context->addBinding("xmlns:test", "http://sample.org/test1");
+ context->enterScope();
+ context->addBinding("xmlns:test", "http://sample.org/test2");
+ CPPUNIT_ASSERT(rtl_str_compare(context->resolvePrefix("test"), "http://sample.org/test2")==0);
+ context->leaveScope();
+ CPPUNIT_ASSERT(rtl_str_compare(context->resolvePrefix("test"), "http://sample.org/test1")==0);
+ }
+
+ void test_resolver1()
+ {
+ QName_t qn;
+ std::auto_ptr<QNameTokenizerContext> context=QName::tokenizer().createQNameTokenizerContext();
+ context->addBinding("xmlns:text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0");
+ CPPUNIT_ASSERT(QName::tokenizer().insert("text:span", *context, &qn));
+ CPPUNIT_ASSERT(qn== NS_text::LN_span);
+ }
+
+ void test_serializer1()
+ {
+ std::auto_ptr<QNameSerializerContext> context=QName::tokenizer().createQNameSerializerContext();
+ {
+ context->addPrefix("text", "urn:oasis:names:tc:opendocument:xmlns:text:1.0");
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:text:1.0"), "text")==0);
+ }
+ }
+
+ void test_serializer2()
+ {
+ std::auto_ptr<QNameSerializerContext> context=QName::tokenizer().createQNameSerializerContext();
+ {
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://sample.org/test1"), "_p0")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://sample.org/test2"), "_p1")==0);
+ }
+ }
+
+
+ void test_prefix()
+ {
+ std::auto_ptr<QNameSerializerContext> context=QName::tokenizer().createQNameSerializerContext();
+ CPPUNIT_ASSERT(context->getPrefix("")==QName::EMPTY_STRING);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:animation:1.0"), "anium")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://www.w3.org/1998/Math/MathML"), "math")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:schemas-microsoft-com:office:word"), "w10")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:chart:1.0"), "chart")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/singlecells"), "sc12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:schemas-microsoft-com:office:odc"), "odc12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:schemas-microsoft-com:office:component:spreadsheet"), "c11")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://relaxng.org/ns/structure/1.0"), "rng")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:meta:1.0"), "meta")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/data/udc/soap"), "udcs")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://www.w3.org/1999/xlink"), "xlink")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:style:1.0"), "style")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"), "fo")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://www.w3.org/2002/xforms"), "xforms")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"), "draw")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/project"), "prj12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/package/2005/06/metadata/core-properties"), "mdc12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:table:1.0"), "table")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:schemas-microsoft-com:rowset"), "rs11")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/sxref"), "sxr12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/officeart/2005/8/xldr"), "xldr12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/omml/2004/12/core"), "m12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"), "number")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/package/2005/06/content-types"), "p12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/voldeps"), "voldeps12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/pivot"), "pt12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://www.w3.org/XML/1998/namespace"), "xml")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/word/2003/wordml"), "w11")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/schemaLibrary/2003/core"), "sl12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/styles"), "s12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/data/udc"), "udc")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"), "dr3d")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://www.w3.org/1999/02/22-rdf-syntax-ns#"), "rdf")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/supbook"), "sb12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/workbook"), "wb12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("#RowsetSchema"), "RowsetSchema")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/externalconnection"), "ec12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/querytable"), "qt12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:schemas-microsoft-com:office:office"), "o12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882"), "s11")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:schemas-microsoft-com:office:excel"), "x11")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:schemas-microsoft-com:office:spreadsheet"), "ss11")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:rtf:1.7"), "rtf")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:smil-compatible:1.0"), "smil")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/word/2005/8/25/wordml"), "w12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:rtf:schema"), "rtfs")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2003/xml"), "x2")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/infopath/2003/solutionDefinition"), "ip12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/package/2005/06/relationships"), "rel12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:config:1.0"), "config")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:text:1.0"), "text")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/table"), "tbl12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:presentation:1.0"), "pr")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/data/udc/xmlfile"), "udcxf11")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:office:1.0"), "office")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/metadata"), "md12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/powerpoint/2005/8/pml"), "pp12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/visio/2003/core"), "v11")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/sst"), "sst12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/sharedworkbook"), "swb12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/officeart/2005/8/picture"), "pic12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:schemas-microsoft-com:vml"), "vml")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/activeX/2005/ax"), "ax12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/worksheet"), "ws12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/officeart/2005/8/wddr"), "wddr12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/officeart/2005/8/oartml"), "a12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"), "svg")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/onenote/2004/import"), "on12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:form:1.0"), "form")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("urn:oasis:names:tc:opendocument:xmlns:script:1.0"), "script")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/aml/2001/core"), "aml12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://purl.org/dc/elements/1.1/"), "dc")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/word/2003/auxHint"), "wa11")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/excel/2005/8/sharedworkbookusers"), "swbu12")==0);
+ CPPUNIT_ASSERT(rtl_str_compare(context->getPrefix("http://schemas.microsoft.com/office/2004/7/core"), "c12")==0);
+ }
+
+
+ CPPUNIT_TEST_SUITE(TestQName);
+ CPPUNIT_TEST(test);
+// CPPUNIT_TEST(testperf);
+ CPPUNIT_TEST(testinsert);
+// CPPUNIT_TEST(testdos);
+// CPPUNIT_TEST(testperf);
+
+ CPPUNIT_TEST(test_anium);
+ CPPUNIT_TEST(test_math);
+ CPPUNIT_TEST(test_w10);
+ CPPUNIT_TEST(test_chart);
+ CPPUNIT_TEST(test_sc12);
+ CPPUNIT_TEST(test_odc12);
+ CPPUNIT_TEST(test_c11);
+ CPPUNIT_TEST(test_rng);
+ CPPUNIT_TEST(test_meta);
+ CPPUNIT_TEST(test_udcs);
+ CPPUNIT_TEST(test_xlink);
+ CPPUNIT_TEST(test_style);
+ CPPUNIT_TEST(test_fo);
+ CPPUNIT_TEST(test_xforms);
+ CPPUNIT_TEST(test_draw);
+ CPPUNIT_TEST(test_prj12);
+ CPPUNIT_TEST(test_mdc12);
+ CPPUNIT_TEST(test_table);
+ CPPUNIT_TEST(test_rs11);
+ CPPUNIT_TEST(test_sxr12);
+ CPPUNIT_TEST(test_xldr12);
+ CPPUNIT_TEST(test_m12);
+ CPPUNIT_TEST(test_number);
+ CPPUNIT_TEST(test_p12);
+ CPPUNIT_TEST(test_voldeps12);
+ CPPUNIT_TEST(test_pt12);
+ CPPUNIT_TEST(test_xml);
+ CPPUNIT_TEST(test_w11);
+ CPPUNIT_TEST(test_sl12);
+ CPPUNIT_TEST(test_s12);
+ CPPUNIT_TEST(test_udc);
+ CPPUNIT_TEST(test_dr3d);
+ CPPUNIT_TEST(test_rdf);
+ CPPUNIT_TEST(test_sb12);
+ CPPUNIT_TEST(test_wb12);
+ CPPUNIT_TEST(test_RowsetSchema);
+ CPPUNIT_TEST(test_ec12);
+ CPPUNIT_TEST(test_qt12);
+ CPPUNIT_TEST(test_o12);
+ CPPUNIT_TEST(test_s11);
+ CPPUNIT_TEST(test_x11);
+ CPPUNIT_TEST(test_ss11);
+ CPPUNIT_TEST(test_rtf);
+ CPPUNIT_TEST(test_smil);
+ CPPUNIT_TEST(test_w12);
+ CPPUNIT_TEST(test_rtfs);
+ CPPUNIT_TEST(test_x2);
+ CPPUNIT_TEST(test_ip12);
+ CPPUNIT_TEST(test_rel12);
+ CPPUNIT_TEST(test_NONE);
+ CPPUNIT_TEST(test_config);
+ CPPUNIT_TEST(test_text);
+ CPPUNIT_TEST(test_tbl12);
+ CPPUNIT_TEST(test_pr);
+ CPPUNIT_TEST(test_udcxf11);
+ CPPUNIT_TEST(test_office);
+ CPPUNIT_TEST(test_md12);
+ CPPUNIT_TEST(test_pp12);
+ CPPUNIT_TEST(test_v11);
+ CPPUNIT_TEST(test_sst12);
+ CPPUNIT_TEST(test_swb12);
+ CPPUNIT_TEST(test_pic12);
+ CPPUNIT_TEST(test_vml);
+ CPPUNIT_TEST(test_ax12);
+ CPPUNIT_TEST(test_ws12);
+ CPPUNIT_TEST(test_wddr12);
+ CPPUNIT_TEST(test_a12);
+ CPPUNIT_TEST(test_svg);
+ CPPUNIT_TEST(test_on12);
+ CPPUNIT_TEST(test_form);
+ CPPUNIT_TEST(test_script);
+ CPPUNIT_TEST(test_aml12);
+ CPPUNIT_TEST(test_dc);
+ CPPUNIT_TEST(test_wa11);
+ CPPUNIT_TEST(test_swbu12);
+ CPPUNIT_TEST(test_c12);
+
+ CPPUNIT_TEST(test_context1);
+ CPPUNIT_TEST(test_context2);
+ CPPUNIT_TEST(test_context3);
+
+ CPPUNIT_TEST(test_resolver1);
+
+ CPPUNIT_TEST(test_serializer1);
+ CPPUNIT_TEST(test_serializer2);
+
+ CPPUNIT_TEST(test_prefix);
+
+ CPPUNIT_TEST_SUITE_END();
+};
+
+//#####################################
+// register test suites
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(TestQName, "TestQName");
+
+NOADDITIONAL;
+
diff --git a/writerfilter/qa/cppunittests/sl/export.map b/writerfilter/qa/cppunittests/sl/export.map
new file mode 100644
index 000000000000..7321bbca16ad
--- /dev/null
+++ b/writerfilter/qa/cppunittests/sl/export.map
@@ -0,0 +1,34 @@
+#*************************************************************************
+#
+# 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.
+#
+#*************************************************************************
+
+UDK_3_0_0 {
+ global:
+ registerAllTestFunction;
+
+ local:
+ *;
+};
diff --git a/writerfilter/qa/cppunittests/sl/helloworld.odt.flat.xml b/writerfilter/qa/cppunittests/sl/helloworld.odt.flat.xml
new file mode 100644
index 000000000000..85ad3557c396
--- /dev/null
+++ b/writerfilter/qa/cppunittests/sl/helloworld.odt.flat.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?><office:document xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.0" office:mimetype="application/x-vnd.oasis.openoffice.text"><office:meta><meta:generator>StarOffice/8$Win32 OpenOffice.org_project/680m145$Build-8989</meta:generator><meta:creation-date>2006-02-10T18:59:19</meta:creation-date><dc:date>2006-02-10T19:02:26</dc:date><dc:language>de-DE</dc:language><meta:editing-cycles>2</meta:editing-cycles><meta:editing-duration>PT3M12S</meta:editing-duration><meta:user-defined meta:name="Info 1"/><meta:user-defined meta:name="Info 2"/><meta:user-defined meta:name="Info 3"/><meta:user-defined meta:name="Info 4"/><meta:document-statistic meta:table-count="0" meta:image-count="0" meta:
+bject-count="0" meta:page-count="1" meta:paragraph-count="1" meta:word-count="2" meta:character-count="11"/></office:meta><office:settings><config:config-item-set config:name="ooo:view-settings"><config:config-item config:name="ViewAreaTop" config:type="int">0</config:config-item><config:config-item config:name="ViewAreaLeft" config:type="int">0</config:config-item><config:config-item config:name="ViewAreaWidth" config:type="int">15965</config:config-item><config:config-item config:name="ViewAreaHeight" config:type="int">8363</config:config-item><config:config-item config:name="ShowRedlineChanges" config:type="boolean">true</config:config-item><config:config-item config:name="InBrowseMode" config:type="boolean">false</config:config-item><config:config-item-map-indexed config:name="Views"><config:config-item-map-entry><config:config-item config:name="ViewId" config:type="string">view2</config:config-item><config:config-item config:name="ViewLeft" config:type="int">6137</config:config-item><config:config-item config:name="ViewTop" config:type="int">3002</config:config-item><config:config-item config:name="VisibleLeft" config:type="int">0</config:config-item><config:config-item config:name="VisibleTop" config:type="int">0</config:config-item><config:config-item config:name="VisibleRight" config:type="int">15963</config:config-item><config:config-item config:name="VisibleBottom" config:type="int">8361</config:config-item><config:config-item config:name="ZoomType" config:type="short">0</config:config-item><config:config-item config:name="ZoomFactor" config:type="short">150</config:config-item><config:config-item config:name="IsSelectedFrame" config:type="boolean">false</config:config-item></config:config-item-map-entry></config:config-item-map-indexed></config:config-item-set><config:config-item-set config:name="ooo:configuration-settings"><config:config-item config:name="AddParaTableSpacing" config:type="boolean">true</config:config-item><config:config-item config:name="PrintReversed" config:type="boolean">false</co
+fig:config-item><config:config-item config:name="OutlineLevelYieldsNumbering" config:type="boolean">false</config:config-item><config:config-item config:name="LinkUpdateMode" config:type="short">1</config:config-item><config:config-item config:name="IgnoreFirstLineIndentInNumbering" config:type="boolean">false</config:config-item><config:config-item config:name="CharacterCompressionType" config:type="short">0</config:config-item><config:config-item config:name="PrintSingleJobs" config:type="boolean">false</config:config-item><config:config-item config:name="UpdateFromTemplate" config:type="boolean">false</config:config-item><config:config-item config:name="PrintPaperFromSetup" config:type="boolean">false</config:config-item><config:config-item config:name="AddFrameOffsets" config:type="boolean">false</config:config-item><config:config-item config:name="PrintLeftPages" config:type="boolean">true</config:config-item><config:config-item config:name="RedlineProtectionKey" config:type="base64Binary"/><config:config-item config:name="PrintTables" config:type="boolean">true</config:config-item><config:config-item config:name="ChartAutoUpdate" config:type="boolean">true</config:config-item><config:config-item config:name="PrintControls" config:type="boolean">true</config:config-item><config:config-item config:name="PrinterSetup" config:type="base64Binary"/><config:config-item config:name="PrintAnnotationMode" config:type="short">0</config:config-item><config:config-item config:name="LoadReadonly" config:type="boolean">false</config:config-item><config:config-item config:name="AddParaSpacingToTableCells" config:type="boolean">true</config:config-item><config:config-item config:name="AddExternalLeading" config:type="boolean">true</config:config-item><config:config-item config:name="ApplyUserData" config:type="boolean">true</config:config-item><config:config-item config:name="FieldAutoUpdate" config:type="boolean">true</config:config-item><config:config-item config:name="SaveVersionOnClose" config:type="boolean">false</con
+ig:config-item><config:config-item config:name="SaveGlobalDocumentLinks" config:type="boolean">false</config:config-item><config:config-item config:name="IsKernAsianPunctuation" config:type="boolean">false</config:config-item><config:config-item config:name="AlignTatopPosition" config:type="boolean">true</config:config-item><config:config-item config:name="CurrentDatabaseDataSource" config:type="string"/><config:config-item config:name="PrinterName" config:type="string"/><config:config-item config:name="PrintFaxName" config:type="string"/><config:config-item config:name="ConsiderTextWrapOnObjPos" config:type="boolean">false</config:config-item><config:config-item config:name="PrintRightPages" config:type="boolean">true</config:config-item><config:config-item config:name="IsLabelDocument" config:type="boolean">false</config:config-item><config:config-item config:name="UseFormerLineSpacing" config:type="boolean">false</config:config-item><config:config-item config:name="AddParaTableSpacingAtStart" config:type="boolean">true</config:config-item><config:config-item config:name="UseFormerTextWrapping" config:type="boolean">false</config:config-item><config:config-item config:name="DoNotResetParaAttrsForNumFont" config:type="boolean">false</config:config-item><config:config-item config:name="PrintProspect" config:type="boolean">false</config:config-item><config:config-item config:name="PrintGraphics" config:type="boolean">true</config:config-item><config:config-item config:name="AllowPrintJobCancel" config:type="boolean">true</config:config-item><config:config-item config:name="CurrentDatabaseCommandType" config:type="int">0</config:config-item><config:config-item config:name="DoNotJustifyLinesWithManualBreak" config:type="boolean">false</config:config-item><config:config-item config:name="UseFormerObjectPositioning" config:type="boolean">false</config:config-item><config:config-item config:name="PrinterIndependentLayout" config:type="string">high-resolution</config:config-item><config:config-item config:name="UseOldN
+mbering" config:type="boolean">false</config:config-item><config:config-item config:name="PrintPageBackground" config:type="boolean">true</config:config-item><config:config-item config:name="CurrentDatabaseCommand" config:type="string"/><config:config-item config:name="PrintDrawings" config:type="boolean">true</config:config-item><config:config-item config:name="PrintBlackFonts" config:type="boolean">false</config:config-item></config:config-item-set></office:settings><office:scripts><office:script script:language="ooo:Basic">
+ <ooo:libraries>
+ <ooo:library-embedded ooo:name="Standard"/>
+ </ooo:libraries></office:script></office:scripts><office:font-face-decls><style:font-face style:name="Tahoma1" svg:font-family="Tahoma"/><style:font-face style:name="Andale Sans UI" svg:font-family="'Andale Sans UI'" style:font-pitch="variable"/><style:font-face style:name="MS Mincho" svg:font-family="'MS Mincho'" style:font-pitch="variable"/><style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-pitch="variable"/><style:font-face style:name="Thorndale" svg:font-family="Thorndale" style:font-family-generic="roman" style:font-pitch="variable"/><style:font-face style:name="Albany" svg:font-family="Albany" style:font-family-generic="swiss" style:font-pitch="variable"/></office:font-face-decls><office:styles><style:default-style style:family="graphic"><style:graphic-properties draw:shadow-offset-x="0.3cm" draw:shadow-offset-y="0.3cm" draw:start-line-spacing-horizontal="0.283cm" draw:start-line-spacing-vertical="0.283cm" draw:end-line-spacing-horizontal="0.283cm" draw:end-line-spacing-vertical="0.283cm" style:flow-with-text="false"/><style:paragraph-properties style:text-autospace="ideograph-alpha" style:line-break="strict" style:writing-mode="lr-tb" style:font-independent-line-spacing="false"><!--<style:tab-stops/>--></style:paragraph-properties><style:text-properties style:use-window-font-color="true" fo:font-size="12pt" fo:language="de" fo:country="DE" style:font-size-asian="12pt" style:language-asian="none" style:country-asian="none" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none"/></style:default-style><style:default-style style:family="paragraph"><style:paragraph-properties fo:hyphenation-ladder-count="no-limit" style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" style:line-break="strict" style:tab-stop-distance="1.251cm" style:writing-mode="page"/><style:text-properties style:use-window-font-color="true" style:font-name="Thorndale" fo:font-size="12pt" fo:language="de" fo:country="DE" style:font-name-asian="Andale Sans UI" style:
+ont-size-asian="12pt" style:language-asian="none" style:country-asian="none" style:font-name-complex="Tahoma" style:font-size-complex="12pt" style:language-complex="none" style:country-complex="none" fo:hyphenate="false" fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="2"/></style:default-style><style:default-style style:family="table"><style:table-properties table:border-model="collapsing"/></style:default-style><style:default-style style:family="table-row"><style:table-row-properties fo:keep-together="auto"/></style:default-style><style:style style:name="Standard" style:family="paragraph" style:class="text"/><style:style style:name="Text_20_body" style:display-name="Text body" style:family="paragraph" style:parent-style-name="Standard" style:class="text"><style:paragraph-properties fo:margin-top="0cm" fo:margin-bottom="0.212cm"/></style:style><style:style style:name="Heading" style:family="paragraph" style:parent-style-name="Standard" style:next-style-name="Text_20_body" style:class="text"><style:paragraph-properties fo:margin-top="0.423cm" fo:margin-bottom="0.212cm" fo:keep-with-next="always"/><style:text-properties style:font-name="Albany" fo:font-size="14pt" style:font-name-asian="MS Mincho" style:font-size-asian="14pt" style:font-name-complex="Tahoma" style:font-size-complex="14pt"/></style:style><style:style style:name="List" style:family="paragraph" style:parent-style-name="Text_20_body" style:class="list"><style:text-properties style:font-name-complex="Tahoma1"/></style:style><style:style style:name="Caption" style:family="paragraph" style:parent-style-name="Standard" style:class="extra"><style:paragraph-properties fo:margin-top="0.212cm" fo:margin-bottom="0.212cm" text:number-lines="false" text:line-number="0"/><style:text-properties fo:font-size="12pt" fo:font-style="italic" style:font-size-asian="12pt" style:font-style-asian="italic" style:font-name-complex="Tahoma1" style:font-size-complex="12pt" style:font-style-complex="italic"/></style:style><style:style style:name="Index" sty
+e:family="paragraph" style:parent-style-name="Standard" style:class="index"><style:paragraph-properties text:number-lines="false" text:line-number="0"/><style:text-properties style:font-name-complex="Tahoma1"/></style:style><text:outline-style><text:outline-level-style text:level="1" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style><text:outline-level-style text:level="2" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style><text:outline-level-style text:level="3" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style><text:outline-level-style text:level="4" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style><text:outline-level-style text:level="5" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style><text:outline-level-style text:level="6" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style><text:outline-level-style text:level="7" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style><text:outline-level-style text:level="8" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style><text:outline-level-style text:level="9" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style><text:outline-level-style text:level="10" style:num-format=""><style:list-level-properties text:min-label-distance="0.381cm"/></text:outline-level-style></text:outline-style><text:notes-configuration text:note-class="footnote" style:num-format="1" text:start-value="0" text:footnotes-position="page" text:start-numbering-at="document"/><text:notes-configuration text:note-class="endnote" style:num-format="i" text:start-value="0"/><tex
+:linenumbering-configuration text:number-lines="false" text:offset="0.499cm" style:num-format="1" text:number-position="left" text:increment="5"/></office:styles><office:automatic-styles><style:style style:name="P1" style:family="paragraph" style:parent-style-name="Standard"><style:paragraph-properties><!--<style:tab-stops><style:tab-stop style:position="1.446cm"/><style:tab-stop style:position="3.704cm" style:type="center"/><style:tab-stop style:position="6.473cm" style:type="right"/></style:tab-stops>--></style:paragraph-properties></style:style><style:style style:name="T1" style:family="text"><style:text-properties fo:font-weight="bold" style:font-weight-asian="bold" style:font-weight-complex="bold"/></style:style><style:style style:name="T2" style:family="text"><style:text-properties fo:font-style="italic" style:font-style-asian="italic" style:font-style-complex="italic"/></style:style><style:page-layout style:name="pm1"><style:page-layout-properties fo:page-width="20.999cm" fo:page-height="29.699cm" style:num-format="1" style:print-orientation="portrait" fo:margin-top="2cm" fo:margin-bottom="2cm" fo:margin-left="2cm" fo:margin-right="2cm" style:writing-mode="lr-tb" style:footnote-max-height="0cm"><style:footnote-sep style:width="0.018cm" style:distance-before-sep="0.101cm" style:distance-after-sep="0.101cm" style:adjustment="left" style:rel-width="25%" style:color="#000000"/></style:page-layout-properties><style:header-style/><style:footer-style/></style:page-layout></office:automatic-styles><office:master-styles><style:master-page style:name="Standard" style:page-layout-name="pm1"/></office:master-styles><office:body><office:text><office:forms form:automatic-focus="false" form:apply-design-mode="false"/><text:sequence-decls><text:sequence-decl text:display-outline-level="0" text:name="Illustration"/><text:sequence-decl text:display-outline-level="0" text:name="Table"/><text:sequence-decl text:display-outline-level="0" text:name="Text"/><text:sequence-decl text:display-outline-level="0" text:name="Drawing"/
+</text:sequence-decls><text:p text:style-name="P1"><text:span text:style-name="T1">HALLO</text:span> <text:span text:style-name="T2">WOLRD</text:span></text:p></office:text></office:body></office:document>
diff --git a/writerfilter/qa/cppunittests/sl/makefile.mk b/writerfilter/qa/cppunittests/sl/makefile.mk
new file mode 100644
index 000000000000..fa7cafc1dd00
--- /dev/null
+++ b/writerfilter/qa/cppunittests/sl/makefile.mk
@@ -0,0 +1,73 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+PRJ=..$/..$/..
+
+PRJNAME=writerfilter
+TARGET=test-od_sl
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+CFLAGSCXX += $(CPPUNIT_CFLAGS)
+
+# BEGIN ----------------------------------------------------------------
+# auto generated Target:testjob by codegen.pl
+
+SHL1OBJS=\
+ $(SLO)$/testOD_SL.obj \
+ $(SLO)$/FileLoggerImpl.obj\
+ $(SLO)$/ExternalViewLogger.obj
+
+SHL1TARGET=$(TARGET)
+SHL1STDLIBS=$(SALLIB) $(TOOLSLIB) $(CPPUNITLIB) $(TESTSHL2LIB)
+
+.IF "$(GUI)" == "WNT"
+SHL1STDLIBS+=$(LB)$/iodiapi.lib
+.ENDIF
+.IF "$(GUI)" == "UNX"
+SHL1STDLIBS+=$(LB)$/libodiapi.so
+.ENDIF
+
+SHL1IMPLIB= i$(SHL1TARGET)
+
+# SHL1DEF= $(MISC)$/$(SHL1TARGET).def
+
+DEF1NAME =$(SHL1TARGET)
+
+# DEF1EXPORTFILE= export.exp
+SHL1VERSIONMAP = export.map
+
+
+# END ------------------------------------------------------------------
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+.INCLUDE : _cppunit.mk
diff --git a/writerfilter/qa/cppunittests/sl/testOD_SL.cxx b/writerfilter/qa/cppunittests/sl/testOD_SL.cxx
new file mode 100644
index 000000000000..640db6dac53f
--- /dev/null
+++ b/writerfilter/qa/cppunittests/sl/testOD_SL.cxx
@@ -0,0 +1,118 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <testshl/simpleheader.hxx>
+#include <odiapi/xxml/XXmlReader.hxx>
+#include <odiapi/props/Properties.hxx>
+#include <odiapi/sl/od_sl.hxx>
+
+#include "../odiapi/FileLoggerImpl.hxx"
+#include "../odiapi/ExternalViewLogger.hxx"
+
+#include <osl/file.hxx>
+#include <osl/thread.hxx>
+
+using namespace writerfilter;
+using namespace osl;
+using namespace rtl;
+using namespace util;
+
+class MyHandler : public xxml::ContentHandler
+{
+public:
+ virtual void startDocument()
+ {
+ }
+ virtual void endDocument()
+ {
+ }
+ virtual void startElement(QName_t name, QName_t attrName[], const xxml::Value *attrValue[], int attrs)
+ {
+ printf("<{%s}:%s>\n", QName::serializer().getNamespaceUri(name), QName::serializer().getLocalName(name));
+ for(int i=0;i<attrs;i++)
+ {
+ printf("@{%s}:%s=\"%s\"\n", QName::serializer().getNamespaceUri(attrName[i]), QName::serializer().getLocalName(attrName[i]), attrValue[i]->getOString().getStr());
+ }
+ }
+ virtual void endElement(QName_t name)
+ {
+ printf("</{%s}:%s>\n", QName::serializer().getNamespaceUri(name), QName::serializer().getLocalName(name));
+ }
+ virtual void characters(const xxml::Value &value)
+ {
+ printf("\"%s\"\n", value.getOString().getStr());
+ }
+
+};
+
+OString getTempFileName(const OUString& fileName)
+{
+ OUString ousTmpUrl;
+ FileBase::getTempDirURL(ousTmpUrl);
+ if (!ousTmpUrl.endsWithIgnoreAsciiCaseAsciiL("/", 1))
+ ousTmpUrl += OUString::createFromAscii("/");
+ ousTmpUrl += fileName;
+
+ OUString sysTmpPath;
+ FileBase::getSystemPathFromFileURL(ousTmpUrl, sysTmpPath);
+
+ return OUStringToOString(sysTmpPath, osl_getThreadTextEncoding());
+}
+
+class TestXXML : public CppUnit::TestFixture
+{
+public:
+ void test()
+ {
+ odiapi::props::PropertyPool::Pointer_t propertyPool=odiapi::props::createPropertyPool();
+ std::auto_ptr<ODSLHandler> handler=ODSLHandler::createODSLHandler(propertyPool);
+ std::auto_ptr<xxml::XXmlReader> reader=xxml::XXmlReader::createXXmlReader(*handler);
+ reader->read("helloworld.odt.flat.xml");
+
+ OString tmpFileName = getTempFileName(OUString::createFromAscii("dumpSlPool_int.dot"));
+ printf("Pool dump: %s\n", tmpFileName.getStr());
+ FileLoggerImpl fl(tmpFileName.getStr());
+ propertyPool->dump(&fl);
+
+ OString tmpFileName2 = getTempFileName(OUString::createFromAscii("dumpSlPool_ext.dot"));
+ printf("Pool dump: %s\n", tmpFileName2.getStr());
+ ExternalViewLoggerImpl evl(tmpFileName2.getStr());
+ propertyPool->dump(&evl);
+ }
+
+ CPPUNIT_TEST_SUITE(TestXXML);
+ CPPUNIT_TEST(test);
+
+
+ CPPUNIT_TEST_SUITE_END();
+};
+
+//#####################################
+// register test suites
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(TestXXML, "TestXXML");
+
+NOADDITIONAL;
diff --git a/writerfilter/qa/cppunittests/xxml/export.map b/writerfilter/qa/cppunittests/xxml/export.map
new file mode 100644
index 000000000000..7321bbca16ad
--- /dev/null
+++ b/writerfilter/qa/cppunittests/xxml/export.map
@@ -0,0 +1,34 @@
+#*************************************************************************
+#
+# 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.
+#
+#*************************************************************************
+
+UDK_3_0_0 {
+ global:
+ registerAllTestFunction;
+
+ local:
+ *;
+};
diff --git a/writerfilter/qa/cppunittests/xxml/makefile.mk b/writerfilter/qa/cppunittests/xxml/makefile.mk
new file mode 100644
index 000000000000..7f0d3f9731b4
--- /dev/null
+++ b/writerfilter/qa/cppunittests/xxml/makefile.mk
@@ -0,0 +1,75 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+PRJ=..$/..$/..
+
+PRJNAME=writerfilter
+TARGET=test-xxml
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+CFLAGSCXX += $(CPPUNIT_CFLAGS)
+
+# BEGIN ----------------------------------------------------------------
+# auto generated Target:testjob by codegen.pl
+
+.IF "$(GUI)" == "WNT"
+ CFLAGS+=/Ob1
+.ENDIF
+
+SHL1OBJS=\
+ $(SLO)$/testXXML.obj
+
+SHL1TARGET=$(TARGET)
+SHL1STDLIBS=$(SALLIB) $(TOOLSLIB) $(CPPUNITLIB) $(TESTSHL2LIB)
+
+.IF "$(GUI)" == "WNT"
+SHL1STDLIBS+=$(LB)$/iodiapi.lib
+.ENDIF
+.IF "$(GUI)" == "UNX"
+SHL1STDLIBS+=$(LB)$/libodiapi.so
+.ENDIF
+
+SHL1IMPLIB= i$(SHL1TARGET)
+
+# SHL1DEF= $(MISC)$/$(SHL1TARGET).def
+
+DEF1NAME =$(SHL1TARGET)
+
+# DEF1EXPORTFILE= export.exp
+SHL1VERSIONMAP = export.map
+
+
+# END ------------------------------------------------------------------
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+.INCLUDE : _cppunit.mk
diff --git a/writerfilter/qa/cppunittests/xxml/test.xml b/writerfilter/qa/cppunittests/xxml/test.xml
new file mode 100644
index 000000000000..74e5fbd82d2f
--- /dev/null
+++ b/writerfilter/qa/cppunittests/xxml/test.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0"?>
+<test xmlns="http://sample.org/test" xmlns:tst="http://sample.org/test" v1="a" tst:v2="b">HALLO</test>
diff --git a/writerfilter/qa/cppunittests/xxml/testXXML.cxx b/writerfilter/qa/cppunittests/xxml/testXXML.cxx
new file mode 100644
index 000000000000..4e5ade4f8d7e
--- /dev/null
+++ b/writerfilter/qa/cppunittests/xxml/testXXML.cxx
@@ -0,0 +1,184 @@
+/*************************************************************************
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <testshl/simpleheader.hxx>
+#include <odiapi/xxml/XXmlReader.hxx>
+#include <osl/time.h>
+
+
+using namespace writerfilter;
+
+class Node
+{
+public:
+ QName_t tag;
+ Node *next;
+ Node *prev;
+
+ Node(QName_t tag) : prev(NULL), next(NULL), tag(tag) {
+ };
+
+ void append(Node &node)
+ {
+ this->next=&node;
+ node.prev=this;
+ }
+};
+
+class Table : public Node
+{
+public:
+ Table(QName_t tag):Node(tag) {};
+};
+
+class Row : public Node
+{
+public:
+ Table &parent;
+
+ Row(QName_t tag, Table &parent) : Node(tag), parent(parent) {};
+};
+
+class Cell : public Node
+{
+public:
+ Row &parent;
+
+ Cell(QName_t tag, Row &parent) : Node(tag), parent(parent) {};
+};
+
+
+class MyHandler : public xxml::ContentHandler
+{
+public:
+ int events;
+ Table *currentTable;
+ Row *currentRow;
+ Cell *currentCell;
+
+ virtual void startDocument()
+ {
+ currentTable=NULL;
+ currentRow=NULL;
+ currentCell=NULL;
+ events=1;
+ }
+ virtual void endDocument()
+ {
+ events++;
+ }
+ virtual void startElement(QName_t name, QName_t attrName[], const xxml::Value *attrValue[], int attrs)
+ {
+ events++;
+// printf("<{%s}:%s>\n", QName::serializer().getNamespaceUri(name), QName::serializer().getLocalName(name));
+ for(int i=0;i<attrs;i++)
+ {
+// printf("@{%s}:%s=\"%s\"\n", QName::serializer().getNamespaceUri(attrName[i]), QName::serializer().getLocalName(attrName[i]), attrValue[i]->getOString().getStr());
+ events++;
+ }
+
+ switch(name)
+ {
+ case NS_table::LN_table:
+ case NS_ss11::LN_Table:
+ currentTable=new Table(name);
+ break;
+ case NS_table::LN_table_row:
+ case NS_ss11::LN_Row:
+ if (currentRow==NULL)
+ currentRow=new Row(name, *currentTable);
+ else
+ currentRow->append(*new Row(name, *currentTable));
+ break;
+ case NS_table::LN_table_cell:
+ case NS_ss11::LN_Cell:
+ if (currentCell==NULL)
+ currentCell=new Cell(name, *currentRow);
+ else
+ currentCell->append(*new Cell(name, *currentRow));
+ break;
+
+ };
+
+ }
+ virtual void endElement(QName_t name)
+ {
+ //printf("</{%s}:%s>\n", QName::serializer().getNamespaceUri(name), QName::serializer().getLocalName(name));
+ events++;
+ switch(name)
+ {
+ case NS_table::LN_table:
+ case NS_ss11::LN_Table:
+ currentRow->append(*currentTable);
+ currentRow=NULL;
+ break;
+ case NS_table::LN_table_row:
+ case NS_ss11::LN_Row:
+ currentCell->append(*currentRow);
+ currentCell=NULL;
+ break;
+ case NS_table::LN_table_cell:
+ case NS_ss11::LN_Cell:
+ break;
+
+ };
+ }
+ virtual void characters(const xxml::Value &value)
+ {
+ //printf("\"%s\"\n", value.getOString().getStr());
+ events++;
+ }
+
+};
+
+class TestXXML : public CppUnit::TestFixture
+{
+public:
+ void test()
+ {
+ MyHandler handler;
+ std::auto_ptr<xxml::XXmlReader> reader=xxml::XXmlReader::createXXmlReader(handler);
+ TimeValue t1; osl_getSystemTime(&t1);
+
+// reader->read("test.xml");
+// reader->read("C:\\Documents and Settings\\fr156068\\My Documents\\odt\\testfile.xml");
+ reader->read("C:\\Documents and Settings\\fr156068\\My Documents\\odt\\testfile\\content.xml");
+ TimeValue t2; osl_getSystemTime(&t2);
+ printf("Events=%i time=%is time/event=%0.10fs\n", handler.events, t2.Seconds-t1.Seconds, (double)(t2.Seconds-t1.Seconds)/(double)handler.events);
+ }
+
+ CPPUNIT_TEST_SUITE(TestXXML);
+ CPPUNIT_TEST(test);
+
+
+ CPPUNIT_TEST_SUITE_END();
+};
+
+//#####################################
+// register test suites
+CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(TestXXML, "TestXXML");
+
+NOADDITIONAL;
diff --git a/writerfilter/qa/documents/Bookmark1.doc b/writerfilter/qa/documents/Bookmark1.doc
new file mode 100644
index 000000000000..71565d9790c8
--- /dev/null
+++ b/writerfilter/qa/documents/Bookmark1.doc
Binary files differ
diff --git a/writerfilter/qa/documents/Bookmark1.docx b/writerfilter/qa/documents/Bookmark1.docx
new file mode 100644
index 000000000000..a00eab97a304
--- /dev/null
+++ b/writerfilter/qa/documents/Bookmark1.docx
Binary files differ
diff --git a/writerfilter/qa/documents/CellAlignment.doc b/writerfilter/qa/documents/CellAlignment.doc
new file mode 100644
index 000000000000..57a6745b4504
--- /dev/null
+++ b/writerfilter/qa/documents/CellAlignment.doc
Binary files differ
diff --git a/writerfilter/qa/documents/Footnote.doc b/writerfilter/qa/documents/Footnote.doc
new file mode 100644
index 000000000000..9098c91a98ce
--- /dev/null
+++ b/writerfilter/qa/documents/Footnote.doc
Binary files differ
diff --git a/writerfilter/qa/documents/Footnote.docx b/writerfilter/qa/documents/Footnote.docx
new file mode 100644
index 000000000000..a20d2747abae
--- /dev/null
+++ b/writerfilter/qa/documents/Footnote.docx
Binary files differ
diff --git a/writerfilter/qa/documents/HeaderFooter.doc b/writerfilter/qa/documents/HeaderFooter.doc
new file mode 100644
index 000000000000..9b023b485761
--- /dev/null
+++ b/writerfilter/qa/documents/HeaderFooter.doc
Binary files differ
diff --git a/writerfilter/qa/documents/HeaderFooter.docx b/writerfilter/qa/documents/HeaderFooter.docx
new file mode 100644
index 000000000000..1c550b4d547b
--- /dev/null
+++ b/writerfilter/qa/documents/HeaderFooter.docx
Binary files differ
diff --git a/writerfilter/qa/documents/IndentedTable.doc b/writerfilter/qa/documents/IndentedTable.doc
new file mode 100644
index 000000000000..b96ca77b0e5a
--- /dev/null
+++ b/writerfilter/qa/documents/IndentedTable.doc
Binary files differ
diff --git a/writerfilter/qa/documents/IndentedTable1.docx b/writerfilter/qa/documents/IndentedTable1.docx
new file mode 100644
index 000000000000..2499549d3e76
--- /dev/null
+++ b/writerfilter/qa/documents/IndentedTable1.docx
Binary files differ
diff --git a/writerfilter/qa/documents/MergedTable.doc b/writerfilter/qa/documents/MergedTable.doc
new file mode 100644
index 000000000000..0061045f6358
--- /dev/null
+++ b/writerfilter/qa/documents/MergedTable.doc
Binary files differ
diff --git a/writerfilter/qa/documents/MergedTable.docx b/writerfilter/qa/documents/MergedTable.docx
new file mode 100644
index 000000000000..f379c07045d1
--- /dev/null
+++ b/writerfilter/qa/documents/MergedTable.docx
Binary files differ
diff --git a/writerfilter/qa/documents/MergedTable_3_3.doc b/writerfilter/qa/documents/MergedTable_3_3.doc
new file mode 100644
index 000000000000..13b727590950
--- /dev/null
+++ b/writerfilter/qa/documents/MergedTable_3_3.doc
Binary files differ
diff --git a/writerfilter/qa/documents/MergedTable_3_3.docx b/writerfilter/qa/documents/MergedTable_3_3.docx
new file mode 100644
index 000000000000..6fd7447bd409
--- /dev/null
+++ b/writerfilter/qa/documents/MergedTable_3_3.docx
Binary files differ
diff --git a/writerfilter/qa/documents/MultiMergedTable.docx b/writerfilter/qa/documents/MultiMergedTable.docx
new file mode 100644
index 000000000000..34fcdac2d395
--- /dev/null
+++ b/writerfilter/qa/documents/MultiMergedTable.docx
Binary files differ
diff --git a/writerfilter/qa/documents/MultiWrapping1.docx b/writerfilter/qa/documents/MultiWrapping1.docx
new file mode 100644
index 000000000000..ce58b09b86fd
--- /dev/null
+++ b/writerfilter/qa/documents/MultiWrapping1.docx
Binary files differ
diff --git a/writerfilter/qa/documents/Paragraph with footnote.doc b/writerfilter/qa/documents/Paragraph with footnote.doc
new file mode 100644
index 000000000000..eaf22b5ef699
--- /dev/null
+++ b/writerfilter/qa/documents/Paragraph with footnote.doc
Binary files differ
diff --git a/writerfilter/qa/documents/Paragraph with footnote.docx b/writerfilter/qa/documents/Paragraph with footnote.docx
new file mode 100644
index 000000000000..fbaac59dc283
--- /dev/null
+++ b/writerfilter/qa/documents/Paragraph with footnote.docx
Binary files differ
diff --git a/writerfilter/qa/documents/Picture1.docx b/writerfilter/qa/documents/Picture1.docx
new file mode 100644
index 000000000000..0a55180a9437
--- /dev/null
+++ b/writerfilter/qa/documents/Picture1.docx
Binary files differ
diff --git a/writerfilter/qa/documents/RedlineTest.docx b/writerfilter/qa/documents/RedlineTest.docx
new file mode 100644
index 000000000000..dda53c63f06f
--- /dev/null
+++ b/writerfilter/qa/documents/RedlineTest.docx
Binary files differ
diff --git a/writerfilter/qa/documents/RowHeight.doc b/writerfilter/qa/documents/RowHeight.doc
new file mode 100644
index 000000000000..5db85a486e57
--- /dev/null
+++ b/writerfilter/qa/documents/RowHeight.doc
Binary files differ
diff --git a/writerfilter/qa/documents/RowHeight.docx b/writerfilter/qa/documents/RowHeight.docx
new file mode 100644
index 000000000000..ffdb7808bce6
--- /dev/null
+++ b/writerfilter/qa/documents/RowHeight.docx
Binary files differ
diff --git a/writerfilter/qa/documents/StandardFontAlbertus.doc b/writerfilter/qa/documents/StandardFontAlbertus.doc
new file mode 100644
index 000000000000..f68d3d6cd5a6
--- /dev/null
+++ b/writerfilter/qa/documents/StandardFontAlbertus.doc
Binary files differ
diff --git a/writerfilter/qa/documents/Table5CellBorders.doc b/writerfilter/qa/documents/Table5CellBorders.doc
new file mode 100644
index 000000000000..ab72e558b33c
--- /dev/null
+++ b/writerfilter/qa/documents/Table5CellBorders.doc
Binary files differ
diff --git a/writerfilter/qa/documents/Table5CellBorders.docx b/writerfilter/qa/documents/Table5CellBorders.docx
new file mode 100644
index 000000000000..6b278175601b
--- /dev/null
+++ b/writerfilter/qa/documents/Table5CellBorders.docx
Binary files differ
diff --git a/writerfilter/qa/documents/TableDifferentColumns.doc b/writerfilter/qa/documents/TableDifferentColumns.doc
new file mode 100644
index 000000000000..b1871cf3f158
--- /dev/null
+++ b/writerfilter/qa/documents/TableDifferentColumns.doc
Binary files differ
diff --git a/writerfilter/qa/documents/TableDifferentColumns.docx b/writerfilter/qa/documents/TableDifferentColumns.docx
new file mode 100644
index 000000000000..0503327ddecd
--- /dev/null
+++ b/writerfilter/qa/documents/TableDifferentColumns.docx
Binary files differ
diff --git a/writerfilter/qa/documents/TablePreferredWidth.doc b/writerfilter/qa/documents/TablePreferredWidth.doc
new file mode 100644
index 000000000000..a436d441c377
--- /dev/null
+++ b/writerfilter/qa/documents/TablePreferredWidth.doc
Binary files differ
diff --git a/writerfilter/qa/documents/TablePreferredWidth.docx b/writerfilter/qa/documents/TablePreferredWidth.docx
new file mode 100644
index 000000000000..719b3888a018
--- /dev/null
+++ b/writerfilter/qa/documents/TablePreferredWidth.docx
Binary files differ
diff --git a/writerfilter/qa/documents/TableRowProperties.doc b/writerfilter/qa/documents/TableRowProperties.doc
new file mode 100644
index 000000000000..ee3e845adda4
--- /dev/null
+++ b/writerfilter/qa/documents/TableRowProperties.doc
Binary files differ
diff --git a/writerfilter/qa/documents/TableRowProperties.docx b/writerfilter/qa/documents/TableRowProperties.docx
new file mode 100644
index 000000000000..775d63c97b34
--- /dev/null
+++ b/writerfilter/qa/documents/TableRowProperties.docx
Binary files differ
diff --git a/writerfilter/qa/documents/VertAlign1.doc b/writerfilter/qa/documents/VertAlign1.doc
new file mode 100644
index 000000000000..57158b6f2d61
--- /dev/null
+++ b/writerfilter/qa/documents/VertAlign1.doc
Binary files differ
diff --git a/writerfilter/qa/documents/WordOLE.docx b/writerfilter/qa/documents/WordOLE.docx
new file mode 100644
index 000000000000..4cf08d4252ac
--- /dev/null
+++ b/writerfilter/qa/documents/WordOLE.docx
Binary files differ
diff --git a/writerfilter/qa/documents/align1.doc b/writerfilter/qa/documents/align1.doc
new file mode 100644
index 000000000000..9317432b390b
--- /dev/null
+++ b/writerfilter/qa/documents/align1.doc
Binary files differ
diff --git a/writerfilter/qa/documents/bookmark2.doc b/writerfilter/qa/documents/bookmark2.doc
new file mode 100644
index 000000000000..83cdcadff201
--- /dev/null
+++ b/writerfilter/qa/documents/bookmark2.doc
Binary files differ
diff --git a/writerfilter/qa/documents/docx/numbering/num-1.docx b/writerfilter/qa/documents/docx/numbering/num-1.docx
new file mode 100644
index 000000000000..b5e5ffb0b20c
--- /dev/null
+++ b/writerfilter/qa/documents/docx/numbering/num-1.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/pictures/Word DocumentOffice 2007 Format Sample6.docx b/writerfilter/qa/documents/docx/pictures/Word DocumentOffice 2007 Format Sample6.docx
new file mode 100644
index 000000000000..eb0d4c256c73
--- /dev/null
+++ b/writerfilter/qa/documents/docx/pictures/Word DocumentOffice 2007 Format Sample6.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/pictures/i97645 New example.docx b/writerfilter/qa/documents/docx/pictures/i97645 New example.docx
new file mode 100644
index 000000000000..6cda8590ad21
--- /dev/null
+++ b/writerfilter/qa/documents/docx/pictures/i97645 New example.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/pictures/test-image.docx b/writerfilter/qa/documents/docx/pictures/test-image.docx
new file mode 100644
index 000000000000..fff6424514a4
--- /dev/null
+++ b/writerfilter/qa/documents/docx/pictures/test-image.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/pictures/test-image1.docx b/writerfilter/qa/documents/docx/pictures/test-image1.docx
new file mode 100644
index 000000000000..bdcc8e088210
--- /dev/null
+++ b/writerfilter/qa/documents/docx/pictures/test-image1.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/pictures/test.docx b/writerfilter/qa/documents/docx/pictures/test.docx
new file mode 100644
index 000000000000..72e3c01f3fda
--- /dev/null
+++ b/writerfilter/qa/documents/docx/pictures/test.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/redlines/test-review-brk.docx b/writerfilter/qa/documents/docx/redlines/test-review-brk.docx
new file mode 100644
index 000000000000..7c884505f19e
--- /dev/null
+++ b/writerfilter/qa/documents/docx/redlines/test-review-brk.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/redlines/test-review-para.docx b/writerfilter/qa/documents/docx/redlines/test-review-para.docx
new file mode 100644
index 000000000000..9bb87be947bf
--- /dev/null
+++ b/writerfilter/qa/documents/docx/redlines/test-review-para.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/redlines/test-review-stack.docx b/writerfilter/qa/documents/docx/redlines/test-review-stack.docx
new file mode 100644
index 000000000000..18b3e3063ea6
--- /dev/null
+++ b/writerfilter/qa/documents/docx/redlines/test-review-stack.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/Table in B2.docx b/writerfilter/qa/documents/docx/tables/Table in B2.docx
new file mode 100644
index 000000000000..4295cec35ff4
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/Table in B2.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/nested-tables.docx b/writerfilter/qa/documents/docx/tables/nested-tables.docx
new file mode 100644
index 000000000000..844b29de8517
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/nested-tables.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/nested-tables2.docx b/writerfilter/qa/documents/docx/tables/nested-tables2.docx
new file mode 100644
index 000000000000..0602ba4fa703
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/nested-tables2.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/nested-tables3.docx b/writerfilter/qa/documents/docx/tables/nested-tables3.docx
new file mode 100644
index 000000000000..7b61d147237c
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/nested-tables3.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/nested-tables4.docx b/writerfilter/qa/documents/docx/tables/nested-tables4.docx
new file mode 100644
index 000000000000..6a17180a4ef4
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/nested-tables4.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/nested-tables5.docx b/writerfilter/qa/documents/docx/tables/nested-tables5.docx
new file mode 100644
index 000000000000..2247b64a7621
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/nested-tables5.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/parentinvguid.docx b/writerfilter/qa/documents/docx/tables/parentinvguid.docx
new file mode 100644
index 000000000000..8f859fe43a59
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/parentinvguid.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/table in A1.docx b/writerfilter/qa/documents/docx/tables/table in A1.docx
new file mode 100644
index 000000000000..d4161eaaa1ff
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/table in A1.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/table-styles.docx b/writerfilter/qa/documents/docx/tables/table-styles.docx
new file mode 100644
index 000000000000..2136f9d0f4fe
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/table-styles.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/test-grid.docx b/writerfilter/qa/documents/docx/tables/test-grid.docx
new file mode 100644
index 000000000000..09f95d1a0982
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/test-grid.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/test-paras.docx b/writerfilter/qa/documents/docx/tables/test-paras.docx
new file mode 100644
index 000000000000..0cef4ae05a5b
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/test-paras.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/test-simple.docx b/writerfilter/qa/documents/docx/tables/test-simple.docx
new file mode 100644
index 000000000000..2c0c08427d3d
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/test-simple.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/two-tables.docx b/writerfilter/qa/documents/docx/tables/two-tables.docx
new file mode 100644
index 000000000000..d2e99d3ac9ae
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/two-tables.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/updatejpegprocessing.docx b/writerfilter/qa/documents/docx/tables/updatejpegprocessing.docx
new file mode 100644
index 000000000000..f62eb61dfdcb
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/updatejpegprocessing.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/tables/~$sted-tables3.docx b/writerfilter/qa/documents/docx/tables/~$sted-tables3.docx
new file mode 100644
index 000000000000..bfea337b7db7
--- /dev/null
+++ b/writerfilter/qa/documents/docx/tables/~$sted-tables3.docx
Binary files differ
diff --git a/writerfilter/qa/documents/docx/test-page-format.docx b/writerfilter/qa/documents/docx/test-page-format.docx
new file mode 100644
index 000000000000..eba8dea3e126
--- /dev/null
+++ b/writerfilter/qa/documents/docx/test-page-format.docx
Binary files differ
diff --git a/writerfilter/qa/documents/fields.doc b/writerfilter/qa/documents/fields.doc
new file mode 100755
index 000000000000..8ad1a3738c0c
--- /dev/null
+++ b/writerfilter/qa/documents/fields.doc
Binary files differ
diff --git a/writerfilter/qa/documents/fields.docx b/writerfilter/qa/documents/fields.docx
new file mode 100755
index 000000000000..4eaa60393269
--- /dev/null
+++ b/writerfilter/qa/documents/fields.docx
@@ -0,0 +1 @@
+PK\"%ã·øåÙƒÑÚšl µw%ë=–“^i7+ÙÇä%¿g&á”0ÞAÉ6€l4¼¾ \ No newline at end of file
diff --git a/writerfilter/qa/documents/multimerge2.docx b/writerfilter/qa/documents/multimerge2.docx
new file mode 100644
index 000000000000..8f594c1376b4
--- /dev/null
+++ b/writerfilter/qa/documents/multimerge2.docx
@@ -0,0 +1,2 @@
+PKÀQ¥òÑ
+¤×8ãAÈO1~ÛëÝqé‚Ãk 6<A%³ç5}Þ*‰`Ë·k®’‰Œ–I)_:õƒ%ß1ÔÙœIsÒ É`ü C]9N°ë{#k¢VEÄWaI_ù¨¸òrai†¢æ€N_UZBÛ_£…è%¤Dž[S´+´Ûë?ª#áÆ@ú[Ü.zÒ9Ž>$N{9›êÍ+P9Y ¢†vuÇGD²ìÃï»ÆoR€”wàͳ¶ ÌIÊŠ~‰‰˜ \ No newline at end of file
diff --git a/writerfilter/qa/documents/runProperties.doc b/writerfilter/qa/documents/runProperties.doc
new file mode 100644
index 000000000000..b8b5854dffb8
--- /dev/null
+++ b/writerfilter/qa/documents/runProperties.doc
Binary files differ
diff --git a/writerfilter/qa/documents/runProperties.docx b/writerfilter/qa/documents/runProperties.docx
new file mode 100755
index 000000000000..8e14dc923ed1
--- /dev/null
+++ b/writerfilter/qa/documents/runProperties.docx
Binary files differ
diff --git a/writerfilter/qa/documents/table_4_4.doc b/writerfilter/qa/documents/table_4_4.doc
new file mode 100644
index 000000000000..ad8500dc245b
--- /dev/null
+++ b/writerfilter/qa/documents/table_4_4.doc
Binary files differ
diff --git a/writerfilter/qa/documents/table_4_4.docx b/writerfilter/qa/documents/table_4_4.docx
new file mode 100644
index 000000000000..484d7f15070b
--- /dev/null
+++ b/writerfilter/qa/documents/table_4_4.docx
Binary files differ
diff --git a/writerfilter/qa/documents/table_style.docx b/writerfilter/qa/documents/table_style.docx
new file mode 100644
index 000000000000..3cf6e9fbdd0a
--- /dev/null
+++ b/writerfilter/qa/documents/table_style.docx
Binary files differ
diff --git a/writerfilter/source/dmapper/BorderHandler.cxx b/writerfilter/source/dmapper/BorderHandler.cxx
new file mode 100644
index 000000000000..67f8e65bafb6
--- /dev/null
+++ b/writerfilter/source/dmapper/BorderHandler.cxx
@@ -0,0 +1,189 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <BorderHandler.hxx>
+#include <PropertyMap.hxx>
+#include <resourcemodel/QNameToString.hxx>
+#include <doctok/resourceids.hxx>
+#include <ConversionHelper.hxx>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <ooxml/resourceids.hxx>
+#include <dmapperLoggers.hxx>
+
+namespace writerfilter {
+
+namespace dmapper {
+
+using namespace ::com::sun::star;
+//using namespace ::std;
+
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+BorderHandler::BorderHandler( bool bOOXML ) :
+LoggedProperties(dmapper_logger, "BorderHandler"),
+m_nCurrentBorderPosition( BORDER_TOP ),
+m_nLineWidth(0),
+m_nLineType(0),
+m_nLineColor(0),
+m_nLineDistance(0),
+m_bOOXML( bOOXML )
+{
+ const int nBorderCount(BORDER_COUNT);
+ std::fill_n(m_aFilledLines, nBorderCount, false);
+ std::fill_n(m_aBorderLines, nBorderCount, table::BorderLine());
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+BorderHandler::~BorderHandler()
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void BorderHandler::lcl_attribute(Id rName, Value & rVal)
+{
+ sal_Int32 nIntValue = rVal.getInt();
+ /* WRITERFILTERSTATUS: table: BorderHandler_attributedata */
+ switch( rName )
+ {
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_rgbrc:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rVal.getProperties();
+ if( pProperties.get())
+ {
+ pProperties->resolve(*this);
+ ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor,
+ m_aBorderLines[m_nCurrentBorderPosition], m_bOOXML );
+ OSL_ENSURE(m_nCurrentBorderPosition < BORDER_COUNT, "too many border values");
+ ++m_nCurrentBorderPosition;
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_DPTLINEWIDTH: // 0x2871
+ // width of a single line in 1/8 pt, max of 32 pt -> twip * 5 / 2.
+ m_nLineWidth = ConversionHelper::convertTwipToMM100( nIntValue * 5 / 2 );
+ break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCTYPE: // 0x2872
+ m_nLineType = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Border_color:
+ case NS_rtf::LN_ICO: // 0x2873
+ m_nLineColor = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_DPTSPACE: // border distance in points
+ m_nLineDistance = ConversionHelper::convertTwipToMM100( nIntValue * 20 );
+ break;
+ case NS_rtf::LN_FSHADOW: // 0x2875
+ //if 1 then line has shadow - unsupported
+ case NS_rtf::LN_FFRAME: // 0x2876
+ case NS_rtf::LN_UNUSED2_15: // 0x2877
+ // ignored
+ break;
+ case NS_ooxml::LN_CT_Border_themeTint: break;
+ case NS_ooxml::LN_CT_Border_themeColor: break;
+ default:
+ OSL_ENSURE( false, "unknown attribute");
+ }
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void BorderHandler::lcl_sprm(Sprm & rSprm)
+{
+ /* WRITERFILTERSTATUS: table: BorderHandler_sprm */
+ switch( rSprm.getId())
+ {
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_top:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_left:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_bottom:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_right:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_insideH:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_insideV:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+ ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor,
+ m_aBorderLines[rSprm.getId() - NS_ooxml::LN_CT_TblBorders_top], m_bOOXML );
+
+ m_aFilledLines[ rSprm.getId( ) - NS_ooxml::LN_CT_TblBorders_top] = true;
+ }
+ break;
+ default:;
+ }
+}
+/*-- 24.04.2007 09:09:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyMapPtr BorderHandler::getProperties()
+{
+ static const PropertyIds aPropNames[BORDER_COUNT] =
+ {
+ PROP_TOP_BORDER,
+ PROP_LEFT_BORDER,
+ PROP_BOTTOM_BORDER,
+ PROP_RIGHT_BORDER,
+ META_PROP_HORIZONTAL_BORDER,
+ META_PROP_VERTICAL_BORDER
+ };
+ PropertyMapPtr pPropertyMap(new PropertyMap);
+ // don't fill in default properties
+ if( m_bOOXML || m_nCurrentBorderPosition )
+ {
+ for( sal_Int32 nProp = 0; nProp < BORDER_COUNT; ++nProp)
+ {
+ if ( m_aFilledLines[nProp] ) {
+ pPropertyMap->Insert( aPropNames[nProp], false, uno::makeAny( m_aBorderLines[nProp] ) );
+ }
+ }
+ }
+ return pPropertyMap;
+}
+/*-- 14.11.2007 12:42:52---------------------------------------------------
+ used only in OOXML import
+ -----------------------------------------------------------------------*/
+table::BorderLine BorderHandler::getBorderLine()
+{
+ table::BorderLine aBorderLine;
+ ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor, aBorderLine, m_bOOXML );
+ return aBorderLine;
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/BorderHandler.hxx b/writerfilter/source/dmapper/BorderHandler.hxx
new file mode 100644
index 000000000000..fe6e3549feba
--- /dev/null
+++ b/writerfilter/source/dmapper/BorderHandler.hxx
@@ -0,0 +1,81 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_BORDERHANDLER_HXX
+#define INCLUDED_BORDERHANDLER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+#include <boost/shared_ptr.hpp>
+#include <com/sun/star/table/BorderLine.hpp>
+
+namespace writerfilter {
+namespace dmapper
+{
+class PropertyMap;
+class WRITERFILTER_DLLPRIVATE BorderHandler : public LoggedProperties
+{
+public:
+ //todo: order is a guess
+ enum BorderPosition
+ {
+ BORDER_TOP,
+ BORDER_LEFT,
+ BORDER_BOTTOM,
+ BORDER_RIGHT,
+ BORDER_HORIZONTAL,
+ BORDER_VERTICAL,
+ BORDER_COUNT
+ };
+
+private:
+ sal_Int8 m_nCurrentBorderPosition;
+ //values of the current border
+ sal_Int32 m_nLineWidth;
+ sal_Int32 m_nLineType;
+ sal_Int32 m_nLineColor;
+ sal_Int32 m_nLineDistance;
+ bool m_bOOXML;
+
+ bool m_aFilledLines[BORDER_COUNT];
+ ::com::sun::star::table::BorderLine m_aBorderLines[BORDER_COUNT];
+
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+public:
+ BorderHandler( bool bOOXML );
+ virtual ~BorderHandler();
+
+ ::boost::shared_ptr<PropertyMap> getProperties();
+ ::com::sun::star::table::BorderLine getBorderLine();
+ sal_Int32 getLineDistance() const { return m_nLineDistance;}
+};
+typedef boost::shared_ptr< BorderHandler > BorderHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/CellColorHandler.cxx b/writerfilter/source/dmapper/CellColorHandler.cxx
new file mode 100644
index 000000000000..f72d4dd0d66b
--- /dev/null
+++ b/writerfilter/source/dmapper/CellColorHandler.cxx
@@ -0,0 +1,237 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <CellColorHandler.hxx>
+#include <PropertyMap.hxx>
+#include <doctok/resourceids.hxx>
+#include <ConversionHelper.hxx>
+#include <ooxml/resourceids.hxx>
+#include "dmapperLoggers.hxx"
+
+#define OOXML_COLOR_AUTO 0x0a //todo: AutoColor needs symbol
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+using namespace ::writerfilter;
+//using namespace ::std;
+
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+CellColorHandler::CellColorHandler() :
+LoggedProperties(dmapper_logger, "CellColorHandler"),
+m_nShadowType( 0 ),
+m_nColor( 0xffffffff ),
+m_nFillColor( 0xffffffff ),
+m_bParagraph( false )
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+CellColorHandler::~CellColorHandler()
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void CellColorHandler::lcl_attribute(Id rName, Value & rVal)
+{
+ sal_Int32 nIntValue = rVal.getInt();
+ (void)nIntValue;
+ (void)rName;
+ /* WRITERFILTERSTATUS: table: CellColor_attributedata */
+ switch( rName )
+ {
+ case NS_rtf::LN_cellTopColor:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_cellLeftColor:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_cellBottomColor:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_cellRightColor:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ // nIntValue contains the color, directly
+ break;
+ case NS_ooxml::LN_CT_Shd_val:
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ {
+ //might be clear, pct5...90, some hatch types
+ //TODO: The values need symbolic names!
+ m_nShadowType = nIntValue; //clear == 0, solid: 1, pct5: 2, pct50:8, pct95: x3c, horzStripe:0x0e, thinVertStripe: 0x15
+ }
+ break;
+ case NS_ooxml::LN_CT_Shd_fill:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ if( nIntValue == OOXML_COLOR_AUTO )
+ nIntValue = 0xffffff; //fill color auto means white
+ m_nFillColor = nIntValue;
+ break;
+ case NS_ooxml::LN_CT_Shd_color:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ if( nIntValue == OOXML_COLOR_AUTO )
+ nIntValue = 0; //shading color auto means black
+ //color of the shading
+ m_nColor = nIntValue;
+ break;
+// case NS_rtf::LN_rgbrc:
+// {
+// writerfilter::Reference<Properties>::Pointer_t pProperties = rVal.getProperties();
+// if( pProperties.get())
+// {
+// pProperties->resolve(*this);
+// //
+// }
+// }
+// break;
+ case NS_ooxml::LN_CT_Shd_themeFill:
+ case NS_ooxml::LN_CT_Shd_themeFillTint:
+ case NS_ooxml::LN_CT_Shd_themeFillShade:
+ // ignored
+ break;
+ default:
+ OSL_ENSURE( false, "unknown attribute");
+ }
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void CellColorHandler::lcl_sprm(Sprm & rSprm)
+{
+ (void)rSprm;
+}
+/*-- 24.04.2007 09:09:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+TablePropertyMapPtr CellColorHandler::getProperties()
+{
+ TablePropertyMapPtr pPropertyMap(new TablePropertyMap);
+//code from binary word filter
+ static const sal_Int32 eMSGrayScale[] =
+ {
+ // Nul-Brush
+ 0, // 0
+ // Solid-Brush
+ 1000, // 1
+ // percent values
+ 50, // 2
+ 100, // 3
+ 200, // 4
+ 250, // 5
+ 300, // 6
+ 400, // 7
+ 500, // 8
+ 600, // 9
+ 700, // 10
+ 750, // 11
+ 800, // 12
+ 900, // 13
+ 333, // 14 Dark Horizontal
+ 333, // 15 Dark Vertical
+ 333, // 16 Dark Forward Diagonal
+ 333, // 17 Dark Backward Diagonal
+ 333, // 18 Dark Cross
+ 333, // 19 Dark Diagonal Cross
+ 333, // 20 Horizontal
+ 333, // 21 Vertical
+ 333, // 22 Forward Diagonal
+ 333, // 23 Backward Diagonal
+ 333, // 24 Cross
+ 333, // 25 Diagonal Cross
+ // some undefined values
+ 500, // 26
+ 500, // 27
+ 500, // 28
+ 500, // 29
+ 500, // 30
+ 500, // 31
+ 500, // 32
+ 500, // 33
+ 500, // 34
+ // different shading types
+ 25, // 35
+ 75, // 36
+ 125, // 37
+ 150, // 38
+ 175, // 39
+ 225, // 40
+ 275, // 41
+ 325, // 42
+ 350, // 43
+ 375, // 44
+ 425, // 45
+ 450, // 46
+ 475, // 47
+ 525, // 48
+ 550, // 49
+ 575, // 50
+ 625, // 51
+ 650, // 52
+ 675, // 53
+ 725, // 54
+ 775, // 55
+ 825, // 56
+ 850, // 57
+ 875, // 58
+ 925, // 59
+ 950, // 60
+ 975, // 61
+ // und zu guter Letzt:
+ 970
+ };// 62
+ if( m_nShadowType >= (sal_Int32)(sizeof( eMSGrayScale ) / sizeof ( eMSGrayScale[ 0 ] )) )
+ m_nShadowType = 0;
+
+ sal_Int32 nWW8BrushStyle = eMSGrayScale[m_nShadowType];
+ sal_Int32 nApplyColor = 0;
+ if( !nWW8BrushStyle )
+ {
+ // Null-Brush
+ nApplyColor = m_nFillColor;
+ }
+ else
+ {
+ sal_Int32 nFore = m_nColor;
+ sal_Int32 nBack = m_nFillColor;
+
+ sal_uInt32 nRed = ((nFore & 0xff0000)>>0x10) * nWW8BrushStyle;
+ sal_uInt32 nGreen = ((nFore & 0xff00)>>0x8) * nWW8BrushStyle;
+ sal_uInt32 nBlue = (nFore & 0xff) * nWW8BrushStyle;
+ nRed += ((nBack & 0xff0000)>>0x10) * (1000L - nWW8BrushStyle);
+ nGreen += ((nBack & 0xff00)>>0x8)* (1000L - nWW8BrushStyle);
+ nBlue += (nBack & 0xff) * (1000L - nWW8BrushStyle);
+
+ nApplyColor = ( (nRed/1000) << 0x10 ) + ((nGreen/1000) << 8) + nBlue/1000;
+ }
+
+ pPropertyMap->Insert( m_bParagraph ? PROP_PARA_BACK_COLOR : PROP_BACK_COLOR, false,
+ uno::makeAny( nApplyColor ));
+ return pPropertyMap;
+}
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/CellColorHandler.hxx b/writerfilter/source/dmapper/CellColorHandler.hxx
new file mode 100644
index 000000000000..102449258550
--- /dev/null
+++ b/writerfilter/source/dmapper/CellColorHandler.hxx
@@ -0,0 +1,64 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_CELLCOLORHANDLER_HXX
+#define INCLUDED_CELLCOLORHANDLER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+#include <boost/shared_ptr.hpp>
+//#include <com/sun/star/table/TableBorder.hpp>
+#include <com/sun/star/table/BorderLine.hpp>
+
+namespace writerfilter {
+namespace dmapper
+{
+class TablePropertyMap;
+class WRITERFILTER_DLLPRIVATE CellColorHandler : public LoggedProperties
+{
+public:
+ sal_Int32 m_nShadowType;
+ sal_Int32 m_nColor;
+ sal_Int32 m_nFillColor;
+ bool m_bParagraph;
+
+private:
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+public:
+ CellColorHandler( );
+ virtual ~CellColorHandler();
+
+ ::boost::shared_ptr<TablePropertyMap> getProperties();
+
+ void setParagraph() { m_bParagraph = true; }
+};
+typedef boost::shared_ptr< CellColorHandler > CellColorHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/CellMarginHandler.cxx b/writerfilter/source/dmapper/CellMarginHandler.cxx
new file mode 100644
index 000000000000..645755cc4c63
--- /dev/null
+++ b/writerfilter/source/dmapper/CellMarginHandler.cxx
@@ -0,0 +1,122 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <CellMarginHandler.hxx>
+#include <PropertyMap.hxx>
+#include <doctok/resourceids.hxx>
+#include <ConversionHelper.hxx>
+#include <ooxml/resourceids.hxx>
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+using namespace ::writerfilter;
+//using namespace ::std;
+
+/*-- 18.02.2008 12:36:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+CellMarginHandler::CellMarginHandler() :
+LoggedProperties(dmapper_logger, "CellMarginHandler"),
+m_nValue( 0 ),
+m_nLeftMargin( 0 ),
+m_bLeftMarginValid( false ),
+m_nRightMargin( 0 ),
+m_bRightMarginValid( false ),
+m_nTopMargin( 0 ),
+m_bTopMarginValid( false ),
+m_nBottomMargin( 0 ),
+m_bBottomMarginValid( false )
+{
+}
+/*-- 18.02.2008 12:36:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+CellMarginHandler::~CellMarginHandler()
+{
+}
+/*-- 18.02.2008 12:36:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void CellMarginHandler::lcl_attribute(Id rName, Value & rVal)
+{
+ sal_Int32 nIntValue = rVal.getInt();
+ (void)nIntValue;
+ (void)rName;
+ /* WRITERFILTERSTATUS: table: CellColor_attributedata */
+ switch( rName )
+ {
+ case NS_ooxml::LN_CT_TblWidth_w:
+ m_nValue = ConversionHelper::convertTwipToMM100( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_TblWidth_type:
+ OSL_ENSURE( NS_ooxml::LN_Value_ST_TblWidth_dxa == sal::static_int_cast<Id>(nIntValue), "cell margins work for absolute values, only");
+ break;
+ default:
+ OSL_ENSURE( false, "unknown attribute");
+ }
+}
+/*-- 18.02.2008 12:36:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void CellMarginHandler::lcl_sprm(Sprm & rSprm)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ pProperties.get()->resolve( *this );
+ switch( rSprm.getId() )
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_top:
+ m_nTopMargin = m_nValue;
+ m_bTopMarginValid = true;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_left:
+ m_nLeftMargin = m_nValue;
+ m_bLeftMarginValid = true;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_bottom:
+ m_nBottomMargin = m_nValue;
+ m_bBottomMarginValid = true;
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_right:
+ m_nRightMargin = m_nValue;
+ m_bRightMarginValid = true;
+ break;
+ default:
+ OSL_ENSURE( false, "unknown attribute");
+ }
+ }
+ m_nValue = 0;
+}
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/CellMarginHandler.hxx b/writerfilter/source/dmapper/CellMarginHandler.hxx
new file mode 100644
index 000000000000..3d2512675683
--- /dev/null
+++ b/writerfilter/source/dmapper/CellMarginHandler.hxx
@@ -0,0 +1,69 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_CELLMARGINHANDLER_HXX
+#define INCLUDED_CELLMARGINHANDLER_HXX
+
+#ifndef INCLUDED_WRITERFILTERDLLAPI_H
+#include <WriterFilterDllApi.hxx>
+#endif
+#include <resourcemodel/LoggedResources.hxx>
+#include <boost/shared_ptr.hpp>
+
+namespace writerfilter {
+namespace dmapper
+{
+class TablePropertyMap;
+class WRITERFILTER_DLLPRIVATE CellMarginHandler : public LoggedProperties
+{
+private:
+ sal_Int32 m_nValue;
+
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+public:
+ sal_Int32 m_nLeftMargin;
+ bool m_bLeftMarginValid;
+ sal_Int32 m_nRightMargin;
+ bool m_bRightMarginValid;
+ sal_Int32 m_nTopMargin;
+ bool m_bTopMarginValid;
+ sal_Int32 m_nBottomMargin;
+ bool m_bBottomMarginValid;
+
+public:
+ CellMarginHandler( );
+ virtual ~CellMarginHandler();
+
+ ::boost::shared_ptr<TablePropertyMap> getProperties();
+
+};
+typedef boost::shared_ptr< CellMarginHandler > CellMarginHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/ConversionHelper.cxx b/writerfilter/source/dmapper/ConversionHelper.cxx
new file mode 100644
index 000000000000..b8988110c59e
--- /dev/null
+++ b/writerfilter/source/dmapper/ConversionHelper.cxx
@@ -0,0 +1,691 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <ConversionHelper.hxx>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <com/sun/star/lang/Locale.hpp>
+#include <com/sun/star/text/HoriOrientation.hpp>
+#include <com/sun/star/style/NumberingType.hpp>
+#include <ooxml/resourceids.hxx>
+#include <tools/color.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <algorithm>
+#include <functional>
+
+using namespace com::sun::star;
+
+namespace writerfilter {
+namespace dmapper{
+namespace ConversionHelper{
+
+#define TWIP_TO_MM100(TWIP) ((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L))
+
+//line definitions in 1/100 mm
+#define LINE_WIDTH_0 2
+#define LINE_WIDTH_1 36
+#define LINE_WIDTH_2 89
+#define LINE_WIDTH_3 142
+#define LINE_WIDTH_4 177
+#define LINE_WIDTH_5 18
+
+#define DOUBLE_LINE0_OUT LINE_WIDTH_0
+#define DOUBLE_LINE0_IN LINE_WIDTH_0
+#define DOUBLE_LINE0_DIST LINE_WIDTH_1
+
+#define DOUBLE_LINE1_OUT LINE_WIDTH_1
+#define DOUBLE_LINE1_IN LINE_WIDTH_1
+#define DOUBLE_LINE1_DIST LINE_WIDTH_1
+
+#define DOUBLE_LINE2_OUT LINE_WIDTH_2
+#define DOUBLE_LINE2_IN LINE_WIDTH_2
+#define DOUBLE_LINE2_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE3_OUT LINE_WIDTH_2
+#define DOUBLE_LINE3_IN LINE_WIDTH_1
+#define DOUBLE_LINE3_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE4_OUT LINE_WIDTH_1
+#define DOUBLE_LINE4_IN LINE_WIDTH_2
+#define DOUBLE_LINE4_DIST LINE_WIDTH_1
+
+#define DOUBLE_LINE5_OUT LINE_WIDTH_3
+#define DOUBLE_LINE5_IN LINE_WIDTH_2
+#define DOUBLE_LINE5_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE6_OUT LINE_WIDTH_2
+#define DOUBLE_LINE6_IN LINE_WIDTH_3
+#define DOUBLE_LINE6_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE7_OUT LINE_WIDTH_0
+#define DOUBLE_LINE7_IN LINE_WIDTH_0
+#define DOUBLE_LINE7_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE8_OUT LINE_WIDTH_1
+#define DOUBLE_LINE8_IN LINE_WIDTH_0
+#define DOUBLE_LINE8_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE9_OUT LINE_WIDTH_2
+#define DOUBLE_LINE9_IN LINE_WIDTH_0
+#define DOUBLE_LINE9_DIST LINE_WIDTH_2
+
+#define DOUBLE_LINE10_OUT LINE_WIDTH_3
+#define DOUBLE_LINE10_IN LINE_WIDTH_0
+#define DOUBLE_LINE10_DIST LINE_WIDTH_2
+
+sal_Int32 MakeBorderLine( sal_Int32 nSprmValue, table::BorderLine& rToFill )
+{
+ //TODO: Lines are always solid
+ //Border
+ //borders are defined as:
+ // 0x XX XX XX XX
+ // || || || ||
+ // || || || ---- Line width in 1/8 pt
+ // || || ||
+ // || || ------- Line type: 0 - none 1 - single ... 25 - engrave 3D and 64 - 230 page borders
+ // || ||
+ // || ---------- Line color
+ // ||
+ // ------------- seven bits line space
+ // -------------- first bit: with shading
+ sal_Int16 nLineThicknessTwip = (sal_Int16)((nSprmValue & 0xff) * 20)/8L ;
+ sal_Int32 nLineType = ((nSprmValue & 0xff00) >> 8);
+ sal_Int32 nLineColor = (nSprmValue & 0xff0000)>>16;
+ sal_Int32 nLineDistance = (((nSprmValue & 0x3f000000)>>24) * 2540 + 36)/72L;
+ sal_Int32 nLineThickness = TWIP_TO_MM100(nLineThicknessTwip);
+ MakeBorderLine( nLineThickness, nLineType, nLineColor, rToFill, false);
+ return nLineDistance;
+}
+void MakeBorderLine( sal_Int32 nLineThickness, sal_Int32 nLineType,
+ sal_Int32 nLineColor,
+ table::BorderLine& rToFill, bool bIsOOXML )
+{
+ static const sal_Int32 aBorderDefColor[] =
+ {
+ COL_AUTO, COL_BLACK, COL_LIGHTBLUE, COL_LIGHTCYAN, COL_LIGHTGREEN,
+ COL_LIGHTMAGENTA, COL_LIGHTRED, COL_YELLOW, COL_WHITE, COL_BLUE,
+ COL_CYAN, COL_GREEN, COL_MAGENTA, COL_RED, COL_BROWN, COL_GRAY,
+ COL_LIGHTGRAY
+ };
+ //no auto color for borders
+ if(!nLineColor)
+ ++nLineColor;
+ if(!bIsOOXML && sal::static_int_cast<sal_uInt32>(nLineColor) <
+ sizeof(aBorderDefColor) / sizeof(nLineColor))
+ nLineColor = aBorderDefColor[nLineColor];
+
+ enum eBorderCode
+ {
+ single0, single1, single2, single3, single4, single5,
+ double0, double1, double2, double3, double4, double5, double6,
+ double7, double8, double9, double10,
+ none
+ } eCodeIdx = none;
+
+ // Map to our border types, we should use of one equal line
+ // thickness, or one of smaller thickness. If too small we
+ // can make the defecit up in additional white space or
+ // object size
+ switch(nLineType)
+ {
+ // First the single lines
+ case 1: break;
+ case 2:
+ case 5:
+ // and the unsupported special cases which we map to a single line
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ case 22:
+ // or if in necessary by a double line
+ case 24:
+ case 25:
+ if( nLineThickness < 10)
+ eCodeIdx = single0;// 1 Twip for us
+ else if( nLineThickness < 20)
+ eCodeIdx = single5;// 10 Twips for us
+ else if (nLineThickness < 50)
+ eCodeIdx = single1;// 20 Twips
+ else if (nLineThickness < 80)
+ eCodeIdx = single2;// 50
+ else if (nLineThickness < 100)
+ eCodeIdx = single3;// 80
+ else if (nLineThickness < 150)
+ eCodeIdx = single4;// 100
+ // Hack: for the quite thick lines we must paint double lines,
+ // because our singles lines don't come thicker than 5 points.
+ else if (nLineThickness < 180)
+ eCodeIdx = double2;// 150
+ else
+ eCodeIdx = double5;// 180
+ break;
+ // then the shading beams which we represent by a double line
+ case 23:
+ eCodeIdx = double1;
+ break;
+ // then the double lines, for which we have good matches
+ case 3:
+ case 10: //Don't have tripple so use double
+ if (nLineThickness < 60)
+ eCodeIdx = double0;// 22 Twips for us
+ else if (nLineThickness < 135)
+ eCodeIdx = double7;// some more space
+ else if (nLineThickness < 180)
+ eCodeIdx = double1;// 60
+ else
+ eCodeIdx = double2;// 150
+ break;
+ case 11:
+ eCodeIdx = double4;// 90 Twips for us
+ break;
+ case 12:
+ case 13: //Don't have thin thick thin, so use thick thin
+ if (nLineThickness < 87)
+ eCodeIdx = double8;// 71 Twips for us
+ else if (nLineThickness < 117)
+ eCodeIdx = double9;// 101
+ else if (nLineThickness < 166)
+ eCodeIdx = double10;// 131
+ else
+ eCodeIdx = double5;// 180
+ break;
+ case 14:
+ if (nLineThickness < 46)
+ eCodeIdx = double0;// 22 Twips for us
+ else if (nLineThickness < 76)
+ eCodeIdx = double1;// 60
+ else if (nLineThickness < 121)
+ eCodeIdx = double4;// 90
+ else if (nLineThickness < 166)
+ eCodeIdx = double2;// 150
+ else
+ eCodeIdx = double6;// 180
+ break;
+ case 15:
+ case 16: //Don't have thin thick thin, so use thick thin
+ if (nLineThickness < 46)
+ eCodeIdx = double0;// 22 Twips for us
+ else if (nLineThickness < 76)
+ eCodeIdx = double1;// 60
+ else if (nLineThickness < 121)
+ eCodeIdx = double3;// 90
+ else if (nLineThickness < 166)
+ eCodeIdx = double2;// 150
+ else
+ eCodeIdx = double5;// 180
+ break;
+ case 17:
+ if (nLineThickness < 46)
+ eCodeIdx = double0;// 22 Twips for us
+ else if (nLineThickness < 72)
+ eCodeIdx = double7;// 52
+ else if (nLineThickness < 137)
+ eCodeIdx = double4;// 90
+ else
+ eCodeIdx = double6;// 180
+ break;
+ case 18:
+ case 19: //Don't have thin thick thin, so use thick thin
+ if (nLineThickness < 46)
+ eCodeIdx = double0;// 22 Twips for us
+ else if (nLineThickness < 62)
+ eCodeIdx = double7;// 52
+ else if (nLineThickness < 87)
+ eCodeIdx = double8;// 71
+ else if (nLineThickness < 117)
+ eCodeIdx = double9;// 101
+ else if (nLineThickness < 156)
+ eCodeIdx = double10;// 131
+ else
+ eCodeIdx = double5;// 180
+ break;
+ case 20:
+ if (nLineThickness < 46)
+ eCodeIdx = single1; // 20 Twips for us
+ else
+ eCodeIdx = double1;// 60
+ break;
+ case 21:
+ eCodeIdx = double1;// 60 Twips for us
+ break;
+ case 0:
+ case 255:
+ eCodeIdx = none;
+ break;
+ default:
+ eCodeIdx = single0;
+ break;
+ }
+ struct BorderDefinition
+ {
+ sal_Int16 nOut;
+ sal_Int16 nIn;
+ sal_Int16 nDist;
+ };
+
+
+ static const BorderDefinition aLineTab[] =
+ {
+ /* 0*/ { LINE_WIDTH_0, 0, 0 },
+ /* 1*/ { LINE_WIDTH_1, 0, 0 },
+ /* 2*/ { LINE_WIDTH_2, 0, 0 },
+ /* 3*/ { LINE_WIDTH_3, 0, 0 },
+ /* 4*/ { LINE_WIDTH_4, 0, 0 },
+ /* 5*/ { LINE_WIDTH_5, 0, 0 },
+ /* 6*/ { DOUBLE_LINE0_OUT, DOUBLE_LINE0_IN, DOUBLE_LINE0_DIST },
+ /* 7*/ { DOUBLE_LINE1_OUT, DOUBLE_LINE1_IN, DOUBLE_LINE1_DIST },
+ /* 8*/ { DOUBLE_LINE2_OUT, DOUBLE_LINE2_IN, DOUBLE_LINE2_DIST },
+ /* 9*/ { DOUBLE_LINE3_OUT, DOUBLE_LINE3_IN, DOUBLE_LINE3_DIST },
+ /*10*/ { DOUBLE_LINE4_OUT, DOUBLE_LINE4_IN, DOUBLE_LINE4_DIST },
+ /*11*/ { DOUBLE_LINE5_OUT, DOUBLE_LINE5_IN, DOUBLE_LINE5_DIST },
+ /*12*/ { DOUBLE_LINE6_OUT, DOUBLE_LINE6_IN, DOUBLE_LINE6_DIST },
+ /*13*/ { DOUBLE_LINE7_OUT, DOUBLE_LINE7_IN, DOUBLE_LINE7_DIST },
+ /*14*/ { DOUBLE_LINE8_OUT, DOUBLE_LINE8_IN, DOUBLE_LINE8_DIST },
+ /*15*/ { DOUBLE_LINE9_OUT, DOUBLE_LINE9_IN, DOUBLE_LINE9_DIST },
+ /*16*/ { DOUBLE_LINE10_OUT,DOUBLE_LINE10_IN,DOUBLE_LINE10_DIST},
+ /*17*/ { 0, 0, 0 }
+ };
+
+ rToFill.Color = nLineColor;
+ if( nLineType == 1)
+ {
+ rToFill.InnerLineWidth = 0;
+ rToFill.OuterLineWidth = sal_Int16(nLineThickness);
+ rToFill.LineDistance = 0;
+
+ }
+ else
+ {
+ rToFill.InnerLineWidth = aLineTab[eCodeIdx].nIn;
+ rToFill.OuterLineWidth = aLineTab[eCodeIdx].nOut;
+ rToFill.LineDistance = aLineTab[eCodeIdx].nDist;
+ }
+}
+
+void lcl_SwapQuotesInField(::rtl::OUString &rFmt)
+{
+ //Swap unescaped " and ' with ' and "
+ sal_Int32 nLen = rFmt.getLength();
+ ::rtl::OUStringBuffer aBuffer( rFmt.getStr() );
+ const sal_Unicode* pFmt = rFmt.getStr();
+ for (sal_Int32 nI = 0; nI < nLen; ++nI)
+ {
+ if ((pFmt[nI] == '\"') && (!nI || pFmt[nI-1] != '\\'))
+ aBuffer.setCharAt(nI, '\'');
+ else if ((pFmt[nI] == '\'') && (!nI || pFmt[nI-1] != '\\'))
+ aBuffer.setCharAt(nI, '\"');
+ }
+ rFmt = aBuffer.makeStringAndClear();
+}
+bool lcl_IsNotAM(::rtl::OUString& rFmt, sal_Int32 nPos)
+{
+ return (
+ (nPos == rFmt.getLength() - 1) ||
+ (
+ (rFmt.getStr()[nPos+1] != 'M') &&
+ (rFmt.getStr()[nPos+1] != 'm')
+ )
+ );
+}
+
+::rtl::OUString ConvertMSFormatStringToSO(
+ const ::rtl::OUString& rFormat, lang::Locale& rLocale, bool bHijri)
+{
+ ::rtl::OUString sFormat(rFormat);
+ lcl_SwapQuotesInField(sFormat);
+
+ //#102782#, #102815#, #108341# & #111944# have to work at the same time :-)
+ bool bForceJapanese(false);
+ bool bForceNatNum(false);
+ sal_Int32 nLen = sFormat.getLength();
+ sal_Int32 nI = 0;
+// const sal_Unicode* pFormat = sFormat.getStr();
+ ::rtl::OUStringBuffer aNewFormat( sFormat.getStr() );
+ while (nI < nLen)
+ {
+ if (aNewFormat.charAt(nI) == '\\')
+ nI++;
+ else if (aNewFormat.charAt(nI) == '\"')
+ {
+ ++nI;
+ //While not at the end and not at an unescaped end quote
+ while ((nI < nLen) && (!(aNewFormat.charAt(nI) == '\"') && (aNewFormat.charAt(nI-1) != '\\')))
+ ++nI;
+ }
+ else //normal unquoted section
+ {
+ sal_Unicode nChar = aNewFormat.charAt(nI);
+ if (nChar == 'O')
+ {
+ aNewFormat.setCharAt(nI, 'M');
+ bForceNatNum = true;
+ }
+ else if (nChar == 'o')
+ {
+ aNewFormat.setCharAt(nI, 'm');
+ bForceNatNum = true;
+ }
+ else if ((nChar == 'A') && lcl_IsNotAM(sFormat, nI))
+ {
+ aNewFormat.setCharAt(nI, 'D');
+ bForceNatNum = true;
+ }
+ else if ((nChar == 'g') || (nChar == 'G'))
+ bForceJapanese = true;
+ else if ((nChar == 'a') && lcl_IsNotAM(sFormat, nI))
+ bForceJapanese = true;
+ else if (nChar == 'E')
+ {
+ if ((nI != nLen-1) && (aNewFormat.charAt(nI+1) == 'E'))
+ {
+ //todo: this cannot be the right way to replace a part of the string!
+ aNewFormat.setCharAt( nI, 'Y' );
+ aNewFormat.setCharAt( nI + 1, 'Y' );
+ aNewFormat.insert(nI + 2, ::rtl::OUString::createFromAscii("YY"));
+ nLen+=2;
+ nI+=3;
+ }
+ bForceJapanese = true;
+ }
+ else if (nChar == 'e')
+ {
+ if ((nI != nLen-1) && (aNewFormat.charAt(nI+1) == 'e'))
+ {
+ //todo: this cannot be the right way to replace a part of the string!
+ aNewFormat.setCharAt( nI, 'y' );
+ aNewFormat.setCharAt( nI + 1, 'y' );
+ aNewFormat.insert(nI + 2, ::rtl::OUString::createFromAscii("yy"));
+ nLen+=2;
+ nI+=3;
+ }
+ bForceJapanese = true;
+ }
+ else if (nChar == '/')
+ {
+ // MM We have to escape '/' in case it's used as a char
+ //todo: this cannot be the right way to replace a part of the string!
+ aNewFormat.setCharAt( nI, '\\' );
+ aNewFormat.insert(nI + 1, ::rtl::OUString::createFromAscii("/"));
+ nI++;
+ nLen++;
+ }
+ }
+ ++nI;
+ }
+
+ if (bForceNatNum)
+ bForceJapanese = true;
+
+ if (bForceJapanese)
+ {
+ rLocale.Language = ::rtl::OUString::createFromAscii("ja");
+ rLocale.Country = ::rtl::OUString::createFromAscii("JP");
+ }
+
+ if (bForceNatNum)
+ {
+ aNewFormat.insert( 0, ::rtl::OUString::createFromAscii("[NatNum1][$-411]"));
+ }
+
+ if (bHijri)
+ {
+ aNewFormat.insert( 0, ::rtl::OUString::createFromAscii("[~hijri]"));
+ }
+ return aNewFormat.makeStringAndClear();
+
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int32 convertTwipToMM100(sal_Int32 _t)
+{
+ return TWIP_TO_MM100( _t );
+}
+/*-- 09.08.2007 09:34:44---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int32 convertEMUToMM100(sal_Int32 _t)
+{
+ return _t / 360;
+}
+
+/*-- 21.11.2006 08:47:12---------------------------------------------------
+ contains a color from 0xTTRRGGBB to 0xTTRRGGBB
+ -----------------------------------------------------------------------*/
+sal_Int32 ConvertColor(sal_Int32 nWordColor)
+{
+ sal_uInt8
+ r(static_cast<sal_uInt8>(nWordColor&0xFF)),
+ g(static_cast<sal_uInt8>(((nWordColor)>>8)&0xFF)),
+ b(static_cast<sal_uInt8>((nWordColor>>16)&0xFF)),
+ t(static_cast<sal_uInt8>((nWordColor>>24)&0xFF));
+ sal_Int32 nRet = (t<<24) + (r<<16) + (g<<8) + b;
+ return nRet;
+}
+/*-- 27.06.2007 13:42:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int16 convertTableJustification( sal_Int32 nIntValue )
+{
+ sal_Int16 nOrient = text::HoriOrientation::LEFT_AND_WIDTH;
+ switch( nIntValue )
+ {
+ case 1 : nOrient = text::HoriOrientation::CENTER; break;
+ case 2 : nOrient = text::HoriOrientation::RIGHT; break;
+ case 0 :
+ //no break
+ default:;
+
+ }
+ return nOrient;
+}
+/*-- 06.08.2007 15:27:30---------------------------------------------------
+ conversion form xsd::DateTime
+ [-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm]
+ -----------------------------------------------------------------------*/
+com::sun::star::util::DateTime convertDateTime( const ::rtl::OUString& rDateTimeString )
+{
+ util::DateTime aRet( 0, 0, 0, 0, 1, 1, 1901 );
+ //
+ sal_Int32 nIndex = 0;
+ ::rtl::OUString sDate( rDateTimeString.getToken( 0, 'T', nIndex ));
+ sal_Int32 nDateIndex = 0;
+ aRet.Year = (sal_uInt16)sDate.getToken( 0, '-', nDateIndex ).toInt32();
+ if( nDateIndex > 0)
+ aRet.Month = (sal_uInt16)sDate.getToken( 0, '-', nDateIndex ).toInt32();
+ if( nDateIndex > 0)
+ aRet.Day = (sal_uInt16)sDate.getToken( 0, '-', nDateIndex ).toInt32();
+ ::rtl::OUString sTime;
+ if(nIndex > 0)
+ {
+ sTime = ( rDateTimeString.getToken( 0, 'Z', nIndex ));
+ sal_Int32 nTimeIndex = 0;
+ aRet.Hours = (sal_uInt16)sTime.getToken( 0, ':', nTimeIndex ).toInt32();
+ if( nTimeIndex > 0)
+ aRet.Minutes = (sal_uInt16)sTime.getToken( 0, ':', nTimeIndex ).toInt32();
+ if( nTimeIndex > 0)
+ {
+ ::rtl::OUString sSeconds = sTime.getToken( 0, ':', nTimeIndex );
+ nTimeIndex = 0;
+ aRet.Seconds = (sal_uInt16)sSeconds.getToken( 0, '.', nTimeIndex ).toInt32();
+ aRet.HundredthSeconds = (sal_uInt16)sSeconds.getToken( 0, '.', nTimeIndex ).toInt32();
+ }
+
+// todo: ignore time offset for a while - there's no time zone available
+// nIndex = 0;
+// ::rtl::OUString sOffset( rDateTimeString.getToken( 1, 'Z', nIndex ));
+// if( sOffset.getLength() )
+// {
+// add hour and minute offset and increase/decrease date if necessary
+// }
+ }
+ return aRet;
+}
+/*-- 05.03.2008 09:10:13---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int16 ConvertNumberingType(sal_Int32 nNFC)
+{
+ sal_Int16 nRet;
+ switch(nNFC)
+ {
+ case NS_ooxml::LN_Value_ST_NumberFormat_decimal:
+ case 0:
+ nRet = style::NumberingType::ARABIC;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_upperRoman:
+ case 1:
+ nRet = style::NumberingType::ROMAN_UPPER;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_lowerRoman:
+ case 2:
+ nRet = style::NumberingType::ROMAN_LOWER;
+ break;
+ case 3:
+ nRet = style::NumberingType::CHARS_UPPER_LETTER_N;
+ break;
+ case 4:
+ nRet = style::NumberingType::CHARS_LOWER_LETTER_N;
+ break;
+ case 5:
+ nRet = style::NumberingType::ARABIC;
+ break;//ORDINAL
+ case NS_ooxml::LN_Value_ST_NumberFormat_bullet:
+ case 23:
+ case 25:
+ nRet = style::NumberingType::CHAR_SPECIAL;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_none:
+ case 255:
+ nRet = style::NumberingType::NUMBER_NONE;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_upperLetter:
+ nRet = style::NumberingType::CHARS_UPPER_LETTER;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_lowerLetter:
+ nRet = style::NumberingType::CHARS_LOWER_LETTER;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_iroha:
+ nRet = style::NumberingType::IROHA_HALFWIDTH_JA;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_irohaFullWidth:
+ nRet = style::NumberingType::IROHA_FULLWIDTH_JA;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_aiueo:
+ nRet = style::NumberingType::AIU_HALFWIDTH_JA;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_aiueoFullWidth:
+ nRet = style::NumberingType::AIU_FULLWIDTH_JA;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_hebrew2:
+ nRet = style::NumberingType::CHARS_HEBREW;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_thaiLetters:
+ nRet = style::NumberingType::CHARS_THAI;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_russianLower:
+ nRet = style::NumberingType::CHARS_CYRILLIC_LOWER_LETTER_RU;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_russianUpper:
+ nRet = style::NumberingType::CHARS_CYRILLIC_UPPER_LETTER_RU;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedCircleChinese:
+ case NS_ooxml::LN_Value_ST_NumberFormat_ideographEnclosedCircle:
+ nRet = style::NumberingType::CIRCLE_NUMBER;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_ideographTraditional:
+ nRet = style::NumberingType::TIAN_GAN_ZH;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiac:
+ nRet = style::NumberingType::DI_ZI_ZH;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_ganada:
+ nRet = style::NumberingType::HANGUL_SYLLABLE_KO;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_chosung:
+ nRet = style::NumberingType::HANGUL_JAMO_KO;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital:
+ case NS_ooxml::LN_Value_ST_NumberFormat_koreanCounting:
+ case NS_ooxml::LN_Value_ST_NumberFormat_koreanDigital2:
+ nRet = style::NumberingType::NUMBER_HANGUL_KO;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_ideographLegalTraditional:
+ nRet = style::NumberingType::NUMBER_UPPER_ZH_TW;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_arabicAlpha:
+ nRet = style::NumberingType::CHARS_ARABIC;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_hindiVowels:
+ nRet = style::NumberingType::CHARS_NEPALI;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_japaneseLegal:
+ nRet = style::NumberingType::NUMBER_TRADITIONAL_JA;
+ break;
+ case NS_ooxml::LN_Value_ST_NumberFormat_chineseCounting:
+ case NS_ooxml::LN_Value_ST_NumberFormat_japaneseCounting:
+ case NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseCounting:
+ case NS_ooxml::LN_Value_ST_NumberFormat_ideographDigital:
+ nRet = style::NumberingType::NUMBER_LOWER_ZH;
+ break;
+ default: nRet = style::NumberingType::ARABIC;
+ }
+/* TODO: Lots of additional values are available - some are supported in the I18 framework
+ NS_ooxml::LN_Value_ST_NumberFormat_ordinal = 91682;
+ NS_ooxml::LN_Value_ST_NumberFormat_cardinalText = 91683;
+ NS_ooxml::LN_Value_ST_NumberFormat_ordinalText = 91684;
+ NS_ooxml::LN_Value_ST_NumberFormat_hex = 91685;
+ NS_ooxml::LN_Value_ST_NumberFormat_chicago = 91686;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth = 91691;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalHalfWidth = 91692;
+ NS_ooxml::LN_Value_ST_NumberFormat_japaneseDigitalTenThousand = 91694;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedCircle = 91695;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalFullWidth2 = 91696;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalZero = 91699;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedFullstop = 91703;
+ NS_ooxml::LN_Value_ST_NumberFormat_decimalEnclosedParen = 91704;
+ NS_ooxml::LN_Value_ST_NumberFormat_ideographZodiacTraditional = 91709;
+ NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseCountingThousand = 91712;
+ NS_ooxml::LN_Value_ST_NumberFormat_taiwaneseDigital = 91713;
+ NS_ooxml::LN_Value_ST_NumberFormat_chineseLegalSimplified = 91715;
+ NS_ooxml::LN_Value_ST_NumberFormat_chineseCountingThousand = 91716;
+ NS_ooxml::LN_Value_ST_NumberFormat_koreanLegal = 91719;
+ NS_ooxml::LN_Value_ST_NumberFormat_vietnameseCounting = 91721;
+ NS_ooxml::LN_Value_ST_NumberFormat_numberInDash = 91725;
+ NS_ooxml::LN_Value_ST_NumberFormat_arabicAbjad:
+ NS_ooxml::LN_Value_ST_NumberFormat_hebrew1 = 91726;
+ NS_ooxml::LN_Value_ST_NumberFormat_hindiConsonants = 91731;
+ NS_ooxml::LN_Value_ST_NumberFormat_hindiNumbers = 91732;
+ NS_ooxml::LN_Value_ST_NumberFormat_hindiCounting = 91733;
+ NS_ooxml::LN_Value_ST_NumberFormat_thaiNumbers = 91735;
+ NS_ooxml::LN_Value_ST_NumberFormat_thaiCounting = 91736;*/
+ return nRet;
+}
+
+
+} // namespace ConversionHelper
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/ConversionHelper.hxx b/writerfilter/source/dmapper/ConversionHelper.hxx
new file mode 100644
index 000000000000..27436f1769be
--- /dev/null
+++ b/writerfilter/source/dmapper/ConversionHelper.hxx
@@ -0,0 +1,64 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_DMAPPER_CONVERSIONHELPER_HXX
+#define INCLUDED_DMAPPER_CONVERSIONHELPER_HXX
+
+#include <sal/types.h>
+#include <rtl/ustring.hxx>
+#include <com/sun/star/util/DateTime.hpp>
+namespace com{ namespace sun{ namespace star{
+ namespace lang{
+ struct Locale;
+ }
+ namespace table{
+ struct BorderLine;
+}}}}
+
+namespace writerfilter {
+namespace dmapper{
+namespace ConversionHelper{
+
+ // create a border line and return the distance value
+ sal_Int32 MakeBorderLine( sal_Int32 nSprmValue, ::com::sun::star::table::BorderLine& rToFill );
+ void MakeBorderLine( sal_Int32 nLineThickness, sal_Int32 nLineType,
+ sal_Int32 nLineColor,
+ ::com::sun::star::table::BorderLine& rToFill, bool bIsOOXML );
+ //convert the number format string form MS format to SO format
+ ::rtl::OUString ConvertMSFormatStringToSO(
+ const ::rtl::OUString& rFormat, ::com::sun::star::lang::Locale& rLocale, bool bHijri);
+ sal_Int32 convertTwipToMM100(sal_Int32 _t);
+ // probably the most useless unit in the world - English Metric Units (EMU) 360 000 EMU == 1cm
+ sal_Int32 convertEMUToMM100(sal_Int32 _t);
+ sal_Int32 ConvertColor(sal_Int32 nWordColor );
+ sal_Int16 convertTableJustification( sal_Int32 nIntValue );
+ ::com::sun::star::util::DateTime convertDateTime( const ::rtl::OUString& rDateTimeString );
+ sal_Int16 ConvertNumberingType(sal_Int32 nNFC);
+
+} // namespace ConversionHelper
+} //namespace dmapper
+} // namespace writerfilter
+#endif
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
new file mode 100644
index 000000000000..fb36455fcd97
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -0,0 +1,4885 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "PageBordersHandler.hxx"
+
+#include <dmapper/DomainMapper.hxx>
+#include <resourcemodel/ResourceModelHelper.hxx>
+#include <DomainMapper_Impl.hxx>
+#include <ConversionHelper.hxx>
+#include <NumberingManager.hxx>
+#include <ThemeTable.hxx>
+#include <ModelEventListener.hxx>
+#include <MeasureHandler.hxx>
+#include <OLEHandler.hxx>
+#include <i18npool/mslangid.hxx>
+#include <i18npool/paper.hxx>
+#include <ooxml/OOXMLFastTokens.hxx>
+#include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
+#include <com/sun/star/document/XOOXMLDocumentPropertiesImporter.hpp>
+#include <com/sun/star/text/HoriOrientation.hpp>
+#include <com/sun/star/text/RelOrientation.hpp>
+#include <com/sun/star/text/VertOrientation.hpp>
+#include <com/sun/star/text/WrapTextMode.hpp>
+#include <com/sun/star/text/SizeType.hpp>
+#include <com/sun/star/text/XEndnotesSupplier.hpp>
+#include <com/sun/star/text/XFootnotesSupplier.hpp>
+#include <com/sun/star/text/XLineNumberingProperties.hpp>
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/text/XTextCursor.hpp>
+#include <com/sun/star/text/XTextPortionAppend.hpp>
+#include <com/sun/star/text/XParagraphAppend.hpp>
+#include <com/sun/star/text/FontEmphasis.hpp>
+#include <com/sun/star/awt/FontRelief.hpp>
+#include <com/sun/star/awt/FontWeight.hpp>
+#include <com/sun/star/awt/FontUnderline.hpp>
+#include <com/sun/star/awt/FontStrikeout.hpp>
+#include <com/sun/star/awt/FontSlant.hpp>
+#include <com/sun/star/container/XIndexReplace.hpp>
+#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/document/XEventBroadcaster.hpp>
+#include <com/sun/star/style/ParagraphAdjust.hpp>
+#include <com/sun/star/style/BreakType.hpp>
+#include <com/sun/star/style/CaseMap.hpp>
+#include <com/sun/star/style/LineSpacing.hpp>
+#include <com/sun/star/style/LineSpacingMode.hpp>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <com/sun/star/text/TextGridMode.hpp>
+#include <com/sun/star/text/XDocumentIndexesSupplier.hpp>
+#include <com/sun/star/text/WritingMode.hpp>
+#include <com/sun/star/text/WritingMode2.hpp>
+#include <com/sun/star/text/XFootnote.hpp>
+#include <com/sun/star/style/NumberingType.hpp>
+#include <comphelper/types.hxx>
+#include <comphelper/storagehelper.hxx>
+
+#include <rtl/ustrbuf.hxx>
+#include <boost/shared_ptr.hpp>
+#include <com/sun/star/uno/Any.hxx>
+#include <tools/color.hxx>
+#include <BorderHandler.hxx>
+#include <CellColorHandler.hxx>
+#include <SectionColumnHandler.hxx>
+#include <vector>
+#include <iostream>
+
+#if OSL_DEBUG_LEVEL > 0
+#include <resourcemodel/QNameToString.hxx>
+#endif
+
+#include <resourcemodel/TagLogger.hxx>
+
+using namespace ::com::sun::star;
+using namespace ::rtl;
+
+namespace writerfilter {
+
+using resourcemodel::resolveSprmProps;
+using resourcemodel::resolveAttributeProperties;
+
+namespace dmapper{
+
+TagLogger::Pointer_t dmapper_logger(TagLogger::getInstance("DOMAINMAPPER"));
+
+/* ---- Fridrich's mess begins here ---- */
+struct _PageSz
+{
+ sal_Int32 code;
+ sal_Int32 h;
+ bool orient;
+ sal_Int32 w;
+} CT_PageSz;
+
+
+/* ---- Fridrich's mess (hopefully) ends here ---- */
+
+/*-- 09.06.2006 09:52:11---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+DomainMapper::DomainMapper( const uno::Reference< uno::XComponentContext >& xContext,
+ uno::Reference< io::XInputStream > xInputStream,
+ uno::Reference< lang::XComponent > xModel,
+ SourceDocumentType eDocumentType) :
+LoggedProperties(dmapper_logger, "DomainMapper"),
+LoggedTable(dmapper_logger, "DomainMapper"),
+LoggedStream(dmapper_logger, "DomainMapper"),
+ m_pImpl( new DomainMapper_Impl( *this, xContext, xModel, eDocumentType )),
+ mnBackgroundColor(0), mbIsHighlightSet(false)
+{
+ // #i24363# tab stops relative to indent
+ m_pImpl->SetDocumentSettingsProperty(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_TABS_RELATIVE_TO_INDENT ),
+ uno::makeAny( false ) );
+
+ m_pImpl->SetDocumentSettingsProperty(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_ADD_PARA_TABLE_SPACING ),
+ uno::makeAny( false ) );
+
+ //import document properties
+
+ try
+ {
+ uno::Reference< lang::XMultiServiceFactory > xFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW);
+ uno::Reference< embed::XStorage > xDocumentStorage =
+ (comphelper::OStorageHelper::GetStorageOfFormatFromInputStream(OFOPXML_STORAGE_FORMAT_STRING, xInputStream));
+
+ uno::Reference< uno::XInterface > xTemp = xContext->getServiceManager()->createInstanceWithContext(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.OOXMLDocumentPropertiesImporter")),
+ xContext);
+
+ uno::Reference< document::XOOXMLDocumentPropertiesImporter > xImporter( xTemp, uno::UNO_QUERY_THROW );
+ uno::Reference< document::XDocumentPropertiesSupplier > xPropSupplier( xModel, uno::UNO_QUERY_THROW);
+ xImporter->importProperties( xDocumentStorage, xPropSupplier->getDocumentProperties() );
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ }
+}
+/*-- 09.06.2006 09:52:12---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+DomainMapper::~DomainMapper()
+{
+ try
+ {
+ uno::Reference< text::XDocumentIndexesSupplier> xIndexesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
+ uno::Reference< container::XIndexAccess > xIndexes = xIndexesSupplier->getDocumentIndexes();
+ sal_Int32 nIndexes = xIndexes->getCount();
+ if( nIndexes )
+ {
+ //index update has to wait until first view is created
+ uno::Reference< document::XEventBroadcaster > xBroadcaster(xIndexesSupplier, uno::UNO_QUERY);
+ xBroadcaster->addEventListener(uno::Reference< document::XEventListener >(new ModelEventListener));
+ }
+
+
+ // Apply the document settings after everything else
+ m_pImpl->GetSettingsTable()->ApplyProperties( m_pImpl->GetTextDocument( ) );
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ }
+
+ delete m_pImpl;
+}
+/*-- 09.06.2006 09:52:12---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_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 );
+ else //if( !m_pImpl->getTableManager().attribute( nName, val) )
+ {
+
+
+ /* WRITERFILTERSTATUS: table: attributedata */
+ switch( nName )
+ {
+ /* attributes to be ignored */
+ case NS_rtf::LN_UNUSED1_3:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_UNUSED1_7:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_UNUSED8_3:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FWRITERESERVATION:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FLOADOVERRIDE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FFAREAST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCRYPTO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_NFIBBACK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LKEY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_ENVR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FMAC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FWORD97SAVED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCMAC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNFBPCHPFIRST_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNCHPFIRST_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_CPNBTECHP_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNFBPPAPFIRST_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNPAPFIRST_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_CPNBTEPAP_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNFBPLVCFIRST_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNLVCFIRST_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_CPNBTELVC_W6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_CBMAC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LPRODUCTCREATED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LPRODUCTREVISED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_CCPMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNFBPCHPFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNFBPPAPFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_PNFBPLVCFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCISLANDFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCISLANDLIM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTSHFORIG:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTSHFORIG:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFPAD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFPAD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFGLSY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFGLSY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFGLSY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFGLSY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFSEA:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFSEA:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCCMDS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBCMDS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFMCR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPRDRVR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPRDRVR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPRENVPORT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPRENVPORT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPRENVLAND:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPRENVLAND:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCWSS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBWSS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFPGDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFPGDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCAUTOSAVESOURCE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBAUTOSAVESOURCE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCDOAMOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCDOAMOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCDOAHDR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCDOAHDR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPMS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPMS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFPGDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFPGDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFWKB:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFWKB:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFSPL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFSPL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTWUSER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTWUSER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCUNUSED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBUNUSED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFINTLFLD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFINTLFLD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCROUTESLIP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBROUTESLIP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBSAVEDBY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBSAVEDBY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFNM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFNM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCDOCUNDO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBDOCUNDO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCRGBUSE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBRGBUSE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCUSP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBUSP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCUSKF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBUSKF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCUPCRGBUSE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCUPCRGBUSE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCUPCUSP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCUPCUSP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLGOSL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLGOSL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCOCX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCOCX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_DWLOWDATETIME:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_DWHIGHDATETIME:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCASUMY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCASUMY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFGRAM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFGRAM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFUSSR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+
+ case NS_rtf::LN_ISTD: //index of applied style
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ //search for the style with the given id and apply it
+ //as CharStyleName or ParaStyleName
+ //if the style is a user defined style then it must have an ISTD - built-in styles might not have it
+ StyleSheetTablePtr pStyleSheets = m_pImpl->GetStyleSheetTable();
+ ::rtl::OUString sValue = ::rtl::OUString::valueOf(nIntValue, 16);
+ const StyleSheetEntryPtr pEntry = pStyleSheets->FindStyleSheetByISTD(sValue);
+ if( pEntry.get( ) )
+ {
+ bool bParaStyle = (pEntry->nStyleTypeCode == STYLE_TYPE_PARA);
+ if(bParaStyle)
+ m_pImpl->SetCurrentParaStyleId(::rtl::OUString::valueOf(static_cast<sal_Int32>(nIntValue), 16));
+ if (m_pImpl->GetTopContext() && m_pImpl->GetTopContextType() != CONTEXT_SECTION)
+ m_pImpl->GetTopContext()->Insert(
+ bParaStyle ?
+ PROP_PARA_STYLE_NAME : PROP_CHAR_STYLE_NAME,
+ true,
+ uno::makeAny(
+ m_pImpl->GetStyleSheetTable()->ConvertStyleName( pEntry->sStyleName ) ) );
+ }
+ }
+ break;
+ case NS_rtf::LN_ISTARTAT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_NFC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FLEGAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FNORESTART:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FIDENTSAV:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FCONVERTED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FTENTATIVE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_RGBXCHNUMS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_IXCHFOLLOW:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DXASPACE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DXAINDENT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CBGRPPRLCHPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CBGRPPRLPAPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LSID:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_TPLC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_RGISTD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FSIMPLELIST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_fAutoNum:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_fHybrid:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ILVL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FSTARTAT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FFORMATTING:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_UNSIGNED4_6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_clfolvl:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CBFFNM1:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_PRQ:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FTRUETYPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_WWEIGHT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CHS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ {
+ m_pImpl->GetFIB().SetLNCHS( nIntValue );
+ }
+ break;
+ case NS_rtf::LN_IXCHSZALT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_PANOSE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_STI:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FSCRATCH:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FINVALHEIGHT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FHASUPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FMASSCOPY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_SGC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ISTDBASE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CUPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ISTDNEXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BCHUPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FAUTOREDEF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FHIDDEN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CSTD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CBSTDBASEINFILE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FSTDSTYLENAMESWRITTEN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_UNUSED4_2:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_STIMAXWHENSAVED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ISTDMAXFIXEDWHENSAVED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_NVERBUILTINNAMESWHENSAVED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_RGFTCSTANDARDCHPSTSH:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_WIDENT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_NFIB:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_NPRODUCT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_LID:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_PNNEXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_FDOT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_FGLSY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_FCOMPLEX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_FHASPIC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CQUICKSAVES:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FENCRYPTED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FWHICHTBLSTM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FREADONLYRECOMMENDED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FEXTCHAR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FEMPTYSPECIAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FLOADOVERRIDEPAGE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FFUTURESAVEDUNDO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FSPARE0:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CHSTABLES:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCMIN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CSW:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_WMAGICCREATED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_WMAGICREVISED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_WMAGICCREATEDPRIVATE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_WMAGICREVISEDPRIVATE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LIDFE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CLW:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CCPTEXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_CCPFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CCPHDD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CCPATN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CCPEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CCPTXBX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CCPHDRTXBX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_PNCHPFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CPNBTECHP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_PNPAPFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CPNBTEPAP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_PNLVCFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CPNBTELVC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_CFCLCB:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTSHF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTSHF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFNDREF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFNDREF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFNDTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFNDTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFANDREF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFANDREF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFANDTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFANDTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFSED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFSED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFPHE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFPHE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFHDD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFHDD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFBTECHPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFBTECHPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_FCPLCFBTEPAPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFBTEPAPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFFFN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFFFN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDMOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDMOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDHDR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDHDR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_FCPLCFFLDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDATN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDATN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFBKMK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFBKMK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFBKF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFBKF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFBKL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFBKL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCDOP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBDOP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFASSOC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFASSOC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCCLX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBCLX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCGRPXSTATNOWNERS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBGRPXSTATNOWNERS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFATNBKMK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFATNBKMK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCSPAMOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCSPAMOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCSPAHDR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_LCBPLCSPAHDR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFATNBKF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFATNBKF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFATNBKL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFATNBKL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCFORMFLDSTTBF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBFORMFLDSTTBF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFENDREF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_LCBPLCFENDREF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFENDTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFENDTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCDGGINFO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBDGGINFO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFRMARK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_LCBSTTBFRMARK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFCAPTION:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFCAPTION:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBFAUTOCAPTION:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFAUTOCAPTION:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFTXBXTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDTXBX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDTXBX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFHDRTXBXTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFHDRTXBXTXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFFLDHDRTXBX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFFLDHDRTXBX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBTTMBD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBTTMBD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPGDMOTHER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPGDMOTHER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCBKDMOTHER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBBKDMOTHER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPGDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPGDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCBKDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBBKDFTN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPGDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPGDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_FCBKDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBBKDEDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFLST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_LCBPLCFLST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLFLFO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLFLFO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFTXBXBKD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFTXBXBKD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFTXBXHDRBKD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFTXBXHDRBKD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBGLSYSTYLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+
+ case NS_rtf::LN_LCBSTTBGLSYSTYLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFBTELVC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFBTELVC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCPLCFLVC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBPLCFLVC:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSTTBLISTNAMES:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBLISTNAMES:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_LCBSTTBFUSSR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ {
+ m_pImpl->GetFIB().SetData( nName, nIntValue );
+ }
+ break;
+ case NS_rtf::LN_FN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCSEPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FNMPR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ case NS_rtf::LN_FCMPR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ //section descriptor, unused or internally used
+ break;
+ case NS_rtf::LN_ICOFORE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ICOBACK:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_IPAT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_SHDFORECOLOR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_SHDBACKCOLOR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_SHDPATTERN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DPTLINEWIDTH:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BRCTYPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ICO:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DPTSPACE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FSHADOW:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FFRAME:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_UNUSED2_15:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FFIRSTMERGED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FMERGED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FVERTICAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FBACKWARD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FROTATEFONT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FVERTMERGE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FVERTRESTART:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_VERTALIGN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FUNUSED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BRCTOP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_BRCLEFT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_BRCBOTTOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_rtf::LN_BRCRIGHT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ {
+ table::BorderLine aBorderLine;
+ sal_Int32 nLineDistance = ConversionHelper::MakeBorderLine( nIntValue, aBorderLine );
+ (void)nLineDistance;
+ PropertyIds eBorderId = PROP_LEFT_BORDER;
+ PropertyIds eBorderDistId = PROP_LEFT_BORDER_DISTANCE ;
+ switch( nName )
+ {
+ case NS_rtf::LN_BRCTOP:
+ eBorderId = PROP_TOP_BORDER ;
+ eBorderDistId = PROP_TOP_BORDER_DISTANCE;
+ break;
+ case NS_rtf::LN_BRCLEFT:
+// eBorderId = PROP_LEFT_BORDER;
+// eBorderDistId = PROP_LEFT_BORDER_DISTANCE ;
+ break;
+ case NS_rtf::LN_BRCBOTTOM:
+ eBorderId = PROP_BOTTOM_BORDER ;
+ eBorderDistId = PROP_BOTTOM_BORDER_DISTANCE;
+ break;
+ case NS_rtf::LN_BRCRIGHT:
+ eBorderId = PROP_RIGHT_BORDER ;
+ eBorderDistId = PROP_RIGHT_BORDER_DISTANCE ;
+ break;
+ default:;
+ }
+ //todo: where to put the border properties
+ //rContext->Insert(eBorderId, uno::makeAny( aBorderLine ));
+ //rContext->Insert(eBorderDistId, uno::makeAny( nLineDistance ));
+ }
+ break;
+ case NS_rtf::LN_ITCFIRST:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FPUB:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ITCLIM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FCOL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINECOLOR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEWIDTH:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINETYPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_MM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_XEXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_YEXT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_HMF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LCB:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CBHEADER:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_MFP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BM_RCWINMF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DXAGOAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DYAGOAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_MX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_MY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DXACROPLEFT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DYACROPTOP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DXACROPRIGHT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DYACROPBOTTOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BRCL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FFRAMEEMPTY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FBITMAP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FDRAWHATCH:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FERROR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BPP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DXAORIGIN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DYAORIGIN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_CPROPS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEPROPSTOP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEPROPSLEFT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEPROPSBOTTOM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEPROPSRIGHT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEPROPSHORIZONTAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LINEPROPSVERTICAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_headerr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_footerr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_endnote:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_BOOKMARKNAME:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ // sStringValue contains the bookmark name
+ sLocalBookmarkName = sStringValue;
+ break;
+ case NS_rtf::LN_IBKL:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0.5 */
+ //contains the bookmark identifier - has to be added to the bookmark name imported before
+ //if it is already available then the bookmark should be inserted
+ m_pImpl->AddBookmark( sLocalBookmarkName, sStringValue );
+ sLocalBookmarkName = ::rtl::OUString();
+ break;
+ case NS_rtf::LN_LISTLEVEL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LFOData:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_F:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_ALTFONTNAME:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_XSZFFN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_XSTZNAME:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_XSTZNAME1:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_UPXSTART:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_UPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_sed:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //section properties
+ resolveAttributeProperties(*this, val);
+ break;
+ case NS_rtf::LN_tbdAdd:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = val.getProperties();
+ if( pProperties.get())
+ {
+ pProperties->resolve(*this);
+ //increment to the next tab stop
+ m_pImpl->NextTabStop();
+ }
+ }
+ break;
+ case NS_rtf::LN_dxaDel:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //deleted tab
+ case NS_rtf::LN_dxaAdd:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //set tab
+ case NS_rtf::LN_TLC:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //tab leading characters - for decimal tabs
+ case NS_rtf::LN_JC:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //tab justification
+ m_pImpl->ModifyCurrentTabStop(nName, nIntValue);
+ break;
+ case NS_rtf::LN_UNUSED0_6:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ // really unused
+ break;
+ case NS_rtf::LN_rgbrc:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_shd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_cellShd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_cellTopColor:
+ case NS_rtf::LN_cellLeftColor:
+ case NS_rtf::LN_cellBottomColor:
+ case NS_rtf::LN_cellRightColor:
+ OSL_ASSERT("handled by DomainMapperTableManager");
+ break;
+
+ case NS_rtf::LN_LISTTABLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_LFOTABLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_FONTTABLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_STYLESHEET:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+
+ case NS_rtf::LN_fcEastAsianLayout:
+ /* WRITERFILTERSTATUS: done: 50, planned: 0.5, spent: 0 */
+ /* it seems that the value is following:
+ ???? XX YYYY ZZ
+ where
+ XX seems to be the run id
+ ZZ is the length of the function that is normally 6
+ Lower byte of YYYY determines whether it is
+ vertical text flow (0x01), or
+ two lines in one layout (0x02).
+ For 0x01, if the higher byte of YYYY is zero, the text is not scaled to fit the line height,
+ in oposite case, it is to be scaled.
+ For 0x02, the higher byte of YYYY is determinig the prefix and suffix of the run:
+ no brackets (0x00) ,
+ () round brackets (0x01),
+ [] square backets (0x02),
+ <> angle brackets (0x03) and
+ {} curly brackets (0x04).
+ ???? is different and we do not know its signification
+ */
+
+ if ((nIntValue & 0x000000FF) == 6)
+ {
+ switch ((nIntValue & 0x0000FF00) >> 8)
+ {
+ case 1: // vertical text
+ if (m_pImpl->GetTopContext())
+ {
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION, true, uno::makeAny ( sal_Int16(900) ));
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION_IS_FIT_TO_LINE, true, uno::makeAny (((nIntValue & 0x00FF0000) >> 16) != 0));
+ }
+ break;
+ case 2: // two lines in one
+ if (m_pImpl->GetTopContext())
+ {
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_IS_ON, true, uno::makeAny ( true ));
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_PREFIX, true, uno::makeAny ( getBracketStringFromEnum((nIntValue & 0x00FF0000) >> 16)));
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_SUFFIX, true, uno::makeAny ( getBracketStringFromEnum((nIntValue & 0x00FF0000) >> 16, false)));
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case NS_rtf::LN_FRD :
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //footnote reference descriptor, if nIntValue > 0 then automatic, custom otherwise
+ //ignored
+ break;
+ case NS_rtf::LN_FONT: //font of footnote symbol
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->SetFootnoteFontId( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_Sym_char:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if( m_pImpl->GetTopContext() && m_pImpl->GetTopContext()->GetFootnote().is())
+ {
+ m_pImpl->GetTopContext()->GetFootnote()->setLabel(::rtl::OUString( sal_Unicode(nIntValue)));
+ break;
+ }
+ else //it's a _real_ symbol
+ {
+ utext( reinterpret_cast < const sal_uInt8 * >( &nIntValue ), 1 );
+ }
+ break;
+ case NS_rtf::LN_CHAR: //footnote symbol character
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->SetFootnoteSymbol( sal_Unicode(nIntValue));
+ break;
+ case NS_ooxml::LN_CT_Sym_font:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //the footnote symbol and font are provided after the footnote is already inserted
+ if( m_pImpl->GetTopContext() && m_pImpl->GetTopContext()->GetFootnote().is())
+ {
+ uno::Reference< beans::XPropertySet > xAnchorProps( m_pImpl->GetTopContext()->GetFootnote()->getAnchor(), uno::UNO_QUERY );
+ xAnchorProps->setPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_CHAR_FONT_NAME),
+ uno::makeAny( sStringValue ));
+ }
+ else //a real symbol
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( sStringValue ));
+ break;
+ case NS_ooxml::LN_CT_Underline_val:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ handleUnderlineType(nIntValue, m_pImpl->GetTopContext());
+ break;
+ case NS_ooxml::LN_CT_Color_val:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COLOR, true, uno::makeAny( nIntValue ) );
+ break;
+ case NS_ooxml::LN_CT_Underline_color:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ {
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_UNDERLINE_HAS_COLOR, true, uno::makeAny( true ) );
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_UNDERLINE_COLOR, true, uno::makeAny( nIntValue ) );
+ }
+ break;
+
+ case NS_ooxml::LN_CT_TabStop_val:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_ST_TabJc_clear)
+ {
+ m_pImpl->m_aCurrentTabStop.bDeleted = true;
+ }
+ else
+ {
+ m_pImpl->m_aCurrentTabStop.bDeleted = false;
+ m_pImpl->m_aCurrentTabStop.Alignment = getTabAlignFromValue(nIntValue);
+ }
+ break;
+ case NS_ooxml::LN_CT_TabStop_leader:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->m_aCurrentTabStop.FillChar = getFillCharFromValue(nIntValue);
+ break;
+ case NS_ooxml::LN_CT_TabStop_pos:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->m_aCurrentTabStop.Position = ConversionHelper::convertTwipToMM100(nIntValue);
+ break;
+
+ case NS_ooxml::LN_CT_Fonts_ascii:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( sStringValue ));
+ break;
+ case NS_ooxml::LN_CT_Fonts_asciiTheme:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( m_pImpl->GetThemeTable()->getFontNameForTheme(nIntValue) ));
+ break;
+ case NS_ooxml::LN_CT_Fonts_hAnsi:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ break;//unsupported
+ case NS_ooxml::LN_CT_Fonts_hAnsiTheme:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ break; //unsupported
+ case NS_ooxml::LN_CT_Fonts_eastAsia:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_ASIAN, true, uno::makeAny( sStringValue ));
+ break;
+ case NS_ooxml::LN_CT_Fonts_eastAsiaTheme:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_COMPLEX, true, uno::makeAny( m_pImpl->GetThemeTable()->getFontNameForTheme(nIntValue) ) );
+ break;
+ case NS_ooxml::LN_CT_Fonts_cs:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_COMPLEX, true, uno::makeAny( sStringValue ));
+ break;
+ case NS_ooxml::LN_CT_Fonts_cstheme:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_FONT_NAME_COMPLEX, true, uno::makeAny( m_pImpl->GetThemeTable()->getFontNameForTheme(nIntValue) ));
+ break;
+ case NS_ooxml::LN_CT_Spacing_before:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_PARA_TOP_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Spacing_beforeLines:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_ooxml::LN_CT_Spacing_after:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_PARA_BOTTOM_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Spacing_afterLines:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_ooxml::LN_CT_Spacing_line: //91434
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Spacing_lineRule: //91435
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+#define SINGLE_LINE_SPACING 240
+ style::LineSpacing aSpacing;
+ PropertyMapPtr pTopContext = m_pImpl->GetTopContext();
+ PropertyMap::iterator aLineSpacingIter = pTopContext->find(PropertyDefinition( PROP_PARA_LINE_SPACING, true ) );
+ if( aLineSpacingIter != pTopContext->end())
+ {
+ aLineSpacingIter->second >>= aSpacing;
+ }
+ else
+ {
+ //default to single line spacing
+ aSpacing.Mode = style::LineSpacingMode::FIX;
+ aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100( SINGLE_LINE_SPACING ));
+ }
+ if( nName == NS_ooxml::LN_CT_Spacing_line )
+ {
+ //now set the value depending on the Mode
+ if( aSpacing.Mode == style::LineSpacingMode::PROP )
+ aSpacing.Height = sal_Int16(sal_Int32(nIntValue) * 100 / SINGLE_LINE_SPACING );
+ else
+ aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100( nIntValue ));
+ }
+ else //NS_ooxml::LN_CT_Spacing_lineRule:
+ {
+ // exactly, atLeast, auto
+ if( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_LineSpacingRule_auto)
+ {
+ aSpacing.Mode = style::LineSpacingMode::PROP;
+ //reinterpret the already set value
+ aSpacing.Height = sal_Int16( aSpacing.Height * 100 / ConversionHelper::convertTwipToMM100( SINGLE_LINE_SPACING ));
+ }
+ else if( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_LineSpacingRule_atLeast)
+ aSpacing.Mode = style::LineSpacingMode::MINIMUM;
+ else // NS_ooxml::LN_Value_wordprocessingml_ST_LineSpacingRule_exact
+ aSpacing.Mode = style::LineSpacingMode::FIX;
+ }
+ pTopContext->Insert(PROP_PARA_LINE_SPACING, true, uno::makeAny( aSpacing ));
+ }
+ break;
+ case NS_ooxml::LN_CT_Ind_left:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(
+ PROP_PARA_LEFT_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Ind_right:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(
+ PROP_PARA_RIGHT_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Ind_hanging:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ {
+ sal_Int32 nValue = ConversionHelper::convertTwipToMM100( nIntValue );
+ m_pImpl->GetTopContext()->Insert(
+ PROP_PARA_FIRST_LINE_INDENT, true, uno::makeAny( - nValue ));
+ }
+ break;
+ case NS_ooxml::LN_CT_Ind_firstLine:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(
+ PROP_PARA_FIRST_LINE_INDENT, true, uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
+ break;
+
+ case NS_ooxml::LN_CT_EastAsianLayout_id:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_ooxml::LN_CT_EastAsianLayout_combine:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_IS_ON, true, uno::makeAny ( nIntValue ? true : false ));
+ break;
+ case NS_ooxml::LN_CT_EastAsianLayout_combineBrackets:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ {
+ rtl::OUString sCombinePrefix = getBracketStringFromEnum(nIntValue);
+ rtl::OUString sCombineSuffix = getBracketStringFromEnum(nIntValue, false);
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_PREFIX, true, uno::makeAny ( sCombinePrefix ));
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_COMBINE_SUFFIX, true, uno::makeAny ( sCombineSuffix ));
+ }
+ break;
+ case NS_ooxml::LN_CT_EastAsianLayout_vert:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ {
+ sal_Int16 nRotationAngle = (nIntValue ? 900 : 0);
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION, true, uno::makeAny ( nRotationAngle ));
+ }
+ break;
+ case NS_ooxml::LN_CT_EastAsianLayout_vertCompress:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(PROP_CHAR_ROTATION_IS_FIT_TO_LINE, true, uno::makeAny ( nIntValue ? true : false));
+ break;
+
+ case NS_ooxml::LN_CT_PageSz_code:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ CT_PageSz.code = nIntValue;
+ break;
+ case NS_ooxml::LN_CT_PageSz_h:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ sal_Int32 nHeight = ConversionHelper::convertTwipToMM100(nIntValue);
+ CT_PageSz.h = PaperInfo::sloppyFitPageDimension(nHeight);
+ }
+ break;
+ case NS_ooxml::LN_CT_PageSz_orient:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ CT_PageSz.orient = (nIntValue != 0);
+ break;
+ case NS_ooxml::LN_CT_PageSz_w:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ sal_Int32 nWidth = ConversionHelper::convertTwipToMM100(nIntValue);
+ CT_PageSz.w = PaperInfo::sloppyFitPageDimension(nWidth);
+ }
+ break;
+
+ case NS_ooxml::LN_CT_PageMar_top:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_TOP, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_PageMar_right:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_RIGHT, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_PageMar_bottom:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_BOTTOM, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_PageMar_left:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_LEFT, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_PageMar_header:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_HEADER, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_PageMar_footer:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_FOOTER, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_PageMar_gutter:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetPageMarginTwip( PAGE_MAR_GUTTER, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_Language_val: //90314
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Language_eastAsia: //90315
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Language_bidi: //90316
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ LanguageType eLang = MsLangId::convertIsoStringToLanguage( sStringValue );
+ lang::Locale aLocale = MsLangId::convertLanguageToLocale( eLang );
+ if (m_pImpl->GetTopContext())
+ m_pImpl->GetTopContext()->Insert(NS_ooxml::LN_CT_Language_val== nName ? PROP_CHAR_LOCALE :
+ NS_ooxml::LN_CT_Language_eastAsia == nName ? PROP_CHAR_LOCALE_ASIAN : PROP_CHAR_LOCALE_COMPLEX,
+ true,
+ uno::makeAny( aLocale ) );
+ }
+ break;
+#define AUTO_PARA_SPACING sal_Int32(49)
+ case NS_ooxml::LN_CT_Spacing_beforeAutospacing:
+ /* WRITERFILTERSTATUS: done: 80, planned: 0.5, spent: 0.2 */
+ //TODO: autospacing depends on some document property (called fDontUseHTMLAutoSpacing in old ww8 filter) 100 or 280 twip
+ //and should be set to 0 on start of page
+ m_pImpl->GetTopContext()->Insert( PROP_PARA_TOP_MARGIN, false, uno::makeAny( AUTO_PARA_SPACING ) );
+ break;
+ case NS_ooxml::LN_CT_Spacing_afterAutospacing:
+ /* WRITERFILTERSTATUS: done: 80, planned: 0.5, spent: 0.2 */
+ //TODO: autospacing depends on some document property (called fDontUseHTMLAutoSpacing in old ww8 filter) 100 or 280 twip
+ m_pImpl->GetTopContext()->Insert( PROP_PARA_BOTTOM_MARGIN, false, uno::makeAny( AUTO_PARA_SPACING ) );
+ break;
+ case NS_ooxml::LN_CT_SmartTagRun_uri:
+ case NS_ooxml::LN_CT_SmartTagRun_element:
+ /* WRITERFILTERSTATUS: done: 0, planned: 1, spent: 0 */
+ //TODO: add handling of SmartTags
+ break;
+ case NS_ooxml::LN_CT_Br_type :
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //TODO: attributes for break (0x12) are not supported
+ break;
+ case NS_ooxml::LN_CT_Fonts_hint :
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ /* assigns script type to ambigous characters, values can be:
+ NS_ooxml::LN_Value_ST_Hint_default
+ NS_ooxml::LN_Value_ST_Hint_eastAsia
+ NS_ooxml::LN_Value_ST_Hint_cs
+ */
+ //TODO: unsupported?
+ break;
+ case NS_ooxml::LN_CT_TblCellMar_right: // 92375;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_top: // 92377;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_left: // 92378;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_TblBorders_bottom: // 92379;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ //todo: handle cell mar
+ break;
+ case NS_rtf::LN_blip: // contains the binary graphic
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_shape:
+ /* WRITERFILTERSTATUS: done: 50, planned: 0.5, spent: 0 */
+ {
+ //looks a bit like a hack - and it is. The graphic import is split into the inline_inline part and
+ //afterwards the adding of the binary data.
+ m_pImpl->GetGraphicImport( IMPORT_AS_DETECTED_INLINE )->attribute(nName, val);
+ m_pImpl->ImportGraphic( val.getProperties(), IMPORT_AS_DETECTED_INLINE );
+ }
+ break;
+ case NS_ooxml::LN_CT_FramePr_dropCap:
+ case NS_ooxml::LN_CT_FramePr_lines:
+ case NS_ooxml::LN_CT_FramePr_hAnchor:
+ case NS_ooxml::LN_CT_FramePr_vAnchor:
+ case NS_ooxml::LN_CT_FramePr_x:
+ case NS_ooxml::LN_CT_FramePr_xAlign:
+ case NS_ooxml::LN_CT_FramePr_y:
+ case NS_ooxml::LN_CT_FramePr_yAlign:
+ case NS_ooxml::LN_CT_FramePr_hRule:
+ case NS_sprm::LN_PWr:
+ case NS_sprm::LN_PDxaWidth:
+ case NS_sprm::LN_PWHeightAbs:
+ case NS_sprm::LN_PDxaFromText:
+ case NS_sprm::LN_PDyaFromText:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ ParagraphProperties* pParaProperties = dynamic_cast< ParagraphProperties*>(m_pImpl->GetTopContext().get());
+ if( pParaProperties )
+ {
+ switch( nName )
+ {
+ case NS_ooxml::LN_CT_FramePr_dropCap:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->SetDropCap( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_FramePr_lines:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->SetLines( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_FramePr_hAnchor:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ switch(nIntValue)
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_HAnchor_text: //relative to column
+ nIntValue = text::RelOrientation::FRAME; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_HAnchor_margin: nIntValue = text::RelOrientation::PAGE_PRINT_AREA; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_HAnchor_page: nIntValue = text::RelOrientation::PAGE_FRAME; break;
+ default:;
+ }
+ pParaProperties->SethAnchor( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_FramePr_vAnchor:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ switch(nIntValue)
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_VAnchor_text: //relative to paragraph
+ nIntValue = text::RelOrientation::FRAME; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_VAnchor_margin:nIntValue = text::RelOrientation::PAGE_PRINT_AREA ; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_VAnchor_page: nIntValue = text::RelOrientation::PAGE_FRAME; break;
+ default:;
+ }
+ pParaProperties->SetvAnchor( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_FramePr_x:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->Setx( ConversionHelper::convertTwipToMM100(nIntValue ));
+ break;
+ case NS_ooxml::LN_CT_FramePr_xAlign:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ switch( nIntValue )
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_center : nIntValue = text::HoriOrientation::CENTER; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_right : nIntValue = text::HoriOrientation::RIGHT; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_inside : nIntValue = text::HoriOrientation::INSIDE; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_outside : nIntValue = text::HoriOrientation::OUTSIDE; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_XAlign_left : nIntValue = text::HoriOrientation::LEFT; break;
+ default: nIntValue = text::HoriOrientation::NONE;
+ }
+ pParaProperties->SetxAlign( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_FramePr_y:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->Sety( ConversionHelper::convertTwipToMM100(nIntValue ));
+ break;
+ case NS_ooxml::LN_CT_FramePr_yAlign:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ switch( nIntValue )
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_top :
+ case NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_inside :nIntValue = text::VertOrientation::TOP; break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_center :nIntValue = text::VertOrientation::CENTER;break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_bottom :
+ case NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_outside :nIntValue = text::VertOrientation::BOTTOM;break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_YAlign_inline ://todo: what to do with inline - no avail. in WW97 and WW2007
+ //no break;
+ default:nIntValue = text::VertOrientation::NONE;
+ }
+ pParaProperties->SetyAlign( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_FramePr_hRule:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ switch( nIntValue )
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_HeightRule_exact:
+ nIntValue = text::SizeType::FIX;
+ break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_HeightRule_atLeast:
+ nIntValue = text::SizeType::MIN;
+ break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_HeightRule_auto:
+ //no break;
+ default:;
+ nIntValue = text::SizeType::VARIABLE;
+ }
+ pParaProperties->SethRule( nIntValue );
+ break;
+ case NS_sprm::LN_PWr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ //should be either LN_Value_wordprocessingml_ST_Wrap_notBeside or LN_Value_wordprocessingml_ST_Wrap_around
+ OSL_ENSURE( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_Wrap_around ||
+ sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_Wrap_notBeside,
+ "wrap not around or not_Beside?");
+ pParaProperties->SetWrap(sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_wordprocessingml_ST_Wrap_around ?
+ text::WrapTextMode_DYNAMIC : text::WrapTextMode_NONE );
+ }
+ break;
+ case NS_sprm::LN_PDxaWidth:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->Setw(ConversionHelper::convertTwipToMM100(nIntValue));
+ break;
+ case NS_sprm::LN_PWHeightAbs:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->Seth(ConversionHelper::convertTwipToMM100(nIntValue));
+ break;
+ case NS_sprm::LN_PDxaFromText:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->SethSpace( ConversionHelper::convertTwipToMM100(nIntValue ));
+ break;
+ case NS_sprm::LN_PDyaFromText:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pParaProperties->SetvSpace( ConversionHelper::convertTwipToMM100(nIntValue ));
+ break;
+ default:;
+ }
+ }
+ else
+ {
+ //TODO: how to handle frame properties at styles
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_LineNumber_start:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_LineNumber_distance:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_TrackChange_author:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetCurrentRedlineAuthor( sStringValue );
+ break;
+ case NS_ooxml::LN_CT_TrackChange_date:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetCurrentRedlineDate( sStringValue );
+ break;
+ case NS_ooxml::LN_CT_Markup_id:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetCurrentRedlineId( nIntValue );
+ break;
+ case NS_ooxml::LN_token:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetCurrentRedlineToken( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_LineNumber_countBy:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_LineNumber_restart:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ {
+ //line numbering in Writer is a global document setting
+ //in Word is a section setting
+ //if line numbering is switched on anywhere in the document it's set at the global settings
+ LineNumberSettings aSettings = m_pImpl->GetLineNumberSettings();
+ switch( nName )
+ {
+ case NS_ooxml::LN_CT_LineNumber_countBy:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ aSettings.nInterval = nIntValue;
+ break;
+ case NS_ooxml::LN_CT_LineNumber_start:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ aSettings.nStartValue = nIntValue; // todo: has to be set at (each) first paragraph
+ break;
+ case NS_ooxml::LN_CT_LineNumber_distance:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ aSettings.nDistance = ConversionHelper::convertTwipToMM100( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_LineNumber_restart:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //page:empty, probably 0,section:1,continuous:2;
+ aSettings.bRestartAtEachPage = nIntValue < 1;
+ break;
+ default:;
+ }
+ m_pImpl->SetLineNumberSettings( aSettings );
+ }
+ break;
+ case NS_ooxml::LN_CT_FtnEdnRef_customMarkFollows:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetCustomFtnMark( true );
+ break;
+ case NS_ooxml::LN_CT_FtnEdnRef_id:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ // footnote or endnote reference id - not needed
+ case NS_ooxml::LN_CT_Color_themeColor:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Color_themeTint:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Color_themeShade:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //unsupported
+ break;
+ 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
+ ::rtl::OString sMessage( "DomainMapper::attribute() - Id: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 16 );
+// sMessage += ::rtl::OString(" / ");
+// sMessage += ::rtl::OString
+// ((*QNameToString::Instance())(nName).c_str());
+ sMessage += ::rtl::OString(" value: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 16 );
+ OSL_ENSURE( false, sMessage.getStr()); //
+#endif
+ }
+ }
+ }
+}
+/*-- 09.06.2006 09:52:12---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_sprm(Sprm & rSprm)
+{
+ if( !m_pImpl->getTableManager().sprm(rSprm))
+ sprmWithProps( rSprm, m_pImpl->GetTopContext() );
+}
+/*-- 20.06.2006 09:58:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper::sprmWithProps( Sprm& rSprm, PropertyMapPtr rContext, SprmType eSprmType )
+{
+ OSL_ENSURE(rContext.get(), "PropertyMap has to be valid!");
+ if(!rContext.get())
+ return ;
+
+ sal_uInt32 nSprmId = rSprm.getId();
+ //needed for page properties
+ SectionPropertyMap * pSectionContext = m_pImpl->GetSectionContext();
+
+ //TODO: In rtl-paragraphs the meaning of left/right are to be exchanged
+ bool bExchangeLeftRight = false;
+ // if( nSprmId == NS_sprm::LN_PJcExtra && AlreadyInRTLPara() )
+ // bExchangeLeftRight = true;
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = pValue->getInt();
+ rtl::OUString sStringValue = pValue->getString();
+ // printf ( "DomainMapper::sprm(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nSprmId, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+ /* WRITERFILTERSTATUS: table: sprmdata */
+
+ switch(nSprmId)
+ {
+ case 2: // sprmPIstd
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ case 0x4600:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPIstd - style code
+ case 3: // "sprmPIstdPermute
+ case NS_sprm::LN_PIstdPermute:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPIstdPermute
+ case NS_sprm::LN_PIncLvl:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPIncLvl
+ case NS_sprm::LN_PJcExtra: // sprmPJc Asian (undocumented)
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_sprm::LN_PJc: // sprmPJc
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ handleParaJustification(nIntValue, rContext, bExchangeLeftRight);
+ break;
+ case NS_sprm::LN_PFSideBySide:
+ /* WRITERFILTERSTATUS: done: 0, planned: 3, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: */
+ break; // sprmPFSideBySide
+
+ case NS_sprm::LN_PFKeep: // sprmPFKeep
+ /* WRITERFILTERSTATUS: done: 0, planned: 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 */
+ /* WRITERFILTERSTATUS: comment: */
+ rContext->Insert(PROP_PARA_KEEP_TOGETHER, true, uno::makeAny( nIntValue ? true : false) );
+ break;
+ case NS_sprm::LN_PFPageBreakBefore:
+ /* WRITERFILTERSTATUS: done: 100, planned: 3, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: */
+ rContext->Insert(PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE ) );
+ break; // sprmPFPageBreakBefore
+ case NS_sprm::LN_PBrcl:
+ break; // sprmPBrcl
+ case NS_sprm::LN_PBrcp:
+ break; // sprmPBrcp
+ case NS_sprm::LN_PIlvl: // sprmPIlvl
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
+ /* WRITERFILTERSTATUS: comment: */
+ //todo: Numbering level will be implemented in the near future (OOo 3.0?)
+ if( m_pImpl->IsStyleSheetImport() )
+ {
+ //style sheets cannot have a numbering rule attached
+ StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
+ pStyleSheetPropertyMap->SetListLevel( (sal_Int16)nIntValue );
+ }
+ else
+ rContext->Insert( PROP_NUMBERING_LEVEL, true, uno::makeAny( (sal_Int16)nIntValue ));
+ break;
+ case NS_sprm::LN_PIlfo: // sprmPIlfo
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 1 */
+ /* WRITERFILTERSTATUS: comment: */
+ {
+ //convert the ListTable entry to a NumberingRules propery and apply it
+ ListsManager::Pointer pListTable = m_pImpl->GetListTable();
+ ListDef::Pointer pList = pListTable->GetList( nIntValue );
+ if( pList.get( ) )
+ {
+ if( m_pImpl->IsStyleSheetImport() )
+ {
+ //style sheets cannot have a numbering rule attached
+ StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
+ pStyleSheetPropertyMap->SetListId( nIntValue );
+ }
+ else
+ {
+ uno::Any aRules = uno::makeAny( pList->GetNumberingRules( ) );
+ rContext->Insert( PROP_NUMBERING_RULES, true, aRules );
+ }
+ }
+ else if ( !m_pImpl->IsStyleSheetImport( ) )
+ {
+ rtl::OUString sNone;
+ rContext->Insert( PROP_NUMBERING_STYLE_NAME, true, uno::makeAny( sNone ) );
+ }
+ }
+ break;
+ case NS_sprm::LN_PFNoLineNumb: // sprmPFNoLineNumb
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
+ /* WRITERFILTERSTATUS: comment: */
+ rContext->Insert(PROP_PARA_LINE_NUMBER_COUNT, true, uno::makeAny( nIntValue ? false : true) );
+ break;
+ case NS_sprm::LN_PChgTabsPapx: // sprmPChgTabsPapx
+ /* WRITERFILTERSTATUS: done: 90, planned: 8, spent: 8 */
+ /* WRITERFILTERSTATUS: comment: bar tab stops a unavailable */
+ {
+ // Initialize tab stop vector from style sheet
+ uno::Any aValue = m_pImpl->GetPropertyFromStyleSheet(PROP_PARA_TAB_STOPS);
+ uno::Sequence< style::TabStop > aStyleTabStops;
+ if(aValue >>= aStyleTabStops)
+ {
+ m_pImpl->InitTabStopFromStyle( aStyleTabStops );
+ }
+
+ //create a new tab stop property - this is done with the contained properties
+ resolveSprmProps(*this, rSprm);
+ //add this property
+ rContext->Insert(PROP_PARA_TAB_STOPS, true, uno::makeAny( m_pImpl->GetCurrentTabStopAndClear()));
+ }
+ break;
+ case 0x845d: //right margin Asian - undocumented
+ case 0x845e: //left margin Asian - undocumented
+ case 16: // sprmPDxaRight - right margin
+ case NS_sprm::LN_PDxaRight: // sprmPDxaRight - right margin
+ case 17:
+ case NS_sprm::LN_PDxaLeft: // sprmPDxaLeft
+ /* WRITERFILTERSTATUS: done: 50, planned: 5, spent: 1 */
+ if( NS_sprm::LN_PDxaLeft == nSprmId || 0x17 == nSprmId|| (bExchangeLeftRight && nSprmId == 0x845d) || ( !bExchangeLeftRight && nSprmId == 0x845e))
+ rContext->Insert(
+ eSprmType == SPRM_DEFAULT ? PROP_PARA_LEFT_MARGIN : PROP_LEFT_MARGIN,
+ true,
+ uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ else if(eSprmType == SPRM_DEFAULT)
+ rContext->Insert(
+ PROP_PARA_RIGHT_MARGIN, true,
+ uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
+ //TODO: what happens to the right margins in numberings?
+ break;
+ case 18: // sprmPNest
+ case NS_sprm::LN_PNest: // sprmPNest
+ //not handled in the old WW8 filter
+ break;
+ case NS_sprm::LN_PDxaLeft1: // sprmPDxaLeft1
+ case 19:
+ case NS_sprm::LN_PDxaLeft180: // sprmPDxaLeft180
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
+ rContext->Insert(
+ eSprmType == SPRM_DEFAULT ? PROP_PARA_FIRST_LINE_INDENT : PROP_FIRST_LINE_OFFSET,
+ true,
+ uno::makeAny( ConversionHelper::convertTwipToMM100(nIntValue ) ));
+ break;
+ case 20 : // sprmPDyaLine
+ case NS_sprm::LN_PDyaLine: // sprmPDyaLine
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
+ {
+ style::LineSpacing aSpacing;
+ sal_Int16 nDistance = sal_Int16(nIntValue & 0xffff);
+ if(nIntValue & 0xffff0000)
+ {
+ // single line in Writer is 100, in Word it is 240
+ aSpacing.Mode = style::LineSpacingMode::PROP;
+ aSpacing.Height = sal_Int16(sal_Int32(nDistance) * 100 /240);
+ }
+ else
+ {
+ if(nDistance < 0)
+ {
+ aSpacing.Mode = style::LineSpacingMode::FIX;
+ aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100(-nDistance));
+ }
+ else if(nDistance >0)
+ {
+ aSpacing.Mode = style::LineSpacingMode::MINIMUM;
+ aSpacing.Height = sal_Int16(ConversionHelper::convertTwipToMM100(nDistance));
+ }
+ }
+ rContext->Insert(PROP_PARA_LINE_SPACING, true, uno::makeAny( aSpacing ));
+ }
+ break;
+ case 21 : // legacy version
+ case NS_sprm::LN_PDyaBefore: // sprmPDyaBefore
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
+ rContext->Insert(PROP_PARA_TOP_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case 22 :
+ case NS_sprm::LN_PDyaAfter: // sprmPDyaAfter
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 1 */
+ rContext->Insert(PROP_PARA_BOTTOM_MARGIN, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+
+ case 23: //sprmPChgTabs
+ case NS_sprm::LN_PChgTabs: // sprmPChgTabs
+ /* WRITERFILTERSTATUS: done: 0, planned: 3, spent: 0 */
+ OSL_ENSURE( false, "unhandled");
+ //tabs of list level?
+ break;
+ case 24: // "sprmPFInTable"
+ case NS_sprm::LN_PFInTable:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFInTable
+ case NS_sprm::LN_PTableDepth: //sprmPTableDepth
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ //not handled via sprm but via text( 0x07 )
+ break;
+ case 25: // "sprmPTtp" pap.fTtp
+ case NS_sprm::LN_PFTtp: // sprmPFTtp was: Read_TabRowEnd
+ break;
+ case 26: // "sprmPDxaAbs
+ case NS_sprm::LN_PDxaAbs:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDxaAbs
+ case 27: //sprmPDyaAbs
+ case NS_sprm::LN_PDyaAbs:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDyaAbs
+ case NS_sprm::LN_PDxaWidth:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDxaWidth
+ case NS_sprm::LN_PPc:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPPc
+ case NS_sprm::LN_PBrcTop10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcTop10
+ case NS_sprm::LN_PBrcLeft10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcLeft10
+ case NS_sprm::LN_PBrcBottom10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcBottom10
+ case NS_sprm::LN_PBrcRight10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcRight10
+ case NS_sprm::LN_PBrcBetween10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcBetween10
+ case NS_sprm::LN_PBrcBar10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcBar10
+ case NS_sprm::LN_PDxaFromText10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDxaFromText10
+ case NS_sprm::LN_PWr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPWr
+
+ case NS_ooxml::LN_CT_PrBase_pBdr: //paragraph border
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ resolveSprmProps(*this, rSprm);
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_sprm::LN_PBrcTop: // sprmPBrcTop
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
+ case NS_sprm::LN_PBrcLeft: // sprmPBrcLeft
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
+ case NS_sprm::LN_PBrcBottom: // sprmPBrcBottom
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
+ case NS_sprm::LN_PBrcRight: // sprmPBrcRight
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: page borders are no handled yet, conversion incomplete */
+ case NS_sprm::LN_PBrcBetween: // sprmPBrcBetween
+ /* WRITERFILTERSTATUS: done: 0, planned: 8, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: */
+ {
+ //in binary format the borders are directly provided in OOXML they are inside of properties
+ if( IsOOXMLImport() )
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ BorderHandlerPtr pBorderHandler( new BorderHandler( true ) );
+ pProperties->resolve(*pBorderHandler);
+ PropertyIds eBorderId = PropertyIds( 0 );
+ PropertyIds eBorderDistId = PropertyIds( 0 );
+ switch( nSprmId )
+ {
+ case NS_sprm::LN_PBrcTop:
+ /* WRITERFILTERSTATUS: */
+ eBorderId = PROP_TOP_BORDER;
+ eBorderDistId = PROP_TOP_BORDER_DISTANCE;
+ break;
+ case NS_sprm::LN_PBrcLeft:
+ /* WRITERFILTERSTATUS: */
+ eBorderId = PROP_LEFT_BORDER;
+ eBorderDistId = PROP_LEFT_BORDER_DISTANCE;
+ break;
+ case NS_sprm::LN_PBrcBottom:
+ /* WRITERFILTERSTATUS: */
+ eBorderId = PROP_BOTTOM_BORDER ;
+ eBorderDistId = PROP_BOTTOM_BORDER_DISTANCE;
+ break;
+ case NS_sprm::LN_PBrcRight:
+ /* WRITERFILTERSTATUS: */
+ eBorderId = PROP_RIGHT_BORDER;
+ eBorderDistId = PROP_RIGHT_BORDER_DISTANCE ;
+ break;
+ case NS_sprm::LN_PBrcBetween:
+ /* WRITERFILTERSTATUS: */
+ //not supported
+ break;
+ default:;
+ }
+ if( eBorderId )
+ rContext->Insert( eBorderId, true, uno::makeAny( pBorderHandler->getBorderLine()) , true);
+ if(eBorderDistId)
+ rContext->Insert(eBorderDistId, true, uno::makeAny( pBorderHandler->getLineDistance()), true);
+ }
+ }
+ else
+ {
+ table::BorderLine aBorderLine;
+ sal_Int32 nLineDistance = ConversionHelper::MakeBorderLine( nIntValue, aBorderLine );
+ PropertyIds eBorderId = PROP_LEFT_BORDER;
+ PropertyIds eBorderDistId = PROP_LEFT_BORDER_DISTANCE ;
+ switch( nSprmId )
+ {
+ case NS_sprm::LN_PBrcBetween: // sprmPBrcBetween
+ /* WRITERFILTERSTATUS: */
+ OSL_ENSURE( false, "TODO: inner border is not handled");
+ break;
+ case NS_sprm::LN_PBrcLeft: // sprmPBrcLeft
+ /* WRITERFILTERSTATUS: */
+ eBorderId = PROP_LEFT_BORDER;
+ eBorderDistId = PROP_LEFT_BORDER_DISTANCE ;
+ break;
+ case NS_sprm::LN_PBrcRight: // sprmPBrcRight
+ /* WRITERFILTERSTATUS: */
+ eBorderId = PROP_RIGHT_BORDER ;
+ eBorderDistId = PROP_RIGHT_BORDER_DISTANCE ;
+ break;
+ case NS_sprm::LN_PBrcTop: // sprmPBrcTop
+ /* WRITERFILTERSTATUS: */
+ eBorderId = PROP_TOP_BORDER ;
+ eBorderDistId = PROP_TOP_BORDER_DISTANCE;
+ break;
+ case NS_sprm::LN_PBrcBottom: // sprmPBrcBottom
+ /* WRITERFILTERSTATUS: */
+ default:
+ eBorderId = PROP_BOTTOM_BORDER ;
+ eBorderDistId = PROP_BOTTOM_BORDER_DISTANCE;
+ }
+ rContext->Insert(eBorderId, true, uno::makeAny( aBorderLine ));
+ rContext->Insert(eBorderDistId, true, uno::makeAny( nLineDistance ));
+ }
+ }
+ break;
+ case NS_sprm::LN_PBorderTop:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
+ case NS_sprm::LN_PBorderLeft:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
+ case NS_sprm::LN_PBorderBottom:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
+ case NS_sprm::LN_PBorderRight:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ /* WRITERFILTERSTATUS: comment: probably _real_ border colors, unhandled */
+ OSL_ENSURE( false, "TODO: border color definition");
+ break;
+ case NS_sprm::LN_PBrcBar:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPBrcBar
+ case NS_sprm::LN_PFNoAutoHyph: // sprmPFNoAutoHyph
+ /* WRITERFILTERSTATUS: done: 100, planned: 1, spent: 0 */
+ rContext->Insert(PROP_PARA_IS_HYPHENATION, true, uno::makeAny( nIntValue ? false : true ));
+ break;
+ case NS_sprm::LN_PWHeightAbs:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPWHeightAbs
+ case NS_sprm::LN_PDcs:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDcs
+
+ case NS_sprm::LN_PShd: // sprmPShd
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 2 */
+ {
+ //contains fore color, back color and shadow percentage, results in a brush
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ CellColorHandlerPtr pCellColorHandler( new CellColorHandler );
+ pCellColorHandler->setParagraph();
+ pProperties->resolve(*pCellColorHandler);
+ rContext->insert( pCellColorHandler->getProperties(), true );
+ }
+ }
+ break;
+ case NS_sprm::LN_PDyaFromText:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDyaFromText
+ case NS_sprm::LN_PDxaFromText:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPDxaFromText
+ case NS_sprm::LN_PFLocked:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFLocked
+ case NS_sprm::LN_PFWidowControl:
+ case NS_ooxml::LN_CT_PPrBase_widowControl:
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ uno::Any aVal( uno::makeAny( sal_Int8(nIntValue ? 2 : 0 )));
+ rContext->Insert( PROP_PARA_WIDOWS, true, aVal );
+ rContext->Insert( PROP_PARA_ORPHANS, true, aVal );
+ }
+ break; // sprmPFWidowControl
+ case NS_sprm::LN_PRuler:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPRuler
+ case NS_sprm::LN_PFKinsoku:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFKinsoku
+ case NS_sprm::LN_PFWordWrap:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFWordWrap
+ case NS_sprm::LN_PFOverflowPunct: ; // sprmPFOverflowPunct - hanging punctuation
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ rContext->Insert(PROP_PARA_IS_HANGING_PUNCTUATION, true, uno::makeAny( nIntValue ? false : true ));
+ break;
+ case NS_sprm::LN_PFTopLinePunct:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFTopLinePunct
+ case NS_sprm::LN_PFAutoSpaceDE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFAutoSpaceDE
+ case NS_sprm::LN_PFAutoSpaceDN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFAutoSpaceDN
+ case NS_sprm::LN_PWAlignFont:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPWAlignFont
+ case NS_sprm::LN_PFrameTextFlow:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFrameTextFlow
+ case NS_sprm::LN_PISnapBaseLine:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPISnapBaseLine
+ case NS_sprm::LN_PAnld:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPAnld
+ case NS_sprm::LN_PPropRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPPropRMark
+ case NS_sprm::LN_POutLvl:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ {
+ if( m_pImpl->IsStyleSheetImport() )
+ {
+ sal_Int16 nLvl = static_cast< sal_Int16 >( nIntValue );
+
+ StyleSheetPropertyMap* pStyleSheetPropertyMap = dynamic_cast< StyleSheetPropertyMap* >( rContext.get() );
+ pStyleSheetPropertyMap->SetOutlineLevel( nLvl );
+ }
+ }
+ break; // sprmPOutLvl
+ case NS_sprm::LN_PFBiDi:
+ /* WRITERFILTERSTATUS: done: 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
+ case NS_sprm::LN_PCrLf:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPCrLf
+ case NS_sprm::LN_PNumRM:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPNumRM
+ case NS_sprm::LN_PHugePapx:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPHugePapx
+ case NS_sprm::LN_PFUsePgsuSettings:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFUsePgsuSettings
+ case NS_sprm::LN_PFAdjustRight:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPFAdjustRight
+ case NS_sprm::LN_CFRMarkDel:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFRMarkDel
+ case NS_sprm::LN_CFRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFRMark
+ case NS_sprm::LN_CFFldVanish:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFFldVanish
+ case NS_sprm::LN_CFSpec: // sprmCFSpec
+ break;
+ case NS_sprm::LN_CPicLocation: // sprmCPicLocation
+ //is being resolved on the tokenizer side
+ break;
+ case NS_sprm::LN_CIbstRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIbstRMark
+ case NS_sprm::LN_CDttmRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCDttmRMark
+ case NS_sprm::LN_CFData:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFData
+ case NS_sprm::LN_CIdslRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIdslRMark
+ case NS_sprm::LN_CChs:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCChs
+ case NS_sprm::LN_CSymbol: // sprmCSymbol
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ resolveSprmProps(*this, rSprm); //resolves LN_FONT and LN_CHAR
+ break;
+ case NS_sprm::LN_CFOle2:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFOle2
+ case NS_sprm::LN_CIdCharType:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIdCharType
+ case NS_sprm::LN_CHighlight:
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ sal_Int32 nColor = 0;
+ if(true ==( mbIsHighlightSet = getColorFromIndex(nIntValue, nColor)))
+ rContext->Insert(PROP_CHAR_BACK_COLOR, true, uno::makeAny( nColor ));
+ else if (mnBackgroundColor)
+ rContext->Insert(PROP_CHAR_BACK_COLOR, true, uno::makeAny( mnBackgroundColor ));
+ }
+ break; // sprmCHighlight
+ case NS_sprm::LN_CObjLocation:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCObjLocation
+ case NS_sprm::LN_CFFtcAsciSymb:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFFtcAsciSymb
+ case NS_sprm::LN_CIstd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIstd
+ case NS_sprm::LN_CIstdPermute:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIstdPermute
+ case NS_sprm::LN_CDefault:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCDefault
+ case NS_sprm::LN_CPlain:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCPlain
+ case NS_sprm::LN_CKcd:
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ rContext->Insert(PROP_CHAR_EMPHASIS, true, uno::makeAny ( getEmphasisValue (nIntValue)));
+ break; // sprmCKcd
+ case NS_sprm::LN_CFEmboss:// sprmCFEmboss
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case 60:// sprmCFBold
+ case NS_sprm::LN_CFBoldBi:// sprmCFBoldBi (offset 0x27 to normal bold)
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFItalicBi:// sprmCFItalicBi (offset 0x27 to normal italic)
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFBold: //sprmCFBold
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case 61: /*sprmCFItalic*/
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFItalic: //sprmCFItalic
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFStrike: //sprmCFStrike
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5*/
+ case NS_sprm::LN_CFOutline: //sprmCFOutline
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFShadow: //sprmCFShadow
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFSmallCaps: //sprmCFSmallCaps
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFCaps: //sprmCFCaps
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFVanish: //sprmCFVanish
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ case NS_sprm::LN_CFDStrike: // sprmCFDStrike
+ /* WRITERFILTERSTATUS: done: 100, planned: , spent: 0.5 */
+ {
+ PropertyIds ePropertyId = PROP_CHAR_WEIGHT; //initialized to prevent warning!
+ switch( nSprmId )
+ {
+ case 60:// sprmCFBold
+ case NS_sprm::LN_CFBoldBi: // sprmCFBoldBi
+ case NS_sprm::LN_CFBold: /*sprmCFBold*/
+ /* WRITERFILTERSTATUS: */
+ ePropertyId = nSprmId != NS_sprm::LN_CFBoldBi ? PROP_CHAR_WEIGHT : PROP_CHAR_WEIGHT_COMPLEX;
+ break;
+ case 61: /*sprmCFItalic*/
+ case NS_sprm::LN_CFItalicBi: // sprmCFItalicBi
+ case NS_sprm::LN_CFItalic: /*sprmCFItalic*/
+ /* WRITERFILTERSTATUS: */
+ ePropertyId = nSprmId == 0x836 ? PROP_CHAR_POSTURE : PROP_CHAR_POSTURE_COMPLEX;
+ break;
+ case NS_sprm::LN_CFStrike: /*sprmCFStrike*/
+ case NS_sprm::LN_CFDStrike : /*sprmCFDStrike double strike through*/
+ /* WRITERFILTERSTATUS: */
+ ePropertyId = PROP_CHAR_STRIKEOUT;
+ break;
+ case NS_sprm::LN_CFOutline: /*sprmCFOutline*/
+ /* WRITERFILTERSTATUS: */
+ ePropertyId = PROP_CHAR_CONTOURED;
+ break;
+ case NS_sprm::LN_CFShadow: /*sprmCFShadow*/
+ /* WRITERFILTERSTATUS: */
+ ePropertyId = PROP_CHAR_SHADOWED;
+ break;
+ case NS_sprm::LN_CFSmallCaps: /*sprmCFSmallCaps*/
+ case NS_sprm::LN_CFCaps: /*sprmCFCaps*/
+ /* WRITERFILTERSTATUS: */
+ ePropertyId = PROP_CHAR_CASE_MAP;
+ break;
+ case NS_sprm::LN_CFVanish: /*sprmCFVanish*/
+ /* WRITERFILTERSTATUS: */
+ ePropertyId = PROP_CHAR_HIDDEN;
+ break;
+ case NS_sprm::LN_CFEmboss: /*sprmCFEmboss*/
+ /* WRITERFILTERSTATUS: */
+ ePropertyId = PROP_CHAR_RELIEF;
+ break;
+ }
+ //expected: 0,1,128,129
+ if(nIntValue != 128) //inherited from paragraph - ignore
+ {
+ if( nIntValue == 129) //inverted style sheet value
+ {
+ //get value from style sheet and invert it
+ sal_Int16 nStyleValue = 0;
+ double fDoubleValue;
+ uno::Any aStyleVal = m_pImpl->GetPropertyFromStyleSheet(ePropertyId);
+ if( !aStyleVal.hasValue() )
+ {
+ nIntValue = 0x83a == nSprmId ?
+ 4 : 1;
+ }
+ else if(aStyleVal.getValueTypeClass() == uno::TypeClass_FLOAT )
+ {
+ //only in case of awt::FontWeight
+ aStyleVal >>= fDoubleValue;
+ nIntValue = fDoubleValue > 100. ? 0 : 1;
+ }
+ else if((aStyleVal >>= nStyleValue) ||
+ (nStyleValue = (sal_Int16)comphelper::getEnumAsINT32(aStyleVal)) >= 0 )
+ {
+ nIntValue = 0x83a == nSprmId ?
+ nStyleValue ? 0 : 4 :
+ nStyleValue ? 0 : 1;
+ }
+ else
+ {
+ OSL_ENSURE( false, "what type was it");
+ }
+ }
+
+ switch( nSprmId )
+ {
+ case 60:/*sprmCFBold*/
+ case NS_sprm::LN_CFBold: /*sprmCFBold*/
+ case NS_sprm::LN_CFBoldBi: // sprmCFBoldBi
+ /* WRITERFILTERSTATUS: */
+ {
+ uno::Any aBold( uno::makeAny( nIntValue ? awt::FontWeight::BOLD : awt::FontWeight::NORMAL ) );
+
+ rContext->Insert(ePropertyId, true, aBold );
+ if( nSprmId != NS_sprm::LN_CFBoldBi ) // sprmCFBoldBi
+ rContext->Insert(PROP_CHAR_WEIGHT_ASIAN, true, aBold );
+ }
+ break;
+ case 61: /*sprmCFItalic*/
+ case NS_sprm::LN_CFItalic: /*sprmCFItalic*/
+ case NS_sprm::LN_CFItalicBi: // sprmCFItalicBi
+ /* WRITERFILTERSTATUS: */
+ {
+ uno::Any aPosture( uno::makeAny( nIntValue ? awt::FontSlant_ITALIC : awt::FontSlant_NONE ) );
+ rContext->Insert( ePropertyId, true, aPosture );
+ if( nSprmId != NS_sprm::LN_CFItalicBi ) // sprmCFItalicBi
+ rContext->Insert(PROP_CHAR_POSTURE_ASIAN, true, aPosture );
+ }
+ break;
+ case NS_sprm::LN_CFStrike: /*sprmCFStrike*/
+ /* WRITERFILTERSTATUS: */
+ rContext->Insert(ePropertyId, true,
+ uno::makeAny( nIntValue ? awt::FontStrikeout::SINGLE : awt::FontStrikeout::NONE ) );
+ break;
+ case NS_sprm::LN_CFDStrike : /*sprmCFDStrike double strike through*/
+ /* WRITERFILTERSTATUS: */
+ rContext->Insert(ePropertyId, true,
+ uno::makeAny( awt::FontStrikeout::DOUBLE ) );
+ break;
+ case NS_sprm::LN_CFOutline: /*sprmCFOutline*/
+ case NS_sprm::LN_CFShadow: /*sprmCFShadow*/
+ case NS_sprm::LN_CFVanish: /*sprmCFVanish*/
+ /* WRITERFILTERSTATUS: */
+ rContext->Insert(ePropertyId, true, uno::makeAny( nIntValue ? true : false ));
+ break;
+ case NS_sprm::LN_CFSmallCaps: /*sprmCFSmallCaps*/
+ /* WRITERFILTERSTATUS: */
+ rContext->Insert(ePropertyId, true,
+ uno::makeAny( nIntValue ? style::CaseMap::SMALLCAPS : style::CaseMap::NONE));
+ break;
+ case NS_sprm::LN_CFCaps: /*sprmCFCaps*/
+ /* WRITERFILTERSTATUS: */
+ rContext->Insert(ePropertyId, true,
+ uno::makeAny( nIntValue ? style::CaseMap::UPPERCASE : style::CaseMap::NONE));
+ break;
+ case NS_sprm::LN_CFEmboss: /*sprmCFEmboss*/
+ /* WRITERFILTERSTATUS: */
+ rContext->Insert(ePropertyId, true,
+ uno::makeAny( nIntValue ? awt::FontRelief::EMBOSSED : awt::FontRelief::NONE ));
+ break;
+
+ }
+ }
+ }
+ break;
+ case NS_sprm::LN_CFtcDefault:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFtcDefault
+ case NS_sprm::LN_CKul: // sprmCKul
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ // Parameter: 0 = none, 1 = single, 2 = by Word,
+ // 3 = double, 4 = dotted, 5 = hidden
+ // 6 = thick, 7 = dash, 8 = dot(not used)
+ // 9 = dotdash 10 = dotdotdash 11 = wave
+ handleUnderlineType(nIntValue, rContext);
+ }
+ break;
+ case NS_sprm::LN_CSizePos:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCSizePos
+ case NS_sprm::LN_CLid:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCLid
+ case NS_sprm::LN_CIco:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ {
+ sal_Int32 nColor = 0;
+ if (getColorFromIndex(nIntValue, nColor))
+ rContext->Insert(PROP_CHAR_COLOR, true, uno::makeAny( nColor ) );
+ }
+ break; // sprmCIco
+ case NS_sprm::LN_CHpsBi: // sprmCHpsBi
+ case NS_sprm::LN_CHps: // sprmCHps
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ //multiples of half points (12pt == 24)
+ double fVal = double(nIntValue) / 2.;
+ uno::Any aVal = uno::makeAny( fVal );
+ if( NS_sprm::LN_CHpsBi == nSprmId )
+ rContext->Insert( PROP_CHAR_HEIGHT_COMPLEX, true, aVal );
+ else
+ {
+ //Asian get the same value as Western
+ rContext->Insert( PROP_CHAR_HEIGHT, true, aVal );
+ rContext->Insert( PROP_CHAR_HEIGHT_ASIAN, true, aVal );
+ }
+ }
+ break;
+ case NS_sprm::LN_CHpsInc:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCHpsInc
+ case NS_sprm::LN_CHpsPos:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ {
+ // FIXME: ww8 filter in ww8par6.cxx has a Read_SubSuperProp function
+ // that counts the escapement from this value and font size. So it will be
+ // on our TODO list
+ sal_Int16 nEscapement = 0;
+ sal_Int8 nProp = 100;
+ if (nIntValue < 0)
+ nEscapement = -58;
+ else if (nIntValue > 0)
+ nEscapement = 58;
+ else /* (nIntValue == 0) */
+ nProp = 0;
+ rContext->Insert(PROP_CHAR_ESCAPEMENT, true, uno::makeAny( nEscapement ) );
+ rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT, true, uno::makeAny( nProp ) );
+ }
+ break; // sprmCHpsPos
+ case NS_sprm::LN_CHpsPosAdj:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCHpsPosAdj
+ case NS_sprm::LN_CMajority:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCMajority
+ case NS_sprm::LN_CIss: // sprmCIss
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ //sub/super script 1: super, 2: sub, 0: normal
+ sal_Int16 nEscapement = 0;
+ sal_Int8 nProp = 58;
+ switch(nIntValue)
+ {
+ case 1: //super
+ nEscapement = 101;
+ break;
+ case 2: //sub
+ nEscapement = -101;
+ break;
+ case 0: nProp = 0;break; //none
+ }
+ rContext->Insert(PROP_CHAR_ESCAPEMENT, true, uno::makeAny( nEscapement ) );
+ rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT, true, uno::makeAny( nProp ) );
+ }
+ break;
+ case NS_sprm::LN_CHpsNew50:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCHpsNew50
+ case NS_sprm::LN_CHpsInc1:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCHpsInc1
+ case 71 : //"sprmCDxaSpace"
+ case 96 : //"sprmCDxaSpace"
+ case NS_sprm::LN_CDxaSpace: // sprmCDxaSpace
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+ //Kerning half point values
+ //TODO: there are two kerning values -
+ // in ww8par6.cxx NS_sprm::LN_CHpsKern is used as boolean AutoKerning
+ rContext->Insert(PROP_CHAR_CHAR_KERNING, true, uno::makeAny( sal_Int16(ConversionHelper::convertTwipToMM100(sal_Int16(nIntValue))) ) );
+ break;
+ case NS_sprm::LN_CHpsKern: // sprmCHpsKern auto kerning is bound to a minimum font size in Word - but not in Writer :-(
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ rContext->Insert(PROP_CHAR_AUTO_KERNING, true, uno::makeAny( true ) );
+ break;
+ case NS_sprm::LN_CMajority50:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCMajority50
+ case NS_sprm::LN_CHpsMul:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCHpsMul
+ case NS_sprm::LN_CYsri:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCYsri
+ case NS_sprm::LN_CRgFtc0: // sprmCRgFtc0 //ascii font index
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_sprm::LN_CRgFtc1: // sprmCRgFtc1 //Asian font index
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_sprm::LN_CRgFtc2: // sprmCRgFtc2 //CTL font index
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_sprm::LN_CFtcBi: // sprmCFtcBi //font index of a CTL font
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ FontTablePtr pFontTable = m_pImpl->GetFontTable();
+ if(nIntValue >= 0 && pFontTable->size() > sal_uInt32(nIntValue))
+ {
+ PropertyIds eFontName = PROP_CHAR_FONT_NAME;
+ PropertyIds eFontStyle = PROP_CHAR_FONT_STYLE;
+ PropertyIds eFontFamily = PROP_CHAR_FONT_FAMILY;
+ PropertyIds eFontCharSet = PROP_CHAR_FONT_CHAR_SET;
+ PropertyIds eFontPitch = PROP_CHAR_FONT_PITCH;
+ switch(nSprmId)
+ {
+ case NS_sprm::LN_CRgFtc0:
+ //already initialized
+ break;
+ case NS_sprm::LN_CRgFtc1:
+ eFontName = PROP_CHAR_FONT_NAME_ASIAN;
+ eFontStyle = PROP_CHAR_FONT_STYLE_ASIAN;
+ eFontFamily = PROP_CHAR_FONT_FAMILY_ASIAN;
+ eFontCharSet = PROP_CHAR_FONT_CHAR_SET_ASIAN;
+ eFontPitch = PROP_CHAR_FONT_PITCH_ASIAN;
+ break;
+ case NS_sprm::LN_CRgFtc2:
+ case NS_sprm::LN_CFtcBi:
+ eFontName = PROP_CHAR_FONT_NAME_COMPLEX;
+ eFontStyle = PROP_CHAR_FONT_STYLE_COMPLEX;
+ eFontFamily = PROP_CHAR_FONT_FAMILY_COMPLEX;
+ eFontCharSet = PROP_CHAR_FONT_CHAR_SET_COMPLEX;
+ eFontPitch = PROP_CHAR_FONT_PITCH_COMPLEX;
+ break;
+ }
+ const FontEntry::Pointer_t pFontEntry(pFontTable->getFontEntry(sal_uInt32(nIntValue)));
+ rContext->Insert(eFontName, true, uno::makeAny( pFontEntry->sFontName ));
+ // rContext->Insert(eFontStyle, uno::makeAny( pFontEntry-> ));
+ // rContext->Insert(eFontFamily, uno::makeAny( pFontEntry-> ));
+ rContext->Insert(eFontCharSet, true, uno::makeAny( (sal_Int16)pFontEntry->nTextEncoding ));
+ rContext->Insert(eFontPitch, true, uno::makeAny( pFontEntry->nPitchRequest ));
+ }
+ }
+ break;
+ case NS_sprm::LN_CCharScale: // sprmCCharScale
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ rContext->Insert(PROP_CHAR_SCALE_WIDTH, true,
+ uno::makeAny( sal_Int16(nIntValue) ));
+ break;
+ case NS_sprm::LN_CFImprint: // sprmCFImprint 1 or 0
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ // FontRelief: NONE, EMBOSSED, ENGRAVED
+ rContext->Insert(PROP_CHAR_RELIEF, true,
+ uno::makeAny( nIntValue ? awt::FontRelief::ENGRAVED : awt::FontRelief::NONE ));
+ break;
+ case NS_sprm::LN_CFObj:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFObj
+ case NS_sprm::LN_CPropRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCPropRMark
+ case NS_sprm::LN_CSfxText:
+ /* 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)
+ rContext->Insert(PROP_CHAR_FLASH, true, uno::makeAny( true ));
+ else
+ rContext->Insert(PROP_CHAR_FLASH, true, uno::makeAny( false ));
+ break; // sprmCSfxText
+ case NS_sprm::LN_CFBiDi:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFBiDi
+ case NS_sprm::LN_CFDiacColor:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFDiacColor
+ case NS_sprm::LN_CIcoBi:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIcoBi
+ case NS_sprm::LN_CDispFldRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCDispFldRMark
+ case NS_sprm::LN_CIbstRMarkDel:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIbstRMarkDel
+ case NS_sprm::LN_CDttmRMarkDel:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCDttmRMarkDel
+ case NS_sprm::LN_CBrc:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCBrc
+ case NS_sprm::LN_CShd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break; // sprmCShd
+ case NS_sprm::LN_CIdslRMarkDel:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCIdslRMarkDel
+ case NS_sprm::LN_CFUsePgsuSettings:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCFUsePgsuSettings
+ case NS_sprm::LN_CCpg:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmCCpg
+ case NS_sprm::LN_CLidBi: // sprmCLidBi language complex
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_sprm::LN_CRgLid0_80: //sprmCRgLid0_80
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 1 */
+ //undocumented but interpreted as western language
+ case NS_sprm::LN_CRgLid0: // sprmCRgLid0 language Western
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_sprm::LN_CRgLid1: // sprmCRgLid1 language Asian
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ lang::Locale aLocale;
+ MsLangId::convertLanguageToLocale( (LanguageType)nIntValue, aLocale );
+ rContext->Insert(NS_sprm::LN_CRgLid0 == nSprmId ? PROP_CHAR_LOCALE :
+ NS_sprm::LN_CRgLid1 == nSprmId ? PROP_CHAR_LOCALE_ASIAN : PROP_CHAR_LOCALE_COMPLEX,
+ true,
+ uno::makeAny( aLocale ) );
+ }
+ break;
+
+ case NS_sprm::LN_CIdctHint: // sprmCIdctHint
+ //list table - text offset???
+ break;
+ case NS_sprm::LN_PicBrcl:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPicBrcl
+ case NS_sprm::LN_PicScale:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPicScale
+ case NS_sprm::LN_PicBrcTop:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPicBrcTop
+ case NS_sprm::LN_PicBrcLeft:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPicBrcLeft
+ case NS_sprm::LN_PicBrcBottom:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPicBrcBoConversionHelper::convertTwipToMM100ttom
+ case NS_sprm::LN_PicBrcRight:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmPicBrcRight
+ case NS_sprm::LN_ScnsPgn:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmScnsPgn
+ case NS_sprm::LN_SiHeadingPgn:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetEvenlySpaced( nIntValue > 0 );
+
+ break; // sprmSiHeadingPgn
+ case NS_sprm::LN_SOlstAnm:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSOlstAnm
+ case 136:
+ case NS_sprm::LN_SDxaColWidth: // sprmSDxaColWidth
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ // contains the twip width of the column as 3-byte-code
+ // the lowet byte contains the index
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->AppendColumnWidth( ConversionHelper::convertTwipToMM100( (nIntValue & 0xffff00) >> 8 ));
+ break;
+ case NS_sprm::LN_SDxaColSpacing: // sprmSDxaColSpacing
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ // the lowet byte contains the index
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->AppendColumnSpacing( ConversionHelper::convertTwipToMM100( (nIntValue & 0xffff00) >> 8 ));
+ break;
+ case 138:
+ case NS_sprm::LN_SFEvenlySpaced:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetEvenlySpaced( nIntValue > 0 );
+ break; // sprmSFEvenlySpaced
+ case NS_sprm::LN_SFProtected: // sprmSFProtected
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ //todo: missing feature - unlocked sections in protected documents
+ break;
+ case NS_sprm::LN_SDmBinFirst: // sprmSDmBinFirst
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetFirstPaperBin(nIntValue);
+ break;
+ case NS_sprm::LN_SDmBinOther: // sprmSDmBinOther
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetPaperBin( nIntValue );
+ break;
+ case NS_sprm::LN_SBkc: // sprmSBkc
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+ /* break type
+ 0 - No break
+ 1 - New Colunn
+ 2 - New page
+ 3 - Even page
+ 4 - odd page
+ */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetBreakType( nIntValue );
+ break;
+ case 143:
+ case NS_sprm::LN_SFTitlePage: // sprmSFTitlePage
+ case NS_ooxml::LN_EG_SectPrContents_titlePg:
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetTitlePage( nIntValue > 0 ? true : false );//section has title page
+ }
+ break;
+ case 144:
+ case NS_sprm::LN_SCcolumns: // sprmSCcolumns
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ //no of columns - 1
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetColumnCount( (sal_Int16) nIntValue );
+ break;
+ case 145:
+ case NS_sprm::LN_SDxaColumns: // sprmSDxaColumns
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ //column distance - default 708 twip
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetColumnDistance( ConversionHelper::convertTwipToMM100( nIntValue ) );
+ break;
+ case NS_sprm::LN_SFAutoPgn:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSFAutoPgn
+ case 147:
+ case NS_sprm::LN_SNfcPgn: // sprmSNfcPgn
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ //page numbering 0 - Arab, 1 - ROMAN, 2 - roman, 3 - ABC, 4 abc
+ sal_Int16 nNumbering;
+ switch( nIntValue )
+ {
+ case 1: nNumbering = style::NumberingType::ROMAN_UPPER;
+ case 2: nNumbering = style::NumberingType::ROMAN_LOWER;
+ case 3: nNumbering = style::NumberingType::CHARS_UPPER_LETTER;
+ case 4: nNumbering = style::NumberingType::CHARS_LOWER_LETTER;
+ case 0:
+ default:
+ nNumbering = style::NumberingType::ARABIC;
+ }
+ rContext->Insert( PROP_NUMBERING_TYPE, false, uno::makeAny( nNumbering ) );
+ break;
+ case NS_sprm::LN_SDyaPgn:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSDyaPgn
+ case NS_sprm::LN_SDxaPgn:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSDxaPgn
+ case 150:
+ case NS_sprm::LN_SFPgnRestart: // sprmSFPgnRestart
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetPageNoRestart( nIntValue > 0 );
+ }
+ break;
+ case NS_sprm::LN_SFEndnote:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSFEndnote
+ case 154:
+ case NS_sprm::LN_SNLnnMod:// sprmSNLnnMod
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if( pSectionContext )
+ pSectionContext->SetLnnMod( nIntValue );
+ break;
+ case 155:
+ case NS_sprm::LN_SDxaLnn: // sprmSDxaLnn
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if( pSectionContext )
+ pSectionContext->SetdxaLnn( nIntValue );
+ break;
+ case 152:
+ case NS_sprm::LN_SLnc:// sprmSLnc
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if( pSectionContext )
+ pSectionContext->SetLnc( nIntValue );
+ break;
+ case 160:
+ case NS_sprm::LN_SLnnMin: // sprmSLnnMin
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if( pSectionContext )
+ pSectionContext->SetLnnMin( nIntValue );
+ break;
+
+ case NS_sprm::LN_SGprfIhdt:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ //flags about header/footer sharing and footnotes?
+ /* ww8scan.hxx:
+ * WW8_HEADER_EVEN = 0x01, WW8_HEADER_ODD = 0x02, WW8_FOOTER_EVEN = 0x04,
+ * WW8_FOOTER_ODD = 0x08, WW8_HEADER_FIRST = 0x10, WW8_FOOTER_FIRST = 0x20
+ */
+
+// if(pSectionContext)
+ break; // sprmSGprfIhdt
+ case NS_sprm::LN_SDyaHdrTop: // sprmSDyaHdrTop
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ // default 720 twip
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetHeaderTop( ConversionHelper::convertTwipToMM100( nIntValue ));
+ break;
+ case NS_sprm::LN_SDyaHdrBottom: // sprmSDyaHdrBottom
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ // default 720 twip
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetHeaderBottom( ConversionHelper::convertTwipToMM100( nIntValue ) );
+ break;
+ case 158:
+ case NS_sprm::LN_SLBetween: // sprmSLBetween
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetSeparatorLine( nIntValue > 0 );
+ break;
+ case NS_sprm::LN_SVjc:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break; // sprmSVjc
+ case 161:
+ case NS_sprm::LN_SPgnStart: // sprmSPgnStart
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //page number
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetPageNumber( nIntValue );
+ break;
+ case 162:
+ case NS_sprm::LN_SBOrientation:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //todo: the old filter assumed that a value of 2 points to double-pages layout
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetLandscape( nIntValue > 0 );
+ rContext->Insert( PROP_IS_LANDSCAPE , false, uno::makeAny( nIntValue > 0 ));
+ break; // sprmSBOrientation
+ case NS_sprm::LN_SBCustomize:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break; // sprmSBCustomize
+ case 165:
+ case NS_sprm::LN_SYaPage: // sprmSYaPage
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //page height, rounded to default values, default: 0x3dc0 twip
+ sal_Int32 nHeight = ConversionHelper::convertTwipToMM100( nIntValue );
+ rContext->Insert( PROP_HEIGHT, false, uno::makeAny( PaperInfo::sloppyFitPageDimension( nHeight ) ) );
+ }
+ break;
+ case NS_sprm::LN_SXaPage: // sprmSXaPage
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //page width, rounded to default values, default 0x2fd0 twip
+ sal_Int32 nWidth = ConversionHelper::convertTwipToMM100( nIntValue );
+ rContext->Insert( PROP_WIDTH, false, uno::makeAny( PaperInfo::sloppyFitPageDimension( nWidth ) ) );
+ }
+ break;
+ case 166:
+ case NS_sprm::LN_SDxaLeft: // sprmSDxaLeft
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //left page margin default 0x708 twip
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( nIntValue );
+ if(pSectionContext)
+ pSectionContext->SetLeftMargin( nConverted );
+ rContext->Insert( PROP_LEFT_MARGIN, false, uno::makeAny( nConverted ));
+ }
+ break;
+ case 167:
+ case NS_sprm::LN_SDxaRight: // sprmSDxaRight
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //right page margin default 0x708 twip
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( nIntValue );
+ if(pSectionContext)
+ pSectionContext->SetRightMargin( nConverted );
+ rContext->Insert( PROP_RIGHT_MARGIN, false, uno::makeAny( nConverted ));
+ }
+ break;
+ case 168:
+ case NS_sprm::LN_SDyaTop: // sprmSDyaTop
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //top page margin default 1440 twip
+ //todo: check cast of SVBT16
+ sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( static_cast< sal_Int16 >( nIntValue ) );
+ rContext->Insert( PROP_TOP_MARGIN, false, uno::makeAny( nConverted ) );
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetTopMargin( nConverted );
+ }
+ break;
+ case 169:
+ case NS_sprm::LN_SDyaBottom: // sprmSDyaBottom
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //bottom page margin default 1440 twip
+ //todo: check cast of SVBT16
+ sal_Int32 nConverted = ConversionHelper::convertTwipToMM100( static_cast< sal_Int16 >( nIntValue ) );
+ rContext->Insert( PROP_BOTTOM_MARGIN, false, uno::makeAny( nConverted) );
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetBottomMargin( nConverted );
+ }
+ break;
+ case 170:
+ case NS_sprm::LN_SDzaGutter: // sprmSDzaGutter
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ // gutter is added to one of the margins of a section depending on RTL, can be placed on top either
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ {
+ pSectionContext->SetDzaGutter( ConversionHelper::convertTwipToMM100( nIntValue ) );
+ }
+ }
+ break;
+ case NS_sprm::LN_SDmPaperReq: // sprmSDmPaperReq
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ //paper code - no handled in old filter
+ break;
+ case NS_sprm::LN_SPropRMark:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSPropRMark
+ case NS_sprm::LN_SFBiDi:// sprmSFBiDi
+ {
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetSFBiDi( nIntValue > 0 );
+ }
+ break;
+ case NS_sprm::LN_SFFacingCol:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmSFFacingCol
+ case NS_sprm::LN_SFRTLGutter: // sprmSFRTLGutter
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->SetGutterRTL( nIntValue > 0 );
+ }
+ break;
+ case NS_sprm::LN_SBrcTop: // sprmSBrcTop
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_sprm::LN_SBrcLeft: // sprmSBrcLeft
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_sprm::LN_SBrcBottom: // sprmSBrcBottom
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_sprm::LN_SBrcRight: // sprmSBrcRight
+ /* WRITERFILTERSTATUS: Sectiondone: 100, planned: 0.5, spent: 0 */
+ {
+ table::BorderLine aBorderLine;
+ sal_Int32 nLineDistance = ConversionHelper::MakeBorderLine( nIntValue, aBorderLine );
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ {
+ static const BorderPosition aPositions[4] =
+ {
+ BORDER_TOP,
+ BORDER_LEFT,
+ BORDER_BOTTOM,
+ BORDER_RIGHT
+ };
+ pSectionContext->SetBorder( aPositions[nSprmId - NS_sprm::LN_SBrcTop], nLineDistance, aBorderLine );
+ }
+ }
+ break;
+
+ case NS_sprm::LN_SPgbProp: // sprmSPgbProp
+ {
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ {
+ pSectionContext->ApplyBorderToPageStyles( m_pImpl->GetPageStyles(), m_pImpl->GetTextFactory(), nIntValue );
+ }
+ }
+ break;
+ case NS_sprm::LN_SDxtCharSpace:
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ {
+ pSectionContext->SetDxtCharSpace( nIntValue );
+ }
+ }
+ break; // sprmSDxtCharSpace
+ case NS_sprm::LN_SDyaLinePitch: // sprmSDyaLinePitch
+ {
+ /* 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 0x703a: //undocumented, grid related?
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ OSL_ENSURE( false, "TODO: not handled yet"); //nIntValue like 0x008a2373 ?
+ break;
+ case NS_sprm::LN_SClm:
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ sal_Int16 nGridType = text::TextGridMode::NONE;
+ switch( nIntValue )
+ {
+ case 0:
+ nGridType = text::TextGridMode::NONE;
+ break;
+ case 3:
+ //Text snaps to char grid, this doesn't make a lot of sense to
+ //me. This is closer than LINES_CHARS
+ nGridType = text::TextGridMode::LINES;
+ break;
+ case 1:
+ nGridType = text::TextGridMode::LINES_AND_CHARS;
+ break;
+ case 2:
+ nGridType = text::TextGridMode::LINES;
+ break;
+ default:;
+ }
+ rContext->Insert( PROP_GRID_MODE, false, uno::makeAny( nGridType ) );
+
+ //Seems to force this behaviour in word ?
+ if(nGridType != text::TextGridMode::NONE)
+ m_pImpl->SetDocumentSettingsProperty(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_ADD_EXTERNAL_LEADING ),
+ uno::makeAny( true ) );
+ }
+ break; // sprmSClm
+ case NS_sprm::LN_STextFlow:
+ 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
+ */
+ sal_Int16 nDirection = text::WritingMode_LR_TB;
+ switch( nIntValue )
+ {
+ case 0:
+ case 4:
+ nDirection = text::WritingMode_LR_TB;
+ break;
+ case 1:
+ case 2:
+ case 3:
+ nDirection = text::WritingMode_TB_RL;
+ break;
+ default:;
+ }
+
+ 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
+ case NS_sprm::LN_TDxaLeft:
+ case NS_sprm::LN_TDxaGapHalf:
+ case NS_sprm::LN_TFCantSplit:
+ case NS_sprm::LN_TTableHeader:
+ case NS_sprm::LN_TTableBorders: // sprmTTableBorders
+ {
+ OSL_ENSURE( false, "table propeties should be handled by the table manager");
+ }
+ break;
+ case NS_sprm::LN_TDefTable10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDefTable10
+ case NS_sprm::LN_TDyaRowHeight:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDyaRowHeight
+ case NS_sprm::LN_TDefTable:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDefTable
+ case NS_sprm::LN_TDefTableShd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDefTableShd
+ case NS_sprm::LN_TTlp:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTTlp
+ case NS_sprm::LN_TFBiDi:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTFBiDi
+ case NS_sprm::LN_THTMLProps:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTHTMLProps
+ case NS_sprm::LN_TSetBrc:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTSetBrc
+ case NS_sprm::LN_TInsert:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTInsert
+ case NS_sprm::LN_TDelete:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDelete
+ case NS_sprm::LN_TDxaCol:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDxaCol
+ case NS_sprm::LN_TMerge:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTMerge
+ case NS_sprm::LN_TSplit:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTSplit
+ case NS_sprm::LN_TSetBrc10:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTSetBrc10
+ case 164: // sprmTSetShd
+ case NS_sprm::LN_TSetShd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTSetShd
+ case NS_sprm::LN_TSetShdOdd:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTSetShdOdd
+ case NS_sprm::LN_TTextFlow:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTTextFlow
+ case NS_sprm::LN_TDiagLine:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTDiagLine
+ case NS_sprm::LN_TVertMerge:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTVertMerge
+ case NS_sprm::LN_TVertAlign:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; // sprmTVertAlign
+ // the following are not part of the official documentation
+ case 0x6870: //TxtForeColor
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ //contains a color as 0xTTRRGGBB while SO uses 0xTTRRGGBB
+ sal_Int32 nColor = ConversionHelper::ConvertColor(nIntValue);
+ rContext->Insert(PROP_CHAR_COLOR, true, uno::makeAny( nColor ) );
+ }
+ break;
+ case 0x4874:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; //seems to be a language id for Asian text - undocumented
+ case 0x6877: //underlining color
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ sal_Int32 nColor = ConversionHelper::ConvertColor(nIntValue);
+ rContext->Insert(PROP_CHAR_UNDERLINE_HAS_COLOR, true, uno::makeAny( true ) );
+ rContext->Insert(PROP_CHAR_UNDERLINE_COLOR, true, uno::makeAny( nColor ) );
+ }
+ break;
+ case 0x6815:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; //undocumented
+ case NS_sprm::LN_CIndrsid:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; //undocumented
+ case 0x6467:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; //undocumented
+ case 0xF617:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; //undocumented
+ case 0xd634: // sprmTNewSpacing - table spacing ( see WW8TabBandDesc::ProcessSpacing() )
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break;
+ case NS_sprm::LN_TTRLeft:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; //undocumented
+ case 0x4888:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case 0x6887:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ //properties of list levels - undocumented
+ break;
+ case 0xd234:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case 0xd235:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case 0xd236:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ case 0xd237:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;//undocumented section properties
+ case NS_sprm::LN_CEastAsianLayout:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ resolveSprmProps(*this, rSprm);
+ break;
+ case NS_ooxml::LN_CT_Tabs_tab:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ resolveSprmProps(*this, rSprm);
+ m_pImpl->IncorporateTabStop(m_pImpl->m_aCurrentTabStop);
+ m_pImpl->m_aCurrentTabStop = DeletableTabStop();
+ break;
+ case NS_ooxml::LN_CT_PPrBase_tabs:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ // Initialize tab stop vector from style sheet
+ if( !m_pImpl->IsStyleSheetImport() )
+ {
+ uno::Any aValue = m_pImpl->GetPropertyFromStyleSheet(PROP_PARA_TAB_STOPS);
+ uno::Sequence< style::TabStop > aStyleTabStops;
+ if(aValue >>= aStyleTabStops)
+ {
+ m_pImpl->InitTabStopFromStyle( aStyleTabStops );
+ }
+ }
+ resolveSprmProps(*this, rSprm);
+ rContext->Insert(PROP_PARA_TAB_STOPS, true, uno::makeAny( m_pImpl->GetCurrentTabStopAndClear()));
+ }
+ break;
+
+ case NS_ooxml::LN_CT_PPr_sectPr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrBase_color:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrBase_rFonts:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrBase_bdr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrBase_eastAsianLayout:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrBase_u:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrBase_lang:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_PPrBase_spacing:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_PPrBase_ind:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_RPrDefault_rPr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_PPrDefault_pPr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_DocDefaults_pPrDefault:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Style_pPr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_Style_rPr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_PPr_rPr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_PPrBase_numPr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ resolveSprmProps(*this, rSprm);
+ break;
+ case NS_ooxml::LN_EG_SectPrContents_footnotePr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_SectPrContents_endnotePr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->SetInFootnoteProperties( NS_ooxml::LN_EG_SectPrContents_footnotePr == nSprmId );
+ resolveSprmProps(*this, rSprm);
+ break;
+ case NS_ooxml::LN_EG_SectPrContents_lnNumType:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ {
+ resolveSprmProps(*this, rSprm);
+ LineNumberSettings aSettings = m_pImpl->GetLineNumberSettings();
+ aSettings.bIsOn = true;
+ m_pImpl->SetLineNumberSettings( aSettings );
+ //apply settings at XLineNumberingProperties
+ try
+ {
+ uno::Reference< text::XLineNumberingProperties > xLineNumberingProperties( m_pImpl->GetTextDocument(), uno::UNO_QUERY_THROW );
+ uno::Reference< beans::XPropertySet > xLineNumberingPropSet = xLineNumberingProperties->getLineNumberingProperties();
+ PropertyNameSupplier& rNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_IS_ON ), uno::makeAny(true) );
+ if( aSettings.nInterval )
+ xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_INTERVAL ), uno::makeAny((sal_Int16)aSettings.nInterval) );
+ if( aSettings.nDistance )
+ xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_DISTANCE ), uno::makeAny(aSettings.nDistance) );
+ xLineNumberingPropSet->setPropertyValue(rNameSupplier.GetName( PROP_RESTART_AT_EACH_PAGE ), uno::makeAny(aSettings.bRestartAtEachPage) );
+ }
+ catch( const uno::Exception& )
+ {
+ }
+
+ }
+ break;
+ case NS_ooxml::LN_CT_PPrBase_framePr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH);
+ if( pContext.get() )
+ {
+ ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pContext.get() );
+ pParaContext->SetFrameMode();
+
+ }
+ else
+ {
+ //TODO: What about style sheet import of frame properties
+ }
+ resolveSprmProps(*this, rSprm);
+ }
+ break;
+ case NS_ooxml::LN_EG_SectPrContents_pgSz:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ CT_PageSz.code = 0;
+ {
+ PaperInfo aLetter(PAPER_LETTER);
+ CT_PageSz.w = aLetter.getWidth();
+ CT_PageSz.h = aLetter.getHeight();
+ }
+ CT_PageSz.orient = false;
+ resolveSprmProps(*this, rSprm);
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ {
+ pSectionContext->Insert( PROP_HEIGHT, false, uno::makeAny( CT_PageSz.h ) );
+ pSectionContext->Insert( PROP_IS_LANDSCAPE, false, uno::makeAny( CT_PageSz.orient ));
+ pSectionContext->Insert( PROP_WIDTH, false, uno::makeAny( CT_PageSz.w ) );
+ pSectionContext->SetLandscape( CT_PageSz.orient );
+ }
+ break;
+
+ case NS_ooxml::LN_EG_SectPrContents_pgMar:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->InitPageMargins();
+ resolveSprmProps(*this, rSprm);
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ {
+ const _PageMar& rPageMar = m_pImpl->GetPageMargins();
+ pSectionContext->SetTopMargin( rPageMar.top );
+ pSectionContext->SetRightMargin( rPageMar.right );
+ pSectionContext->SetBottomMargin( rPageMar.bottom );
+ pSectionContext->SetLeftMargin( rPageMar.left );
+ pSectionContext->SetHeaderTop( rPageMar.header );
+ pSectionContext->SetHeaderBottom( rPageMar.footer );
+ }
+ break;
+
+ case NS_ooxml::LN_EG_SectPrContents_cols:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+
+ SectionColumnHandlerPtr pSectHdl( new SectionColumnHandler );
+ pProperties->resolve(*pSectHdl);
+ if(pSectionContext)
+ {
+ if( pSectHdl->IsEqualWidth() )
+ {
+ pSectionContext->SetEvenlySpaced( true );
+ pSectionContext->SetColumnCount( (sal_Int16) (pSectHdl->GetNum() - 1) );
+ pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
+ pSectionContext->SetSeparatorLine( pSectHdl->IsSeparator() );
+ }
+ else if( !pSectHdl->GetColumns().empty() )
+ {
+ pSectionContext->SetEvenlySpaced( false );
+ pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
+ pSectionContext->SetColumnCount( (sal_Int16)(pSectHdl->GetColumns().size() -1));
+ std::vector<_Column>::const_iterator tmpIter = pSectHdl->GetColumns().begin();
+ for (; tmpIter != pSectHdl->GetColumns().end(); tmpIter++)
+ {
+ pSectionContext->AppendColumnWidth( tmpIter->nWidth );
+ if ((tmpIter != pSectHdl->GetColumns().end() - 1) || (tmpIter->nSpace > 0))
+ pSectionContext->AppendColumnSpacing( tmpIter->nSpace );
+ }
+ pSectionContext->SetSeparatorLine( pSectHdl->IsSeparator() );
+ }
+ else if( pSectHdl->GetNum() > 0 )
+ {
+ pSectionContext->SetColumnCount( (sal_Int16)pSectHdl->GetNum() - 1 );
+ pSectionContext->SetColumnDistance( pSectHdl->GetSpace() );
+ }
+ }
+ }
+ }
+ break;
+ case NS_ooxml::LN_EG_SectPrContents_docGrid:
+ resolveSprmProps(*this, rSprm);
+ break;
+ case NS_ooxml::LN_EG_SectPrContents_pgBorders:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get( ) && pSectionContext )
+ {
+ PageBordersHandlerPtr pHandler( new PageBordersHandler );
+ pProperties->resolve( *pHandler );
+
+ // Set the borders to the context and apply them to the styles
+ pHandler->SetBorders( pSectionContext );
+ pSectionContext->SetBorderParams( pHandler->GetDisplayOffset( ) );
+ }
+ }
+ break;
+
+ case NS_ooxml::LN_CT_PPrBase_pStyle:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ m_pImpl->SetCurrentParaStyleId( sStringValue );
+ StyleSheetTablePtr pStyleTable = m_pImpl->GetStyleSheetTable();
+ const ::rtl::OUString sConvertedStyleName = pStyleTable->ConvertStyleName( sStringValue, true );
+ if (m_pImpl->GetTopContext() && m_pImpl->GetTopContextType() != CONTEXT_SECTION)
+ m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, true, uno::makeAny( sConvertedStyleName ));
+ const StyleSheetEntryPtr pEntry = pStyleTable->FindStyleSheetByISTD(sStringValue);
+ //apply numbering to paragraph if it was set at the style
+ OSL_ENSURE( pEntry.get(), "no style sheet found" );
+ const StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<const StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : 0);
+
+ if( pStyleSheetProperties && pStyleSheetProperties->GetListId() >= 0 )
+ rContext->Insert( PROP_NUMBERING_STYLE_NAME, true, uno::makeAny(
+ ListDef::GetStyleName( pStyleSheetProperties->GetListId( ) ) ), false);
+
+ if( pStyleSheetProperties && pStyleSheetProperties->GetListLevel() >= 0 )
+ rContext->Insert( PROP_NUMBERING_LEVEL, true, uno::makeAny(pStyleSheetProperties->GetListLevel()), false);
+ }
+ break;
+ case NS_ooxml::LN_EG_RPrBase_rStyle:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ rtl::OUString sConvertedName( m_pImpl->GetStyleSheetTable()->ConvertStyleName( sStringValue, true ) );
+ // First check if the style exists in the document.
+ StyleSheetEntryPtr pEntry = m_pImpl->GetStyleSheetTable( )->FindStyleSheetByStyleName( sConvertedName );
+ bool bExists = pEntry.get( ) && ( pEntry->nStyleTypeCode == STYLE_TYPE_CHAR );
+
+ // Add the property if the style exists
+ if ( bExists && m_pImpl->GetTopContext() )
+ m_pImpl->GetTopContext()->Insert( PROP_CHAR_STYLE_NAME, true, uno::makeAny( sConvertedName ) );
+ }
+ break;
+ case NS_ooxml::LN_CT_TblPrBase_tblCellMar: //cell margins
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ resolveSprmProps(*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:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_left:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_bottom:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblCellMar_right:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ MeasureHandlerPtr pMeasureHandler( new MeasureHandler );
+ pProperties->resolve(*pMeasureHandler);
+ sal_Int32 nMeasureValue = pMeasureHandler->getMeasureValue();
+ PropertyIds eId = META_PROP_CELL_MAR_TOP;
+ switch(nSprmId)
+ {
+ case NS_ooxml::LN_CT_TblCellMar_top:
+ /* WRITERFILTERSTATUS: */
+ break;
+ case NS_ooxml::LN_CT_TblCellMar_left:
+ /* WRITERFILTERSTATUS: */
+ eId = META_PROP_CELL_MAR_LEFT;
+ break;
+ case NS_ooxml::LN_CT_TblCellMar_bottom:
+ /* WRITERFILTERSTATUS: */
+ eId = META_PROP_CELL_MAR_BOTTOM;
+ break;
+ case NS_ooxml::LN_CT_TblCellMar_right:
+ /* WRITERFILTERSTATUS: */
+ eId = META_PROP_CELL_MAR_RIGHT;
+ break;
+ default:;
+ }
+ rContext->Insert( eId, false, uno::makeAny(nMeasureValue), false);
+ }
+ }
+ break;
+ case NS_sprm::LN_CFNoProof: //0x875 no grammar and spell checking, unsupported
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_ooxml::LN_anchor_anchor: // at_character drawing
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_inline_inline: // as_character drawing
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ GraphicImportType eGraphicType =
+ (NS_ooxml::LN_anchor_anchor ==
+ sal::static_int_cast<Id>(nSprmId)) ?
+ IMPORT_AS_DETECTED_ANCHOR :
+ IMPORT_AS_DETECTED_INLINE;
+ GraphicImportPtr pGraphicImport =
+ m_pImpl->GetGraphicImport(eGraphicType);
+ pProperties->resolve(*pGraphicImport);
+ m_pImpl->ImportGraphic(pProperties, eGraphicType);
+ if( !pGraphicImport->IsGraphic() )
+ {
+ m_pImpl->ResetGraphicImport();
+ // todo: It's a shape, now start shape import
+ }
+ }
+ }
+ break;
+ case NS_ooxml::LN_EG_RPrBase_vertAlign:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ sal_Int16 nEscapement = 0;
+ sal_Int8 nProp = 58;
+ if( sStringValue.equalsAscii( "superscript" ))
+ nEscapement = 101;
+ else if( sStringValue.equalsAscii( "subscript" ))
+ nEscapement = -101;
+ else
+ nProp = 100;
+
+ rContext->Insert(PROP_CHAR_ESCAPEMENT, true, uno::makeAny( nEscapement ) );
+ rContext->Insert(PROP_CHAR_ESCAPEMENT_HEIGHT, true, uno::makeAny( nProp ) );
+ }
+ break;
+// case NS_ooxml::LN_CT_FtnEdn_type
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+// case NS_ooxml::LN_CT_FtnEdn_id
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+// case NS_ooxml::LN_EG_FtnEdnNumProps_numRestart
+ case NS_ooxml::LN_CT_FtnProps_pos:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //footnotes in word can be at page end or beneath text - writer supports only the first
+ //endnotes in word can be at section end or document end - writer supports only the latter
+ // -> so this property can be ignored
+ break;
+ case NS_ooxml::LN_EG_FtnEdnNumProps_numStart:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_FtnProps_numFmt:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_CT_EdnProps_numFmt:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ try
+ {
+ uno::Reference< beans::XPropertySet > xFtnEdnSettings;
+ if( m_pImpl->IsInFootnoteProperties() )
+ {
+ uno::Reference< text::XFootnotesSupplier> xFootnotesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
+ xFtnEdnSettings = xFootnotesSupplier->getFootnoteSettings();
+ }
+ else
+ {
+ uno::Reference< text::XEndnotesSupplier> xEndnotesSupplier( m_pImpl->GetTextDocument(), uno::UNO_QUERY );
+ xFtnEdnSettings = xEndnotesSupplier->getEndnoteSettings();
+ }
+ if( NS_ooxml::LN_EG_FtnEdnNumProps_numStart == nSprmId )
+ {
+ xFtnEdnSettings->setPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_START_AT),
+ uno::makeAny( sal_Int16( nIntValue - 1 )));
+ }
+ else
+ {
+ sal_Int16 nNumType = ConversionHelper::ConvertNumberingType( nIntValue );
+ xFtnEdnSettings->setPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_NUMBERING_TYPE),
+ uno::makeAny( nNumType ));
+ }
+ }
+ catch( const uno::Exception& )
+ {
+ }
+ }
+ break;
+ case NS_ooxml::LN_paratrackchange:
+ m_pImpl->StartParaChange( );
+ case NS_ooxml::LN_trackchange:
+ /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
+ case NS_ooxml::LN_EG_RPrContent_rPrChange:
+ /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
+ {
+ m_pImpl->AddNewRedline( );
+ resolveSprmProps(*this, rSprm );
+ // now the properties author, date and id should be available
+ sal_Int32 nToken = m_pImpl->GetCurrentRedlineToken();
+ switch( nToken & 0xffff )
+ {
+ case ooxml::OOXML_mod :
+ case ooxml::OOXML_ins :
+ case ooxml::OOXML_del : break;
+ default: OSL_ENSURE( false, "redline token other than mod, ins or del" );
+ }
+ m_pImpl->EndParaChange( );
+ }
+ break;
+ case NS_ooxml::LN_CT_RPrChange_rPr:
+ /* WRITERFILTERSTATUS: done: 100, planned: 5, spent: 0 */
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 4, spent: 0 */
+ case NS_ooxml::LN_object:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get( ) )
+ {
+ OLEHandlerPtr pOLEHandler( new OLEHandler );
+ pProperties->resolve(*pOLEHandler);
+ if ( pOLEHandler->isOLEObject( ) )
+ {
+ ::rtl::OUString sStreamName = pOLEHandler->copyOLEOStream( m_pImpl->GetTextDocument() );
+ if( sStreamName.getLength() )
+ {
+ m_pImpl->appendOLE( sStreamName, pOLEHandler );
+ }
+ }
+ }
+ }
+ break;
+// case NS_ooxml::LN_CT_EdnProps_pos
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+// case NS_ooxml::LN_CT_EdnProps_numFmt
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+// case NS_ooxml::LN_CT_FtnDocProps_footnote
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+// case NS_ooxml::LN_CT_EdnDocProps_endnote
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ //break;
+ case NS_ooxml::LN_EG_HdrFtrReferences_headerReference: // header reference - not needed
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ case NS_ooxml::LN_EG_HdrFtrReferences_footerReference: // footer reference - not needed
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ break;
+ case NS_ooxml::LN_EG_RPrBase_snapToGrid: // "Use document grid settings for inter-paragraph spacing"
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_sprm::LN_PContextualSpacing:
+ //TODO: determines whether top/bottom paragraph spacing is added if equal styles are following - unsupported
+ break;
+ case NS_ooxml::LN_EG_SectPrContents_formProt: //section protection, only form editing is enabled - unsupported
+ 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:
+ {
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("unhandled");
+ dmapper_logger->attribute("id", nSprmId);
+ dmapper_logger->endElement("unhandled");
+#endif
+ }
+ }
+}
+/*-- 09.06.2006 09:52:13---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_entry(int /*pos*/,
+ writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ ref->resolve(*this);
+}
+/*-- 09.06.2006 09:52:13---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::data(const sal_uInt8* /*buf*/, size_t /*len*/,
+ writerfilter::Reference<Properties>::Pointer_t /*ref*/)
+{
+}
+/*-- 09.06.2006 09:52:13---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_startSectionGroup()
+{
+ m_pImpl->PushProperties(CONTEXT_SECTION);
+}
+/*-- 09.06.2006 09:52:13---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_endSectionGroup()
+{
+ PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_SECTION);
+ SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
+ OSL_ENSURE(pSectionContext, "SectionContext unavailable!");
+ if(pSectionContext)
+ pSectionContext->CloseSectionGroup( *m_pImpl );
+ m_pImpl->PopProperties(CONTEXT_SECTION);
+}
+/*-- 09.06.2006 09:52:13---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_startParagraphGroup()
+{
+ m_pImpl->getTableManager().startParagraphGroup();
+ m_pImpl->PushProperties(CONTEXT_PARAGRAPH);
+ static ::rtl::OUString sDefault( ::rtl::OUString::createFromAscii("Standard") );
+ if (m_pImpl->GetTopContext())
+ {
+ m_pImpl->GetTopContext()->Insert( PROP_PARA_STYLE_NAME, true, uno::makeAny( sDefault ) );
+ if (m_pImpl->isBreakDeferred(PAGE_BREAK))
+ m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
+ else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
+ m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
+ }
+ m_pImpl->clearDeferredBreaks();
+}
+/*-- 09.06.2006 09:52:14---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_endParagraphGroup()
+{
+ m_pImpl->PopProperties(CONTEXT_PARAGRAPH);
+ m_pImpl->getTableManager().endParagraphGroup();
+ //frame conversion has to be executed after table conversion
+ m_pImpl->ExecuteFrameConversion();
+}
+
+void DomainMapper::markLastParagraphInSection( )
+{
+ m_pImpl->SetIsLastParagraphInSection( true );
+}
+
+void DomainMapper::lcl_startShape( uno::Reference< drawing::XShape > xShape )
+{
+ m_pImpl->PushShapeContext( xShape );
+}
+
+void DomainMapper::lcl_endShape( )
+{
+ m_pImpl->PopShapeContext( );
+}
+
+/*-- 13.06.2007 16:15:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper::PushStyleSheetProperties( PropertyMapPtr pStyleProperties, bool bAffectTableMngr )
+{
+ m_pImpl->PushStyleProperties( pStyleProperties );
+ if ( bAffectTableMngr )
+ m_pImpl->getTableManager( ).SetStyleProperties( pStyleProperties );
+}
+/*-- 13.06.2007 16:15:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper::PopStyleSheetProperties( bool bAffectTableMngr )
+{
+ m_pImpl->PopProperties( CONTEXT_STYLESHEET );
+ if ( bAffectTableMngr )
+ {
+ PropertyMapPtr emptyPtr;
+ m_pImpl->getTableManager( ).SetStyleProperties( emptyPtr );
+ }
+}
+/*-- 28.01.2008 14:52:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper::PushListProperties( ::boost::shared_ptr<PropertyMap> pListProperties )
+{
+ m_pImpl->PushListProperties( pListProperties );
+}
+/*-- 28.01.2008 14:52:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper::PopListProperties()
+{
+ m_pImpl->PopProperties( CONTEXT_LIST );
+}
+/*-- 09.06.2006 09:52:14---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+
+void DomainMapper::lcl_startCharacterGroup()
+{
+ m_pImpl->PushProperties(CONTEXT_CHARACTER);
+ DomainMapperTableManager& rTableManager = m_pImpl->getTableManager();
+ if( rTableManager.getTableStyleName().getLength() )
+ {
+ PropertyMapPtr pTopContext = m_pImpl->GetTopContext();
+ rTableManager.CopyTextProperties(pTopContext, m_pImpl->GetStyleSheetTable());
+ }
+}
+/*-- 09.06.2006 09:52:14---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_endCharacterGroup()
+{
+ m_pImpl->PopProperties(CONTEXT_CHARACTER);
+}
+/*-- 09.06.2006 09:52:14---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len)
+{
+ //TODO: Determine the right text encoding (FIB?)
+ ::rtl::OUString sText( (const sal_Char*) data_, len, RTL_TEXTENCODING_MS_1252 );
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("text");
+ dmapper_logger->chars(sText);
+ dmapper_logger->endElement("text");
+#endif
+
+ try
+ {
+ if(len == 1)
+ {
+ switch(*data_)
+ {
+ case 0x02: return; //footnote character
+ case 0x0c: //page break
+ m_pImpl->deferBreak(PAGE_BREAK);
+ return;
+ case 0x0e: //column break
+ m_pImpl->deferBreak(COLUMN_BREAK);
+ return;
+ case 0x07:
+ m_pImpl->getTableManager().text(data_, len);
+ case 0x0d:
+ m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH));
+ return;
+ case 0x13:
+ m_pImpl->PushFieldContext();
+ return;
+ case 0x14:
+ // delimiter not necessarily available
+ // appears only if field contains further content
+ m_pImpl->CloseFieldCommand();
+ return;
+ case 0x15: /* end of field */
+ m_pImpl->PopFieldContext();
+ return;
+ default:
+ break;
+ }
+ }
+
+ PropertyMapPtr pContext = m_pImpl->GetTopContext();
+ if ( pContext && !pContext->GetFootnote().is() )
+ {
+ if (m_pImpl->isBreakDeferred(PAGE_BREAK))
+ m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
+ else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
+ m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
+ m_pImpl->clearDeferredBreaks();
+ }
+
+ if( pContext->GetFootnote().is() && m_pImpl->IsCustomFtnMark() )
+ {
+ pContext->GetFootnote()->setLabel( sText );
+ m_pImpl->SetCustomFtnMark( false );
+ //otherwise ignore sText
+ }
+ else if( m_pImpl->IsOpenFieldCommand() )
+ m_pImpl->AppendFieldCommand(sText);
+ else if( m_pImpl->IsOpenField() && m_pImpl->IsFieldResultAsString())
+ /*depending on the success of the field insert operation this result will be
+ set at the field or directly inserted into the text*/
+ m_pImpl->SetFieldResult( sText );
+ else
+ {
+ //--> debug
+ //sal_uInt32 nSize = pContext->size();
+ //<--
+
+ if (pContext == NULL)
+ pContext.reset(new PropertyMap());
+
+ m_pImpl->appendTextPortion( sText, pContext );
+ }
+ }
+ catch( const uno::RuntimeException& )
+ {
+ std::clog << __FILE__ << "(l" << __LINE__ << ")" << std::endl;
+ }
+}
+/*-- 09.06.2006 09:52:15---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len)
+{
+ OUString sText;
+ OUStringBuffer aBuffer = OUStringBuffer(len);
+ aBuffer.append( (const sal_Unicode *) data_, len);
+ sText = aBuffer.makeStringAndClear();
+
+ try
+ {
+ m_pImpl->getTableManager().utext(data_, len);
+
+ if(len == 1 && ((*data_) == 0x0d || (*data_) == 0x07))
+ m_pImpl->finishParagraph(m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH));
+ else
+ {
+
+ PropertyMapPtr pContext = m_pImpl->GetTopContext();
+ if ( pContext && !pContext->GetFootnote().is() )
+ {
+ if (m_pImpl->isBreakDeferred(PAGE_BREAK))
+ m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_PAGE_BEFORE) );
+ else if (m_pImpl->isBreakDeferred(COLUMN_BREAK))
+ m_pImpl->GetTopContext()->Insert( PROP_BREAK_TYPE, true, uno::makeAny( com::sun::star::style::BreakType_COLUMN_BEFORE) );
+ m_pImpl->clearDeferredBreaks();
+ }
+
+ /* doesn't seem to be working
+ if( pContext->GetFootnote().is() )
+ {
+ //todo: the check for 0x0a is a hack!
+ if( *data_ != 0x0a && !pContext->GetFootnoteSymbol() )
+ pContext->GetFootnote()->setLabel( sText );
+ //otherwise ignore sText
+ }
+ else */
+ if( pContext && pContext->GetFootnote().is() )
+ {
+ if( !pContext->GetFootnoteSymbol() )
+ pContext->GetFootnote()->setLabel( sText );
+ //otherwise ignore sText
+ }
+ else if( m_pImpl->IsOpenFieldCommand() )
+ m_pImpl->AppendFieldCommand(sText);
+ else if( m_pImpl->IsOpenField() && m_pImpl->IsFieldResultAsString())
+ /*depending on the success of the field insert operation this result will be
+ set at the field or directly inserted into the text*/
+ m_pImpl->SetFieldResult( sText );
+ else
+ {
+ if (pContext == NULL)
+ pContext.reset(new PropertyMap());
+
+ m_pImpl->appendTextPortion( sText, pContext );
+ }
+
+ }
+ }
+ catch( const uno::RuntimeException& )
+ {
+ }
+}
+/*-- 09.06.2006 09:52:15---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_props(writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ string sType = ref->getType();
+ if( sType == "PICF" )
+ {
+ m_pImpl->ImportGraphic(ref, IMPORT_AS_GRAPHIC);
+ }
+ else if( sType == "FSPA" )
+ {
+ m_pImpl->ImportGraphic(ref, IMPORT_AS_SHAPE);
+ }
+ else
+ ref->resolve(*this);
+}
+/*-- 09.06.2006 09:52:15---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
+{
+ // printf ( "DomainMapper::table(0x%.4x)\n", (unsigned int)name);
+ m_pImpl->SetAnyTableImport(true);
+ /* WRITERFILTERSTATUS: table: attributedata */
+ switch(name)
+ {
+ case NS_rtf::LN_FONTTABLE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ // create a font table object that listens to the attributes
+ // each entry call inserts a new font entry
+ ref->resolve( *m_pImpl->GetFontTable() );
+ break;
+ case NS_rtf::LN_STYLESHEET:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ //same as above to import style sheets
+ m_pImpl->SetStyleSheetImport( true );
+ ref->resolve( *m_pImpl->GetStyleSheetTable() );
+ m_pImpl->GetStyleSheetTable()->ApplyStyleSheets(m_pImpl->GetFontTable());
+ m_pImpl->SetStyleSheetImport( false );
+ break;
+ case NS_ooxml::LN_NUMBERING:
+ case NS_rtf::LN_LISTTABLE:
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+
+ //the same for list tables
+ ref->resolve( *m_pImpl->GetListTable() );
+ m_pImpl->GetListTable( )->CreateNumberingRules( );
+ }
+ break;
+ case NS_rtf::LN_LFOTABLE:
+ {
+ m_pImpl->GetListTable( )->SetLFOImport( true );
+ ref->resolve( *m_pImpl->GetListTable() );
+ m_pImpl->GetListTable( )->CreateNumberingRules( );
+ m_pImpl->GetListTable( )->SetLFOImport( false );
+ }
+ break;
+ case NS_ooxml::LN_THEMETABLE:
+ ref->resolve ( *m_pImpl->GetThemeTable() );
+ break;
+ case NS_ooxml::LN_settings_settings:
+ ref->resolve ( *m_pImpl->GetSettingsTable() );
+ m_pImpl->ApplySettingsTable();
+ break;
+ default:
+ OSL_ENSURE( false, "which table is to be filled here?");
+ }
+ m_pImpl->SetAnyTableImport(false);
+}
+/*-- 09.06.2006 09:52:16---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_substream(Id rName, ::writerfilter::Reference<Stream>::Pointer_t ref)
+{
+ m_pImpl->appendTableManager( );
+ m_pImpl->getTableManager().startLevel();
+
+ //->debug
+ //string sName = (*QNameToString::Instance())(rName);
+ //--<debug
+ //import of page header/footer
+
+ /* WRITERFILTERSTATUS: table: attributedata */
+ switch( rName )
+ {
+ case NS_rtf::LN_headerl:
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+
+ m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_LEFT);
+ break;
+ case NS_rtf::LN_headerr:
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+
+ m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_RIGHT);
+ break;
+ case NS_rtf::LN_headerf:
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+
+ m_pImpl->PushPageHeader(SectionPropertyMap::PAGE_FIRST);
+ break;
+ case NS_rtf::LN_footerl:
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+
+ m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_LEFT);
+ break;
+ case NS_rtf::LN_footerr:
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+
+ m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_RIGHT);
+ break;
+ case NS_rtf::LN_footerf:
+ /* WRITERFILTERSTATUS: done: 50, planned: 2, spent: 0 */
+
+ m_pImpl->PushPageFooter(SectionPropertyMap::PAGE_FIRST);
+ break;
+ case NS_rtf::LN_footnote:
+ case NS_rtf::LN_endnote:
+ m_pImpl->PushFootOrEndnote( NS_rtf::LN_footnote == rName );
+ break;
+ case NS_rtf::LN_annotation :
+ m_pImpl->PushAnnotation();
+ break;
+ }
+ ref->resolve(*this);
+ switch( rName )
+ {
+ case NS_rtf::LN_headerl:
+ case NS_rtf::LN_headerr:
+ case NS_rtf::LN_headerf:
+ case NS_rtf::LN_footerl:
+ case NS_rtf::LN_footerr:
+ case NS_rtf::LN_footerf:
+ m_pImpl->PopPageHeaderFooter();
+ break;
+ case NS_rtf::LN_footnote:
+ case NS_rtf::LN_endnote:
+ m_pImpl->PopFootOrEndnote();
+ break;
+ case NS_rtf::LN_annotation :
+ m_pImpl->PopAnnotation();
+ break;
+ }
+
+ m_pImpl->getTableManager().endLevel();
+ m_pImpl->popTableManager( );
+}
+/*-- 09.06.2006 09:52:16---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper::lcl_info(const string & /*info_*/)
+{
+}
+
+void DomainMapper::handleUnderlineType(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext)
+{
+ sal_Int16 eUnderline = awt::FontUnderline::NONE;
+
+ switch(nIntValue)
+ {
+ case 0: eUnderline = awt::FontUnderline::NONE; break;
+ case 2: pContext->Insert(PROP_CHAR_WORD_MODE, true, uno::makeAny( true ) ); // TODO: how to get rid of it?
+ case 1: eUnderline = awt::FontUnderline::SINGLE; break;
+ case 3: eUnderline = awt::FontUnderline::DOUBLE; break;
+ case 4: eUnderline = awt::FontUnderline::DOTTED; break;
+ case 7: eUnderline = awt::FontUnderline::DASH; break;
+ case 9: eUnderline = awt::FontUnderline::DASHDOT; break;
+ case 10:eUnderline = awt::FontUnderline::DASHDOTDOT; break;
+ case 6: eUnderline = awt::FontUnderline::BOLD; break;
+ case 11:eUnderline = awt::FontUnderline::WAVE; break;
+ case 20:eUnderline = awt::FontUnderline::BOLDDOTTED; break;
+ case 23:eUnderline = awt::FontUnderline::BOLDDASH; break;
+ case 39:eUnderline = awt::FontUnderline::LONGDASH; break;
+ case 55:eUnderline = awt::FontUnderline::BOLDLONGDASH; break;
+ case 25:eUnderline = awt::FontUnderline::BOLDDASHDOT; break;
+ case 26:eUnderline = awt::FontUnderline::BOLDDASHDOTDOT;break;
+ case 27:eUnderline = awt::FontUnderline::BOLDWAVE; break;
+ case 43:eUnderline = awt::FontUnderline::DOUBLEWAVE; break;
+ default: ;
+ }
+ pContext->Insert(PROP_CHAR_UNDERLINE, true, uno::makeAny( eUnderline ) );
+}
+
+void DomainMapper::handleParaJustification(const sal_Int32 nIntValue, const ::boost::shared_ptr<PropertyMap> pContext, const bool bExchangeLeftRight)
+{
+ sal_Int16 nAdjust = 0;
+ sal_Int16 nLastLineAdjust = 0;
+ switch(nIntValue)
+ {
+ case 1:
+ nAdjust = style::ParagraphAdjust_CENTER;
+ break;
+ case 2:
+ nAdjust = static_cast< sal_Int16 > (bExchangeLeftRight ? style::ParagraphAdjust_LEFT : style::ParagraphAdjust_RIGHT);
+ break;
+ case 4:
+ nLastLineAdjust = style::ParagraphAdjust_BLOCK;
+ //no break;
+ case 3:
+ nAdjust = style::ParagraphAdjust_BLOCK;
+ break;
+ case 0:
+ default:
+ nAdjust = static_cast< sal_Int16 > (bExchangeLeftRight ? style::ParagraphAdjust_RIGHT : style::ParagraphAdjust_LEFT);
+ break;
+ }
+ pContext->Insert( PROP_PARA_ADJUST, true, uno::makeAny( nAdjust ) );
+ pContext->Insert( PROP_PARA_LAST_LINE_ADJUST, true, uno::makeAny( nLastLineAdjust ) );
+}
+
+bool DomainMapper::getColorFromIndex(const sal_Int32 nIndex, sal_Int32 &nColor)
+{
+ nColor = 0;
+ if ((nIndex < 1) || (nIndex > 16))
+ return false;
+
+ switch (nIndex)
+ {
+ case 1: nColor=0x000000; break; //black
+ case 2: nColor=0x0000ff; break; //blue
+ case 3: nColor=0x00ffff; break; //cyan
+ case 4: nColor=0x00ff00; break; //green
+ case 5: nColor=0xff00ff; break; //magenta
+ case 6: nColor=0xff0000; break; //red
+ case 7: nColor=0xffff00; break; //yellow
+ case 8: nColor=0xffffff; break; //white
+ case 9: nColor=0x000080; break;//dark blue
+ case 10: nColor=0x008080; break; //dark cyan
+ case 11: nColor=0x008000; break; //dark green
+ case 12: nColor=0x800080; break; //dark magenta
+ case 13: nColor=0x800000; break; //dark red
+ case 14: nColor=0x808000; break; //dark yellow
+ case 15: nColor=0x808080; break; //dark gray
+ case 16: nColor=0xC0C0C0; break; //light gray
+ default:
+ return false;
+ }
+ return true;
+}
+
+sal_Int16 DomainMapper::getEmphasisValue(const sal_Int32 nIntValue)
+{
+ switch (nIntValue)
+ {
+ case 1:
+ return com::sun::star::text::FontEmphasis::DOT_ABOVE;
+ case 2:
+ return com::sun::star::text::FontEmphasis::ACCENT_ABOVE;
+ case 3:
+ return com::sun::star::text::FontEmphasis::CIRCLE_ABOVE;
+ case 4:
+ return com::sun::star::text::FontEmphasis::DOT_BELOW;
+ default:
+ return com::sun::star::text::FontEmphasis::NONE;
+ }
+}
+
+rtl::OUString DomainMapper::getBracketStringFromEnum(const sal_Int32 nIntValue, const bool bIsPrefix)
+{
+ switch(nIntValue)
+ {
+ case 1:
+ if (bIsPrefix)
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "(" ));
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( ")" ));
+
+ case 2:
+ if (bIsPrefix)
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "[" ));
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "]" ));
+
+ case 3:
+ if (bIsPrefix)
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "<" ));
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( ">" ));
+
+ case 4:
+ if (bIsPrefix)
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "{" ));
+ return rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "}" ));
+
+ case 0:
+ default:
+ return rtl::OUString();
+ }
+}
+
+com::sun::star::style::TabAlign DomainMapper::getTabAlignFromValue(const sal_Int32 nIntValue)
+{
+ switch (nIntValue)
+ {
+ case 0:
+ case 4: // bar not supported
+ case 5: // num not supported
+ return com::sun::star::style::TabAlign_LEFT;
+ case 1:
+ return com::sun::star::style::TabAlign_CENTER;
+ case 2:
+ return com::sun::star::style::TabAlign_RIGHT;
+ case 3:
+ return com::sun::star::style::TabAlign_DECIMAL;
+ }
+ return com::sun::star::style::TabAlign_LEFT;
+}
+
+sal_Unicode DomainMapper::getFillCharFromValue(const sal_Int32 nIntValue)
+{
+ switch (nIntValue)
+ {
+ case 1: // dot
+ return sal_Unicode(0x002e);
+ case 2: // hyphen
+ return sal_Unicode(0x002d);
+ case 3: // underscore
+ case 4: // heavy FIXME ???
+ return sal_Unicode(0x005f);
+ case NS_ooxml::LN_Value_ST_TabTlc_middleDot: // middleDot
+ return sal_Unicode(0x00b7);
+ case 0: // none
+ default:
+ return sal_Unicode(0x0020); // blank space
+ }
+}
+/*-- 18.07.2007 14:59:00---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool DomainMapper::IsOOXMLImport() const
+{
+ return m_pImpl->IsOOXMLImport();
+}
+/*-- 18.07.2007 16:03:14---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference < lang::XMultiServiceFactory > DomainMapper::GetTextFactory() const
+{
+ return m_pImpl->GetTextFactory();
+}
+/*-- 12.11.2007 10:41:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+/*-- 31.01.2008 18:19:44---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< text::XTextRange > DomainMapper::GetCurrentTextRange()
+{
+ return m_pImpl->GetTopTextAppend()->getEnd();
+}
+
+/*-- 05.02.2008 10:26:26---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString DomainMapper::getOrCreateCharStyle( PropertyValueVector_t& rCharProperties )
+{
+ StyleSheetTablePtr pStyleSheets = m_pImpl->GetStyleSheetTable();
+ return pStyleSheets->getOrCreateCharStyle( rCharProperties );
+}
+
+ListsManager::Pointer DomainMapper::GetListTable( )
+{
+ return m_pImpl->GetListTable( );
+}
+
+StyleSheetTablePtr DomainMapper::GetStyleSheetTable( )
+{
+ return m_pImpl->GetStyleSheetTable( );
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
new file mode 100644
index 000000000000..c6869aca5f2b
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -0,0 +1,833 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <DomainMapperTableHandler.hxx>
+#include <DomainMapper_Impl.hxx>
+#include <StyleSheetTable.hxx>
+#include <com/sun/star/table/TableBorderDistances.hpp>
+#include <com/sun/star/table/TableBorder.hpp>
+#include <com/sun/star/text/HoriOrientation.hpp>
+#include <dmapperLoggers.hxx>
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+#include <PropertyMapHelper.hxx>
+#endif
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+using namespace ::std;
+
+#define DEF_BORDER_DIST 190 //0,19cm
+#define DEFAULT_CELL_MARGIN 108 //default cell margin, not documented
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+static void lcl_printProperties( PropertyMapPtr pProps )
+{
+ if( pProps.get() )
+ {
+ dmapper_logger->startElement("properties");
+
+ PropertyMap::const_iterator aMapIter = pProps->begin();
+ PropertyMap::const_iterator aEndIter = pProps->end();
+ PropertyNameSupplier& rPropSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ for( ; aMapIter != aEndIter; ++aMapIter )
+ {
+ rtl::OUString aOUStr = rPropSupplier.GetName( aMapIter->first.eId );
+ rtl::OString aOStr(aOUStr.getStr(), aOUStr.getLength(), RTL_TEXTENCODING_ASCII_US );
+ clog << aOStr.getStr();
+
+ table::BorderLine aLine;
+ sal_Int32 nColor;
+ if ( aMapIter->second >>= aLine )
+ {
+ dmapper_logger->startElement("borderline");
+ dmapper_logger->attribute("color", aLine.Color);
+ dmapper_logger->attribute("inner", aLine.InnerLineWidth);
+ dmapper_logger->attribute("outer", aLine.OuterLineWidth);
+ dmapper_logger->endElement("borderline");
+ }
+ else if ( aMapIter->second >>= nColor )
+ {
+ dmapper_logger->startElement("color");
+ dmapper_logger->attribute("number", nColor);
+ dmapper_logger->endElement("color");
+ }
+ }
+
+ dmapper_logger->endElement("properties");
+ }
+}
+#endif
+
+DomainMapperTableHandler::DomainMapperTableHandler(TextReference_t xText, DomainMapper_Impl& rDMapper_Impl)
+ : m_xText(xText),
+ m_rDMapper_Impl( rDMapper_Impl ),
+ m_nCellIndex(0),
+ m_nRowIndex(0)
+{
+}
+
+DomainMapperTableHandler::~DomainMapperTableHandler()
+{
+}
+
+void DomainMapperTableHandler::startTable(unsigned int nRows,
+ unsigned int /*nDepth*/,
+ TablePropertyMapPtr pProps)
+{
+ m_aTableProperties = pProps;
+ m_pTableSeq = TableSequencePointer_t(new TableSequence_t(nRows));
+ m_nRowIndex = 0;
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("tablehandler.table");
+ dmapper_logger->attribute("rows", nRows);
+
+ if (pProps.get() != NULL)
+ dmapper_logger->addTag(pProps->toTag());
+#endif
+}
+
+/*-- 22.02.2008 10:18:37---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyMapPtr lcl_SearchParentStyleSheetAndMergeProperties(const StyleSheetEntryPtr pStyleSheet, StyleSheetTablePtr pStyleSheetTable)
+{
+ PropertyMapPtr pRet;
+ if( pStyleSheet->sBaseStyleIdentifier.getLength())
+ {
+ const StyleSheetEntryPtr pParentStyleSheet = pStyleSheetTable->FindStyleSheetByISTD( pStyleSheet->sBaseStyleIdentifier );
+ pRet = lcl_SearchParentStyleSheetAndMergeProperties( pParentStyleSheet, pStyleSheetTable );
+ }
+ else
+ {
+ pRet.reset( new PropertyMap );
+ }
+
+ pRet->insert( pStyleSheet->pProperties, true );
+
+ return pRet;
+}
+
+void lcl_mergeBorder( PropertyIds nId, PropertyMapPtr pOrig, PropertyMapPtr pDest )
+{
+ PropertyDefinition aDef( nId, false );
+ PropertyMap::iterator pOrigIt = pOrig->find( aDef );
+
+ if ( pOrigIt != pOrig->end( ) )
+ {
+ pDest->Insert( nId, false, pOrigIt->second, false );
+ }
+}
+
+void lcl_computeCellBorders( PropertyMapPtr pTableBorders, PropertyMapPtr pCellProps,
+ sal_Int32 nCell, sal_Int32 nRow, bool bIsEndCol, bool bIsEndRow )
+{
+ PropertyDefinition aVertPDef( META_PROP_VERTICAL_BORDER, false );
+ PropertyDefinition aHorizPDef( META_PROP_HORIZONTAL_BORDER, false );
+
+ PropertyMap::iterator aVerticalIter = pCellProps->find( aVertPDef );
+ PropertyMap::iterator aHorizontalIter = pCellProps->find( aHorizPDef );
+
+ // Handle the vertical and horizontal borders
+ bool bHasVert = ( aVerticalIter != pCellProps->end( ) );
+ uno::Any aVertProp;
+ if ( !bHasVert )
+ {
+ aVerticalIter = pTableBorders->find( aVertPDef );
+ bHasVert = ( aVerticalIter != pTableBorders->end( ) );
+ if ( bHasVert )
+ aVertProp = aVerticalIter->second;
+ }
+ else
+ {
+ aVertProp = aVerticalIter->second;
+ pCellProps->erase( aVerticalIter );
+ }
+
+ bool bHasHoriz = ( aHorizontalIter != pCellProps->end( ) );
+ uno::Any aHorizProp;
+ if ( !bHasHoriz )
+ {
+ aHorizontalIter = pTableBorders->find( aHorizPDef );
+ bHasHoriz = ( aHorizontalIter != pTableBorders->end( ) );
+ if ( bHasHoriz )
+ aHorizProp = aHorizontalIter->second;
+ }
+ else
+ {
+ aHorizProp = aHorizontalIter->second;
+ pCellProps->erase( aHorizontalIter );
+ }
+
+ if ( nCell == 0 )
+ {
+ lcl_mergeBorder( PROP_LEFT_BORDER, pTableBorders, pCellProps );
+ if ( bHasVert )
+ pCellProps->Insert( PROP_RIGHT_BORDER, false, aVertProp, false );
+ }
+
+ if ( bIsEndCol )
+ {
+ lcl_mergeBorder( PROP_RIGHT_BORDER, pTableBorders, pCellProps );
+ if ( bHasVert )
+ pCellProps->Insert( PROP_LEFT_BORDER, false, aVertProp, false );
+ }
+
+ if ( nCell > 0 && !bIsEndCol )
+ {
+ if ( bHasVert )
+ {
+ pCellProps->Insert( PROP_RIGHT_BORDER, false, aVertProp, false );
+ pCellProps->Insert( PROP_LEFT_BORDER, false, aVertProp, false );
+ }
+ }
+
+ if ( nRow == 0 )
+ {
+ lcl_mergeBorder( PROP_TOP_BORDER, pTableBorders, pCellProps );
+ if ( bHasHoriz )
+ pCellProps->Insert( PROP_BOTTOM_BORDER, false, aHorizProp, false );
+ }
+
+ if ( bIsEndRow )
+ {
+ lcl_mergeBorder( PROP_BOTTOM_BORDER, pTableBorders, pCellProps );
+ if ( bHasHoriz )
+ pCellProps->Insert( PROP_TOP_BORDER, false, aHorizProp, false );
+ }
+
+ if ( nRow > 0 && !bIsEndRow )
+ {
+ if ( bHasHoriz )
+ {
+ pCellProps->Insert( PROP_TOP_BORDER, false, aHorizProp, false );
+ pCellProps->Insert( PROP_BOTTOM_BORDER, false, aHorizProp, false );
+ }
+ }
+}
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+
+void lcl_debug_BorderLine(table::BorderLine & rLine)
+{
+ dmapper_logger->startElement("BorderLine");
+ dmapper_logger->attribute("Color", rLine.Color);
+ dmapper_logger->attribute("InnerLineWidth", rLine.InnerLineWidth);
+ dmapper_logger->attribute("OuterLineWidth", rLine.OuterLineWidth);
+ dmapper_logger->attribute("LineDistance", rLine.LineDistance);
+ dmapper_logger->endElement("BorderLine");
+}
+
+void lcl_debug_TableBorder(table::TableBorder & rBorder)
+{
+ dmapper_logger->startElement("TableBorder");
+ lcl_debug_BorderLine(rBorder.TopLine);
+ dmapper_logger->attribute("IsTopLineValid", rBorder.IsTopLineValid);
+ lcl_debug_BorderLine(rBorder.BottomLine);
+ dmapper_logger->attribute("IsBottomLineValid", rBorder.IsBottomLineValid);
+ lcl_debug_BorderLine(rBorder.LeftLine);
+ dmapper_logger->attribute("IsLeftLineValid", rBorder.IsLeftLineValid);
+ lcl_debug_BorderLine(rBorder.RightLine);
+ dmapper_logger->attribute("IsRightLineValid", rBorder.IsRightLineValid);
+ lcl_debug_BorderLine(rBorder.VerticalLine);
+ dmapper_logger->attribute("IsVerticalLineValid", rBorder.IsVerticalLineValid);
+ lcl_debug_BorderLine(rBorder.HorizontalLine);
+ dmapper_logger->attribute("IsHorizontalLineValid", rBorder.IsHorizontalLineValid);
+ dmapper_logger->attribute("Distance", rBorder.Distance);
+ dmapper_logger->attribute("IsDistanceValid", rBorder.IsDistanceValid);
+ dmapper_logger->endElement("TableBorder");
+}
+#endif
+
+struct WRITERFILTER_DLLPRIVATE TableInfo
+{
+ sal_Int32 nLeftBorderDistance;
+ sal_Int32 nRightBorderDistance;
+ sal_Int32 nTopBorderDistance;
+ sal_Int32 nBottomBorderDistance;
+ PropertyMapPtr pTableDefaults;
+ PropertyMapPtr pTableBorders;
+ TableStyleSheetEntry* pTableStyle;
+ TablePropertyValues_t aTableProperties;
+
+ TableInfo()
+ : nLeftBorderDistance(DEF_BORDER_DIST)
+ , nRightBorderDistance(DEF_BORDER_DIST)
+ , nTopBorderDistance(0)
+ , nBottomBorderDistance(0)
+ , pTableDefaults(new PropertyMap)
+ , pTableBorders(new PropertyMap)
+ , pTableStyle(NULL)
+ {
+ }
+
+};
+
+TableStyleSheetEntry * DomainMapperTableHandler::endTableGetTableStyle(TableInfo & rInfo)
+{
+ // will receive the table style if any
+ TableStyleSheetEntry* pTableStyle = NULL;
+
+ if( m_aTableProperties.get() )
+ {
+ //create properties from the table attributes
+ //...pPropMap->Insert( PROP_LEFT_MARGIN, false, uno::makeAny( m_nLeftMargin - m_nGapHalf ));
+ //pPropMap->Insert( PROP_HORI_ORIENT, false, uno::makeAny( text::HoriOrientation::RIGHT ));
+ sal_Int32 nGapHalf = 0;
+ sal_Int32 nLeftMargin = 0;
+ sal_Int32 nTableWidth = 0;
+
+ PropertyMap::iterator aTableStyleIter =
+ m_aTableProperties->find( PropertyDefinition( META_PROP_TABLE_STYLE_NAME, false ) );
+ if(aTableStyleIter != m_aTableProperties->end())
+ {
+ // Apply table style properties recursively
+ ::rtl::OUString sTableStyleName;
+ aTableStyleIter->second >>= sTableStyleName;
+ StyleSheetTablePtr pStyleSheetTable = m_rDMapper_Impl.GetStyleSheetTable();
+ const StyleSheetEntryPtr pStyleSheet = pStyleSheetTable->FindStyleSheetByISTD( sTableStyleName );
+ pTableStyle = dynamic_cast<TableStyleSheetEntry*>( pStyleSheet.get( ) );
+ m_aTableProperties->erase( aTableStyleIter );
+
+ if( pStyleSheet )
+ {
+ // First get the style properties, then the table ones
+ PropertyMapPtr pTableProps( m_aTableProperties );
+ TablePropertyMapPtr pEmptyProps( new TablePropertyMap );
+
+ m_aTableProperties = pEmptyProps;
+
+ PropertyMapPtr pMergedProperties = lcl_SearchParentStyleSheetAndMergeProperties(pStyleSheet, pStyleSheetTable);
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("mergedProps");
+ dmapper_logger->addTag(pMergedProperties->toTag());
+ dmapper_logger->endElement("mergedProps");
+#endif
+
+ m_aTableProperties->insert( pMergedProperties );
+ m_aTableProperties->insert( pTableProps );
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("TableProperties");
+ dmapper_logger->addTag(m_aTableProperties->toTag());
+ dmapper_logger->endElement("TableProperties");
+#endif
+ }
+ }
+
+ // Set the table default attributes for the cells
+ rInfo.pTableDefaults->insert( m_aTableProperties );
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("TableDefaults");
+ dmapper_logger->addTag(rInfo.pTableDefaults->toTag());
+ dmapper_logger->endElement("TableDefaults");
+#endif
+
+ m_aTableProperties->getValue( TablePropertyMap::GAP_HALF, nGapHalf );
+ m_aTableProperties->getValue( TablePropertyMap::LEFT_MARGIN, nLeftMargin );
+
+ m_aTableProperties->getValue( TablePropertyMap::CELL_MAR_LEFT,
+ rInfo.nLeftBorderDistance );
+ m_aTableProperties->getValue( TablePropertyMap::CELL_MAR_RIGHT,
+ rInfo.nRightBorderDistance );
+ m_aTableProperties->getValue( TablePropertyMap::CELL_MAR_TOP,
+ rInfo.nTopBorderDistance );
+ m_aTableProperties->getValue( TablePropertyMap::CELL_MAR_BOTTOM,
+ rInfo.nBottomBorderDistance );
+
+ table::TableBorderDistances aDistances;
+ aDistances.IsTopDistanceValid =
+ aDistances.IsBottomDistanceValid =
+ aDistances.IsLeftDistanceValid =
+ aDistances.IsRightDistanceValid = sal_True;
+ aDistances.TopDistance = static_cast<sal_Int16>( rInfo.nTopBorderDistance );
+ aDistances.BottomDistance = static_cast<sal_Int16>( rInfo.nBottomBorderDistance );
+ aDistances.LeftDistance = static_cast<sal_Int16>( rInfo.nLeftBorderDistance );
+ aDistances.RightDistance = static_cast<sal_Int16>( rInfo.nRightBorderDistance );
+
+ m_aTableProperties->Insert( PROP_TABLE_BORDER_DISTANCES, false, uno::makeAny( aDistances ) );
+
+ //table border settings
+ table::TableBorder aTableBorder;
+
+ PropertyMap::iterator aTblBorderIter = m_aTableProperties->find( PropertyDefinition(PROP_TOP_BORDER, false) );
+ if( aTblBorderIter != m_aTableProperties->end() )
+ {
+ aTblBorderIter->second >>= aTableBorder.TopLine;
+ aTableBorder.IsTopLineValid = true;
+ m_aTableProperties->erase( aTblBorderIter );
+
+ rInfo.pTableBorders->Insert( PROP_TOP_BORDER, false,
+ uno::makeAny( aTableBorder.TopLine ) );
+ PropertyMap::iterator pIt = rInfo.pTableDefaults->find( PropertyDefinition( PROP_TOP_BORDER, false ) );
+ if ( pIt != rInfo.pTableDefaults->end( ) )
+ rInfo.pTableDefaults->erase( pIt );
+ }
+ aTblBorderIter = m_aTableProperties->find( PropertyDefinition(PROP_BOTTOM_BORDER, false) );
+ if( aTblBorderIter != m_aTableProperties->end() )
+ {
+ aTblBorderIter->second >>= aTableBorder.BottomLine;
+ aTableBorder.IsBottomLineValid = true;
+ m_aTableProperties->erase( aTblBorderIter );
+
+ rInfo.pTableBorders->Insert( PROP_BOTTOM_BORDER, false,
+ uno::makeAny( aTableBorder.BottomLine));
+ PropertyMap::iterator pIt = rInfo.pTableDefaults->find( PropertyDefinition( PROP_BOTTOM_BORDER, false ) );
+ if ( pIt != rInfo.pTableDefaults->end( ) )
+ rInfo.pTableDefaults->erase( pIt );
+ }
+ aTblBorderIter = m_aTableProperties->find( PropertyDefinition(PROP_LEFT_BORDER, false) );
+ if( aTblBorderIter != m_aTableProperties->end() )
+ {
+ aTblBorderIter->second >>= aTableBorder.LeftLine;
+ aTableBorder.IsLeftLineValid = true;
+ m_aTableProperties->erase( aTblBorderIter );
+
+ rInfo.pTableBorders->Insert( PROP_LEFT_BORDER, false,
+ uno::makeAny( aTableBorder.LeftLine ) );
+ PropertyMap::iterator pIt = rInfo.pTableDefaults->find( PropertyDefinition( PROP_LEFT_BORDER, false ) );
+ if ( pIt != rInfo.pTableDefaults->end( ) )
+ rInfo.pTableDefaults->erase( pIt );
+ }
+ aTblBorderIter = m_aTableProperties->find( PropertyDefinition(PROP_RIGHT_BORDER, false) );
+ if( aTblBorderIter != m_aTableProperties->end() )
+ {
+ aTblBorderIter->second >>= aTableBorder.RightLine;
+ aTableBorder.IsRightLineValid = true;
+ m_aTableProperties->erase( aTblBorderIter );
+
+ rInfo.pTableBorders->Insert( PROP_RIGHT_BORDER, false,
+ uno::makeAny( aTableBorder.RightLine ) );
+ PropertyMap::iterator pIt = rInfo.pTableDefaults->find( PropertyDefinition( PROP_RIGHT_BORDER, false ) );
+ if ( pIt != rInfo.pTableDefaults->end( ) )
+ rInfo.pTableDefaults->erase( pIt );
+ }
+ aTblBorderIter = m_aTableProperties->find( PropertyDefinition(META_PROP_HORIZONTAL_BORDER, false) );
+ if( aTblBorderIter != m_aTableProperties->end() )
+ {
+ aTblBorderIter->second >>= aTableBorder.HorizontalLine;
+ aTableBorder.IsHorizontalLineValid = true;
+ m_aTableProperties->erase( aTblBorderIter );
+
+ rInfo.pTableBorders->Insert
+ (META_PROP_HORIZONTAL_BORDER, false,
+ uno::makeAny( aTableBorder.HorizontalLine ) );
+ PropertyMap::iterator pIt = rInfo.pTableDefaults->find( PropertyDefinition( META_PROP_HORIZONTAL_BORDER, false ) );
+ if ( pIt != rInfo.pTableDefaults->end( ) )
+ rInfo.pTableDefaults->erase( pIt );
+ }
+ aTblBorderIter = m_aTableProperties->find( PropertyDefinition(META_PROP_VERTICAL_BORDER, false) );
+ if( aTblBorderIter != m_aTableProperties->end() )
+ {
+ aTblBorderIter->second >>= aTableBorder.VerticalLine;
+ aTableBorder.IsVerticalLineValid = true;
+ m_aTableProperties->erase( aTblBorderIter );
+
+ rInfo.pTableBorders->Insert
+ (META_PROP_VERTICAL_BORDER, false,
+ uno::makeAny( aTableBorder.VerticalLine ) );
+ PropertyMap::iterator pIt = rInfo.pTableDefaults->find( PropertyDefinition( META_PROP_VERTICAL_BORDER, false ) );
+ if ( pIt != rInfo.pTableDefaults->end( ) )
+ rInfo.pTableDefaults->erase( pIt );
+ }
+ aTableBorder.Distance = 0;
+ aTableBorder.IsDistanceValid = false;
+
+ m_aTableProperties->Insert( PROP_TABLE_BORDER, false, uno::makeAny( aTableBorder ) );
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ lcl_debug_TableBorder(aTableBorder);
+#endif
+
+ m_aTableProperties->Insert( PROP_LEFT_MARGIN, false, uno::makeAny( nLeftMargin - nGapHalf - rInfo.nLeftBorderDistance));
+
+ m_aTableProperties->getValue( TablePropertyMap::TABLE_WIDTH, nTableWidth );
+ if( nTableWidth > 0 )
+ m_aTableProperties->Insert( PROP_WIDTH, false, uno::makeAny( nTableWidth ));
+
+ sal_Int32 nHoriOrient = text::HoriOrientation::LEFT_AND_WIDTH;
+ m_aTableProperties->getValue( TablePropertyMap::HORI_ORIENT, nHoriOrient ) ;
+ m_aTableProperties->Insert( PROP_HORI_ORIENT, false, uno::makeAny( sal_Int16(nHoriOrient) ) );
+
+ //fill default value - if not available
+ const PropertyMap::const_iterator aRepeatIter =
+ m_aTableProperties->find( PropertyDefinition( PROP_HEADER_ROW_COUNT, false ) );
+ if( aRepeatIter == m_aTableProperties->end() )
+ m_aTableProperties->Insert( PROP_HEADER_ROW_COUNT, false, uno::makeAny( (sal_Int32)0 ));
+
+ // Remove the PROP_HEADER_ROW_COUNT from the table default to avoid
+ // propagating it to the cells
+ PropertyMap::iterator aDefaultRepeatIt =
+ rInfo.pTableDefaults->find( PropertyDefinition( PROP_HEADER_ROW_COUNT, false ) );
+ if ( aDefaultRepeatIt != rInfo.pTableDefaults->end( ) )
+ rInfo.pTableDefaults->erase( aDefaultRepeatIt );
+
+ rInfo.aTableProperties = m_aTableProperties->GetPropertyValues();
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("debug.tableprops");
+ dmapper_logger->addTag(m_aTableProperties->toTag());
+ dmapper_logger->endElement("debug.tableprops");
+#endif
+
+ }
+
+ return pTableStyle;
+}
+
+CellPropertyValuesSeq_t DomainMapperTableHandler::endTableGetCellProperties(TableInfo & rInfo)
+{
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("getCellProperties");
+#endif
+
+ CellPropertyValuesSeq_t aCellProperties( m_aCellProperties.size() );
+
+ // std::vector< std::vector<PropertyMapPtr> > m_aCellProperties
+ PropertyMapVector2::const_iterator aRowOfCellsIterator = m_aCellProperties.begin();
+ PropertyMapVector2::const_iterator aRowOfCellsIteratorEnd = m_aCellProperties.end();
+ PropertyMapVector2::const_iterator aLastRowIterator = m_aCellProperties.end() - 1;
+ sal_Int32 nRow = 0;
+
+ //it's a uno::Sequence< beans::PropertyValues >*
+ RowPropertyValuesSeq_t* pCellProperties = aCellProperties.getArray();
+ while( aRowOfCellsIterator != aRowOfCellsIteratorEnd )
+ {
+ //aRowOfCellsIterator points to a vector of PropertyMapPtr
+ PropertyMapVector1::const_iterator aCellIterator = aRowOfCellsIterator->begin();
+ PropertyMapVector1::const_iterator aCellIteratorEnd = aRowOfCellsIterator->end();
+ PropertyMapVector1::const_iterator aLastCellIterator = aRowOfCellsIterator->end() - 1;
+
+ // Get the row style properties
+ sal_Int32 nRowStyleMask = sal_Int32( 0 );
+ PropertyMapPtr pRowProps = m_aRowProperties[nRow];
+ if ( pRowProps.get( ) )
+ {
+ PropertyMap::iterator pTcCnfStyleIt = pRowProps->find( PropertyDefinition( PROP_CNF_STYLE, true ) );
+ if ( pTcCnfStyleIt != pRowProps->end( ) )
+ {
+ if ( rInfo.pTableStyle )
+ {
+ rtl::OUString sMask;
+ pTcCnfStyleIt->second >>= sMask;
+ nRowStyleMask = sMask.toInt32( 2 );
+ }
+ pRowProps->erase( pTcCnfStyleIt );
+ }
+ }
+
+ sal_Int32 nCell = 0;
+ pCellProperties[nRow].realloc( aRowOfCellsIterator->size() );
+ beans::PropertyValues* pSingleCellProperties = pCellProperties[nRow].getArray();
+ while( aCellIterator != aCellIteratorEnd )
+ {
+ PropertyMapPtr pAllCellProps( new PropertyMap );
+
+ bool bIsEndCol = aCellIterator == aLastCellIterator;
+ bool bIsEndRow = aRowOfCellsIterator == aLastRowIterator;
+
+ //aCellIterator points to a PropertyMapPtr;
+ if( aCellIterator->get() )
+ {
+ if ( rInfo.pTableDefaults->size( ) )
+ pAllCellProps->insert( rInfo.pTableDefaults );
+
+ // Fill the cell properties with the ones of the style
+ sal_Int32 nCellStyleMask = 0;
+ const PropertyMap::iterator aCnfStyleIter =
+ aCellIterator->get()->find( PropertyDefinition( PROP_CNF_STYLE, false ) );
+ if ( aCnfStyleIter != aCellIterator->get( )->end( ) )
+ {
+ if ( rInfo.pTableStyle ) {
+ rtl::OUString sMask;
+ aCnfStyleIter->second >>= sMask;
+ nCellStyleMask = sMask.toInt32( 2 );
+ }
+ aCellIterator->get( )->erase( aCnfStyleIter );
+ }
+
+ if ( rInfo.pTableStyle )
+ {
+ PropertyMapPtr pStyleProps = rInfo.pTableStyle->GetProperties( nCellStyleMask + nRowStyleMask );
+ pAllCellProps->insert( pStyleProps );
+ }
+
+ // Then add the cell properties
+ pAllCellProps->insert( *aCellIterator );
+ aCellIterator->get( )->swap( *pAllCellProps.get( ) );
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("cell");
+ dmapper_logger->attribute("cell", nCell);
+ dmapper_logger->attribute("row", nRow);
+#endif
+
+ lcl_computeCellBorders( rInfo.pTableBorders, *aCellIterator, nCell, nRow, bIsEndCol, bIsEndRow );
+
+ //now set the default left+right border distance TODO: there's an sprm containing the default distance!
+ const PropertyMap::const_iterator aLeftDistanceIter =
+ aCellIterator->get()->find( PropertyDefinition(PROP_LEFT_BORDER_DISTANCE, false) );
+ if( aLeftDistanceIter == aCellIterator->get()->end() )
+ aCellIterator->get()->Insert( PROP_LEFT_BORDER_DISTANCE, false,
+ uno::makeAny(rInfo.nLeftBorderDistance ) );
+ const PropertyMap::const_iterator aRightDistanceIter =
+ aCellIterator->get()->find( PropertyDefinition(PROP_RIGHT_BORDER_DISTANCE, false) );
+ if( aRightDistanceIter == aCellIterator->get()->end() )
+ aCellIterator->get()->Insert( PROP_RIGHT_BORDER_DISTANCE, false,
+ uno::makeAny((sal_Int32) rInfo.nRightBorderDistance ) );
+
+ const PropertyMap::const_iterator aTopDistanceIter =
+ aCellIterator->get()->find( PropertyDefinition(PROP_TOP_BORDER_DISTANCE, false) );
+ if( aTopDistanceIter == aCellIterator->get()->end() )
+ aCellIterator->get()->Insert( PROP_TOP_BORDER_DISTANCE, false,
+ uno::makeAny((sal_Int32) rInfo.nTopBorderDistance ) );
+
+ const PropertyMap::const_iterator aBottomDistanceIter =
+ aCellIterator->get()->find( PropertyDefinition(PROP_BOTTOM_BORDER_DISTANCE, false) );
+ if( aBottomDistanceIter == aCellIterator->get()->end() )
+ aCellIterator->get()->Insert( PROP_BOTTOM_BORDER_DISTANCE, false,
+ uno::makeAny((sal_Int32) rInfo.nBottomBorderDistance ) );
+
+ pSingleCellProperties[nCell] = aCellIterator->get()->GetPropertyValues();
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->endElement("cell");
+#endif
+ }
+ ++nCell;
+ ++aCellIterator;
+ }
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ //-->debug cell properties
+ {
+ ::rtl::OUString sNames;
+ const uno::Sequence< beans::PropertyValues > aDebugCurrentRow = aCellProperties[nRow];
+ sal_Int32 nDebugCells = aDebugCurrentRow.getLength();
+ (void) nDebugCells;
+ for( sal_Int32 nDebugCell = 0; nDebugCell < nDebugCells; ++nDebugCell)
+ {
+ const uno::Sequence< beans::PropertyValue >& aDebugCellProperties = aDebugCurrentRow[nDebugCell];
+ sal_Int32 nDebugCellProperties = aDebugCellProperties.getLength();
+ for( sal_Int32 nDebugProperty = 0; nDebugProperty < nDebugCellProperties; ++nDebugProperty)
+ {
+ const ::rtl::OUString sName = aDebugCellProperties[nDebugProperty].Name;
+ sNames += sName;
+ sNames += ::rtl::OUString('-');
+ }
+ sNames += ::rtl::OUString('\n');
+ }
+ (void)sNames;
+ }
+ //--<
+#endif
+ ++nRow;
+ ++aRowOfCellsIterator;
+ }
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->endElement("getCellProperties");
+#endif
+
+ return aCellProperties;
+}
+
+RowPropertyValuesSeq_t DomainMapperTableHandler::endTableGetRowProperties()
+{
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("getRowProperties");
+#endif
+
+ RowPropertyValuesSeq_t aRowProperties( m_aRowProperties.size() );
+ PropertyMapVector1::const_iterator aRowIter = m_aRowProperties.begin();
+ PropertyMapVector1::const_iterator aRowIterEnd = m_aRowProperties.end();
+ sal_Int32 nRow = 0;
+ while( aRowIter != aRowIterEnd )
+ {
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("rowProps.row");
+#endif
+ if( aRowIter->get() )
+ {
+ //set default to 'break across pages"
+ if( aRowIter->get()->find( PropertyDefinition( PROP_IS_SPLIT_ALLOWED, false )) == aRowIter->get()->end())
+ aRowIter->get()->Insert( PROP_IS_SPLIT_ALLOWED, false, uno::makeAny(sal_True ) );
+
+ aRowProperties[nRow] = (*aRowIter)->GetPropertyValues();
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->addTag((*aRowIter)->toTag());
+ dmapper_logger->addTag(lcl_PropertyValuesToTag(aRowProperties[nRow]));
+#endif
+ }
+ ++nRow;
+ ++aRowIter;
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->endElement("rowProps.row");
+#endif
+ }
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->endElement("getRowProperties");
+#endif
+
+ return aRowProperties;
+}
+
+void DomainMapperTableHandler::endTable()
+{
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("tablehandler.endTable");
+#endif
+
+ TableInfo aTableInfo;
+ aTableInfo.pTableStyle = endTableGetTableStyle(aTableInfo);
+ // expands to uno::Sequence< Sequence< beans::PropertyValues > >
+
+ CellPropertyValuesSeq_t aCellProperties = endTableGetCellProperties(aTableInfo);
+
+ RowPropertyValuesSeq_t aRowProperties = endTableGetRowProperties();
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->addTag(lcl_PropertyValueSeqToTag(aRowProperties));
+#endif
+
+ if (m_pTableSeq->getLength() > 0)
+ {
+ try
+ {
+ uno::Reference<text::XTextTable> xTable = m_xText->convertToTable(*m_pTableSeq,
+ aCellProperties,
+ aRowProperties,
+ aTableInfo.aTableProperties);
+
+ m_xTableRange = xTable->getAnchor( );
+ }
+ catch (lang::IllegalArgumentException e)
+ {
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->chars("failed to import table!");
+#endif
+ }
+ catch ( uno::Exception e )
+ {
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("exception");
+ dmapper_logger->chars(rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr( ));
+ dmapper_logger->endElement("exeception");
+#endif
+ }
+ }
+
+ m_aTableProperties.reset();
+ m_aCellProperties.clear();
+ m_aRowProperties.clear();
+
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->endElement("tablehandler.endTable");
+ dmapper_logger->endElement("tablehandler.table");
+#endif
+}
+
+void DomainMapperTableHandler::startRow(unsigned int nCells,
+ TablePropertyMapPtr pProps)
+{
+ m_aRowProperties.push_back( pProps );
+ m_aCellProperties.push_back( PropertyMapVector1() );
+
+#if DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("table.row");
+ dmapper_logger->attribute("cells", nCells);
+ if (pProps != NULL)
+ dmapper_logger->addTag(pProps->toTag());
+#endif
+
+ m_pRowSeq = RowSequencePointer_t(new RowSequence_t(nCells));
+ m_nCellIndex = 0;
+}
+
+void DomainMapperTableHandler::endRow()
+{
+ (*m_pTableSeq)[m_nRowIndex] = *m_pRowSeq;
+ ++m_nRowIndex;
+ m_nCellIndex = 0;
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->endElement("table.row");
+#endif
+}
+
+void DomainMapperTableHandler::startCell(const Handle_t & start,
+ TablePropertyMapPtr pProps )
+{
+ sal_uInt32 nRow = m_aRowProperties.size();
+ if ( pProps.get( ) )
+ m_aCellProperties[nRow - 1].push_back( pProps );
+ else
+ {
+ // Adding an empty cell properties map to be able to get
+ // the table defaults properties
+ TablePropertyMapPtr pEmptyProps( new TablePropertyMap( ) );
+ m_aCellProperties[nRow - 1].push_back( pEmptyProps );
+ }
+
+#if DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("table.cell");
+ dmapper_logger->startElement("table.cell.start");
+ dmapper_logger->chars(toString(start));
+ dmapper_logger->endElement("table.cell.start");
+ lcl_printProperties( pProps );
+#endif
+
+ //add a new 'row' of properties
+// if( m_pCellProperties.size() <= sal::static_int_cast< sal_uInt32, sal_Int32>(m_nRowIndex) )
+// m_pCellProperties.push_back( RowProperties_t() );
+// m_pCellProperties[m_nRowIndex].push_back( pProps );
+ m_pCellSeq = CellSequencePointer_t(new CellSequence_t(2));
+ if (!start.get())
+ return;
+ (*m_pCellSeq)[0] = start->getStart();
+}
+
+void DomainMapperTableHandler::endCell(const Handle_t & end)
+{
+#ifdef DEBUG_DMAPPER_TABLE_HANDLER
+ dmapper_logger->startElement("table.cell.end");
+ dmapper_logger->chars(toString(end));
+ dmapper_logger->endElement("table.cell.end");
+ dmapper_logger->endElement("table.cell");
+ clog << "</table.cell>" << endl;
+#endif
+
+ if (!end.get())
+ return;
+ (*m_pCellSeq)[1] = end->getEnd();
+ (*m_pRowSeq)[m_nCellIndex] = *m_pCellSeq;
+ ++m_nCellIndex;
+}
+
+}}
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.hxx b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
new file mode 100644
index 000000000000..b5a1628a0725
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.hxx
@@ -0,0 +1,103 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_DOMAIN_MAPPER_TABLE_HANDLER_HXX
+#define INCLUDED_DOMAIN_MAPPER_TABLE_HANDLER_HXX
+
+#include <resourcemodel/TableManager.hxx>
+#include <PropertyMap.hxx>
+
+#include <com/sun/star/text/XTextAppendAndConvert.hpp>
+
+namespace writerfilter {
+namespace dmapper {
+
+typedef ::com::sun::star::text::XTextRange TextRange_t;
+typedef ::com::sun::star::uno::Reference< TextRange_t > Handle_t;
+typedef ::com::sun::star::uno::Sequence< Handle_t> CellSequence_t;
+typedef boost::shared_ptr<CellSequence_t> CellSequencePointer_t;
+typedef ::com::sun::star::uno::Sequence< CellSequence_t > RowSequence_t;
+typedef boost::shared_ptr<RowSequence_t> RowSequencePointer_t;
+typedef ::com::sun::star::uno::Sequence< RowSequence_t> TableSequence_t;
+typedef boost::shared_ptr<TableSequence_t> TableSequencePointer_t;
+typedef ::com::sun::star::text::XTextAppendAndConvert Text_t;
+typedef ::com::sun::star::uno::Reference<Text_t> TextReference_t;
+
+typedef ::com::sun::star::beans::PropertyValues TablePropertyValues_t;
+typedef ::com::sun::star::uno::Sequence< TablePropertyValues_t > RowPropertyValuesSeq_t;
+typedef ::com::sun::star::uno::Sequence< RowPropertyValuesSeq_t> CellPropertyValuesSeq_t;
+
+typedef std::vector<PropertyMapPtr> PropertyMapVector1;
+typedef std::vector<PropertyMapVector1> PropertyMapVector2;
+
+class DomainMapper_Impl;
+class TableStyleSheetEntry;
+struct TableInfo;
+class DomainMapperTableHandler : public TableDataHandler<Handle_t , TablePropertyMapPtr >
+{
+ TextReference_t m_xText;
+ DomainMapper_Impl& m_rDMapper_Impl;
+ CellSequencePointer_t m_pCellSeq;
+ RowSequencePointer_t m_pRowSeq;
+ TableSequencePointer_t m_pTableSeq;
+
+ Handle_t m_xTableRange;
+
+ // properties
+ PropertyMapVector2 m_aCellProperties;
+ PropertyMapVector1 m_aRowProperties;
+ TablePropertyMapPtr m_aTableProperties;
+
+ sal_Int32 m_nCellIndex;
+ sal_Int32 m_nRowIndex;
+
+ TableStyleSheetEntry * endTableGetTableStyle(TableInfo & rInfo);
+ CellPropertyValuesSeq_t endTableGetCellProperties(TableInfo & rInfo);
+ RowPropertyValuesSeq_t endTableGetRowProperties();
+
+public:
+ typedef boost::shared_ptr<DomainMapperTableHandler> Pointer_t;
+
+ DomainMapperTableHandler(TextReference_t xText, DomainMapper_Impl& rDMapper_Impl);
+ virtual ~DomainMapperTableHandler();
+
+ virtual void startTable(unsigned int nRows, unsigned int nDepth,
+ TablePropertyMapPtr pProps);
+ virtual void endTable();
+ virtual void startRow(unsigned int nCells, TablePropertyMapPtr pProps);
+ virtual void endRow();
+ virtual void startCell(const Handle_t & start, TablePropertyMapPtr pProps);
+ virtual void endCell(const Handle_t & end);
+
+ virtual Handle_t* getTable( )
+ {
+ return &m_xTableRange;
+ };
+};
+
+}}
+
+#endif // INCLUDED_DOMAIN_MAPPER_TABLE_HANDLER_HXX
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.cxx b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
new file mode 100644
index 000000000000..8783421faaaf
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.cxx
@@ -0,0 +1,527 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <DomainMapperTableManager.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <BorderHandler.hxx>
+#include <CellColorHandler.hxx>
+#include <CellMarginHandler.hxx>
+#include <ConversionHelper.hxx>
+#include <MeasureHandler.hxx>
+#include <TDefTableHandler.hxx>
+#include <com/sun/star/text/HoriOrientation.hpp>
+#include <com/sun/star/text/SizeType.hpp>
+#include <com/sun/star/text/TableColumnSeparator.hpp>
+#include <com/sun/star/text/VertOrientation.hpp>
+#include <ooxml/resourceids.hxx>
+#include <doctok/sprmids.hxx>
+#include <dmapperLoggers.hxx>
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+using namespace ::std;
+/*-- 23.04.2007 14:57:49---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+DomainMapperTableManager::DomainMapperTableManager(bool bOOXML) :
+ m_nRow(0),
+ m_nCell(0),
+ m_nGridSpan(1),
+ m_nCellBorderIndex(0),
+ m_nHeaderRepeat(0),
+ m_nTableWidth(0),
+ m_bOOXML( bOOXML ),
+ m_pTablePropsHandler( new TablePropertiesHandler( bOOXML ) )
+{
+ m_pTablePropsHandler->SetTableManager( this );
+
+#ifdef DEBUG_DOMAINMAPPER
+#ifdef DEBUG_TABLE
+ setTagLogger(dmapper_logger);
+#endif
+#endif
+}
+/*-- 23.04.2007 14:57:49---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+DomainMapperTableManager::~DomainMapperTableManager()
+{
+ if ( m_pTablePropsHandler )
+ delete m_pTablePropsHandler, m_pTablePropsHandler = NULL;
+}
+/*-- 23.04.2007 15:25:37---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool DomainMapperTableManager::sprm(Sprm & rSprm)
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("tablemanager.sprm");
+ string sSprm = rSprm.toString();
+ dmapper_logger->chars(sSprm);
+ dmapper_logger->endElement("tablemanager.sprm");
+#endif
+ bool bRet = DomainMapperTableManager_Base_t::sprm(rSprm);
+ if( !bRet )
+ {
+ bRet = m_pTablePropsHandler->sprm( rSprm );
+ }
+
+ if ( !bRet )
+ {
+ bRet = true;
+ sal_uInt32 nSprmId = rSprm.getId();
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = ((pValue.get() != NULL) ? pValue->getInt() : 0);
+ switch ( nSprmId )
+ {
+ case 0xf661: //sprmTTRLeft left table indent
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case 0xf614: // sprmTTPreferredWidth - preferred table width
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_TblPrBase_tblW: //90722;
+ /* 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();
+ if( pProperties.get())
+ { //contains attributes x2902 (LN_unit) and x17e2 (LN_trleft)
+ MeasureHandlerPtr pMeasureHandler( new MeasureHandler );
+ pProperties->resolve(*pMeasureHandler);
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ if( nSprmId == 0xf661 || nSprmId == sal_uInt32(NS_ooxml::LN_CT_TblPrBase_tblInd ))
+ {
+ pPropMap->setValue( TablePropertyMap::LEFT_MARGIN, pMeasureHandler->getMeasureValue() );
+ }
+ else
+ {
+ m_nTableWidth = pMeasureHandler->getMeasureValue();
+ if( m_nTableWidth )
+ pPropMap->setValue( TablePropertyMap::TABLE_WIDTH, m_nTableWidth );
+ }
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->addTag(pPropMap->toTag());
+#endif
+ insertTableProps(pPropMap);
+ }
+ }
+ break;
+ 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 )
+ {
+ ++m_nHeaderRepeat;
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ pPropMap->Insert( PROP_HEADER_ROW_COUNT, false, uno::makeAny( m_nHeaderRepeat ));
+ insertTableProps(pPropMap);
+ }
+ else
+ m_nHeaderRepeat = -1;
+ break;
+ case 0xd608: // TDefTable
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ TDefTableHandlerPtr pTDefTableHandler( new TDefTableHandler(m_bOOXML) );
+ pProperties->resolve( *pTDefTableHandler );
+
+ TablePropertyMapPtr pRowPropMap( new TablePropertyMap );
+ pRowPropMap->insert( pTDefTableHandler->getRowProperties() );
+ insertRowProps( pRowPropMap );
+ if( !m_nTableWidth )
+ {
+ m_nTableWidth= pTDefTableHandler->getTableWidth();
+ if( m_nTableWidth )
+ {
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ pPropMap->setValue( TablePropertyMap::TABLE_WIDTH, m_nTableWidth );
+ insertTableProps(pPropMap);
+ }
+ }
+ for( size_t nCell = 0; nCell < pTDefTableHandler->getCellCount(); ++nCell )
+ {
+ TablePropertyMapPtr pCellPropMap( new TablePropertyMap );
+ pTDefTableHandler->fillCellProperties( nCell, pCellPropMap );
+ cellPropsByCell( nCell, pCellPropMap );
+ }
+ }
+ }
+ break;
+ case 0xD605: // sprmTTableBorders
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ BorderHandlerPtr pBorderHandler( new BorderHandler(m_bOOXML) );
+ pProperties->resolve(*pBorderHandler);
+ TablePropertyMapPtr pCellPropMap( new TablePropertyMap() );
+ pCellPropMap->insert( pBorderHandler->getProperties() );
+ cellPropsByCell( m_nCellBorderIndex, pCellPropMap );
+ ++m_nCellBorderIndex;
+ }
+ }
+ break;
+ case 0xd632 : //sprmTNewSpacing
+ /* 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;
+ case 0xd613: //sprmTGridLineProps
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ // TODO: needs a handler
+ /*contains:
+ GridLineProps">
+ rtf:LINEPROPSTOP
+ rtf:LINEPROPSLEFT
+ rtf:LINEPROPSBOTTOM
+ rtf:LINEPROPSRIGHT
+ rtf:LINEPROPSHORIZONTAL
+ rtf:LINEPROPSVERTICAL
+ rtf:LINECOLOR
+ rtf:LINEWIDTH
+ rtf:LINETYPE
+
+ */
+ break;
+ case 0x740a : //sprmTTlp
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ //TODO: Table look specifier
+ break;
+ case 0x6816 : //unknown
+ case 0x3466 : //unknown
+ case 0x3615 : //unknown
+ case 0x646b : //unknown - expandable sprm - see ww8scan.cxx
+ case 0x7479 : //unknown
+ case 0xf617 : //unknown
+ case 0xf618 : //unknown
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ bRet = false;
+ break;
+ 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 );
+ pPropMap->Insert( META_PROP_TABLE_STYLE_NAME, false, uno::makeAny( m_sTableStyleName ));
+ insertTableProps(pPropMap);
+ }
+ break;
+ case NS_ooxml::LN_CT_TblGridBase_gridCol:
+ /* WRITERFILTERSTATUS: done: 100, planned: 2, spent: 0 */
+ {
+ getCurrentGrid()->push_back( ConversionHelper::convertTwipToMM100( nIntValue ) );
+ }
+ break;
+ 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 );
+ pMergeProps->Insert( PROP_VERTICAL_MERGE, false, uno::makeAny( bool( sal::static_int_cast<Id>(nIntValue) == NS_ooxml::LN_Value_ST_Merge_restart )) );
+ cellProps( pMergeProps);
+ }
+ break;
+ 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");
+ dmapper_logger->attribute("gridSpan", nIntValue);
+ dmapper_logger->endElement("tablemanager.GridSpan");
+#endif
+ m_nGridSpan = nIntValue;
+ }
+ break;
+ case NS_ooxml::LN_CT_TblPrBase_tblLook:
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ break; //todo: table look specifier
+ 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( ) ) );
+ insertRowProps( pProps );
+ }
+ 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( ) ) );
+ cellProps( pProps );
+ }
+ break;
+ default:
+ bRet = false;
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->element("unhandled");
+#endif
+ }
+ }
+ return bRet;
+}
+
+boost::shared_ptr< vector<sal_Int32> > DomainMapperTableManager::getCurrentGrid( )
+{
+ return m_aTableGrid.back( );
+}
+
+boost::shared_ptr< vector< sal_Int32 > > DomainMapperTableManager::getCurrentSpans( )
+{
+ return m_aGridSpans.back( );
+}
+
+void DomainMapperTableManager::startLevel( )
+{
+ DomainMapperTableManager_Base_t::startLevel( );
+
+ IntVectorPtr pNewGrid( new vector<sal_Int32> );
+ IntVectorPtr pNewSpans( new vector<sal_Int32> );
+ m_aTableGrid.push_back( pNewGrid );
+ m_aGridSpans.push_back( pNewSpans );
+ m_nTableWidth = 0;
+}
+
+void DomainMapperTableManager::endLevel( )
+{
+ m_aTableGrid.pop_back( );
+ m_aGridSpans.pop_back( );
+ m_nTableWidth = 0;
+
+ DomainMapperTableManager_Base_t::endLevel( );
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("dmappertablemanager.endLevel");
+ PropertyMapPtr pProps = getTableProps();
+ if (pProps.get() != NULL)
+ dmapper_logger->addTag(getTableProps()->toTag());
+
+ dmapper_logger->endElement("dmappertablemanager.endLevel");
+#endif
+}
+
+/*-- 02.05.2007 14:36:26---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapperTableManager::endOfCellAction()
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->element("endOFCellAction");
+#endif
+
+ getCurrentSpans()->push_back(m_nGridSpan);
+ m_nGridSpan = 1;
+ ++m_nCell;
+}
+/*-- 02.05.2007 14:36:26---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapperTableManager::endOfRowAction()
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("endOfRowAction");
+#endif
+
+ IntVectorPtr pTableGrid = getCurrentGrid( );
+ if(!m_nTableWidth && pTableGrid->size())
+ {
+ ::std::vector<sal_Int32>::const_iterator aCellIter = pTableGrid->begin();
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("tableWidth");
+#endif
+
+ while( aCellIter != pTableGrid->end() )
+ {
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("col");
+ dmapper_logger->attribute("width", *aCellIter);
+ dmapper_logger->endElement("col");
+#endif
+
+ m_nTableWidth += *aCellIter++;
+ }
+
+ if( m_nTableWidth > 0)
+ {
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+// pPropMap->Insert( PROP_WIDTH, false, uno::makeAny( m_nTableWidth ));
+ pPropMap->setValue( TablePropertyMap::TABLE_WIDTH, m_nTableWidth );
+ insertTableProps(pPropMap);
+ }
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("tableWidth");
+#endif
+ }
+
+ IntVectorPtr pCurrentSpans = getCurrentSpans( );
+ if( pCurrentSpans->size() < m_nCell)
+ {
+ //fill missing elements with '1'
+ pCurrentSpans->insert( pCurrentSpans->end( ), m_nCell - pCurrentSpans->size(), 1 );
+ }
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("gridSpans");
+ {
+ ::std::vector<sal_Int32>::const_iterator aGridSpanIter = pCurrentSpans->begin();
+ ::std::vector<sal_Int32>::const_iterator aGridSpanIterEnd = pCurrentSpans->end();
+
+ while (aGridSpanIter != aGridSpanIterEnd)
+ {
+ dmapper_logger->startElement("gridSpan");
+ dmapper_logger->attribute("span", *aGridSpanIter);
+ dmapper_logger->endElement("gridSpan");
+
+ aGridSpanIter++;
+ }
+ }
+ dmapper_logger->endElement("gridSpans");
+#endif
+
+ //calculate number of used grids - it has to match the size of m_aTableGrid
+ size_t nGrids = 0;
+ ::std::vector<sal_Int32>::const_iterator aGridSpanIter = pCurrentSpans->begin();
+ for( ; aGridSpanIter != pCurrentSpans->end(); ++aGridSpanIter)
+ nGrids += *aGridSpanIter;
+
+ if( pTableGrid->size() == nGrids )
+ {
+ //determine table width
+ double nFullWidth = m_nTableWidth;
+ //the positions have to be distibuted in a range of 10000
+ const double nFullWidthRelative = 10000.;
+ uno::Sequence< text::TableColumnSeparator > aSeparators( m_nCell - 1 );
+ text::TableColumnSeparator* pSeparators = aSeparators.getArray();
+ sal_Int16 nLastRelPos = 0;
+ sal_uInt32 nBorderGridIndex = 0;
+
+ ::std::vector< sal_Int32 >::const_iterator aSpansIter = pCurrentSpans->begin( );
+ for( sal_uInt32 nBorder = 0; nBorder < m_nCell - 1; ++nBorder )
+ {
+ sal_Int32 nGridCount = *aSpansIter;
+ double fGridWidth = 0.;
+ do
+ {
+ fGridWidth += (*pTableGrid.get())[nBorderGridIndex++];
+ }while( --nGridCount );
+
+ sal_Int16 nRelPos =
+ sal::static_int_cast< sal_Int16 >(fGridWidth * nFullWidthRelative / nFullWidth );
+
+ pSeparators[nBorder].Position = nRelPos + nLastRelPos;
+ pSeparators[nBorder].IsVisible = sal_True;
+ nLastRelPos = nLastRelPos + nRelPos;
+ aSpansIter++;
+ }
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ pPropMap->Insert( PROP_TABLE_COLUMN_SEPARATORS, false, uno::makeAny( aSeparators ) );
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("rowProperties");
+ dmapper_logger->addTag(pPropMap->toTag());
+ dmapper_logger->endElement("rowProperties");
+#endif
+ insertRowProps(pPropMap);
+ }
+
+ ++m_nRow;
+ m_nCell = 0;
+ m_nCellBorderIndex = 0;
+ pCurrentSpans->clear();
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("endOfRowAction");
+#endif
+}
+/*-- 18.06.2007 10:34:37---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapperTableManager::clearData()
+{
+ m_nRow = m_nCell = m_nCellBorderIndex = m_nHeaderRepeat = m_nTableWidth = 0;
+ m_sTableStyleName = ::rtl::OUString();
+ m_pTableStyleTextProperies.reset();
+}
+/*-- 27.06.2007 14:19:50---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void lcl_CopyTextProperties(PropertyMapPtr pToFill,
+ const StyleSheetEntry* pStyleSheetEntry, StyleSheetTablePtr pStyleSheetTable)
+{
+ if( !pStyleSheetEntry )
+ return;
+ //fill base style properties first, recursively
+ if( pStyleSheetEntry->sBaseStyleIdentifier.getLength())
+ {
+ const StyleSheetEntryPtr pParentStyleSheet =
+ pStyleSheetTable->FindStyleSheetByISTD(pStyleSheetEntry->sBaseStyleIdentifier);
+ OSL_ENSURE( pParentStyleSheet, "table style not found" );
+ lcl_CopyTextProperties( pToFill, pParentStyleSheet.get( ), pStyleSheetTable);
+ }
+
+ PropertyMap::const_iterator aPropIter = pStyleSheetEntry->pProperties->begin();
+ while(aPropIter != pStyleSheetEntry->pProperties->end())
+ {
+ //copy all text properties form the table style to the current run attributes
+ if( aPropIter->first.bIsTextProperty )
+ pToFill->insert(*aPropIter);
+ ++aPropIter;
+ }
+}
+void DomainMapperTableManager::CopyTextProperties(PropertyMapPtr pContext, StyleSheetTablePtr pStyleSheetTable)
+{
+ if( !m_pTableStyleTextProperies.get())
+ {
+ m_pTableStyleTextProperies.reset( new PropertyMap );
+ const StyleSheetEntryPtr pStyleSheetEntry = pStyleSheetTable->FindStyleSheetByISTD(
+ m_sTableStyleName);
+ OSL_ENSURE( pStyleSheetEntry, "table style not found" );
+ lcl_CopyTextProperties(m_pTableStyleTextProperies, pStyleSheetEntry.get( ), pStyleSheetTable);
+ }
+ pContext->insert( m_pTableStyleTextProperies );
+}
+
+
+}}
diff --git a/writerfilter/source/dmapper/DomainMapperTableManager.hxx b/writerfilter/source/dmapper/DomainMapperTableManager.hxx
new file mode 100644
index 000000000000..8f4fa082881e
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapperTableManager.hxx
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_DOMAIN_MAPPER_TABLE_MANAGER_HXX
+#define INCLUDED_DOMAIN_MAPPER_TABLE_MANAGER_HXX
+
+#include "TablePropertiesHandler.hxx"
+
+#include <resourcemodel/TableManager.hxx>
+#include <PropertyMap.hxx>
+#include <StyleSheetTable.hxx>
+#include <com/sun/star/text/XTextRange.hpp>
+#include <vector>
+
+namespace writerfilter {
+namespace dmapper {
+
+class DomainMapperTableManager : public DomainMapperTableManager_Base_t
+{
+ typedef boost::shared_ptr< std::vector<sal_Int32> > IntVectorPtr;
+
+ sal_uInt32 m_nRow;
+ sal_uInt32 m_nCell;
+ sal_uInt32 m_nGridSpan;
+ sal_uInt32 m_nCellBorderIndex; //borders are provided for all cells and need counting
+ sal_Int32 m_nHeaderRepeat; //counter of repeated headers - if == -1 then the repeating stops
+ sal_Int32 m_nTableWidth; //might be set directly or has to be calculated from the column positions
+ bool m_bOOXML;
+ ::rtl::OUString m_sTableStyleName;
+ PropertyMapPtr m_pTableStyleTextProperies;
+
+ ::std::vector< IntVectorPtr > m_aTableGrid;
+ ::std::vector< IntVectorPtr > m_aGridSpans;
+
+ TablePropertiesHandler *m_pTablePropsHandler;
+ PropertyMapPtr m_pStyleProps;
+
+ virtual void clearData();
+
+public:
+
+ DomainMapperTableManager(bool bOOXML);
+ virtual ~DomainMapperTableManager();
+
+ // use this method to avoid adding the properties for the table
+ // but in the provided properties map.
+ inline void SetStyleProperties( PropertyMapPtr pProperties ) { m_pStyleProps = pProperties; };
+
+ virtual bool sprm(Sprm & rSprm);
+
+ virtual void startLevel( );
+ virtual void endLevel( );
+
+ virtual void endOfCellAction();
+ virtual void endOfRowAction();
+
+ IntVectorPtr getCurrentGrid( );
+ IntVectorPtr getCurrentSpans( );
+
+ const ::rtl::OUString& getTableStyleName() const { return m_sTableStyleName; }
+ /// copy the text properties of the table style and its parent into pContext
+ void CopyTextProperties(PropertyMapPtr pContext, StyleSheetTablePtr pStyleSheetTable);
+
+ inline virtual void cellProps(TablePropertyMapPtr pProps)
+ {
+ if ( m_pStyleProps.get( ) )
+ m_pStyleProps->insert( pProps, true );
+ else
+ DomainMapperTableManager_Base_t::cellProps( pProps );
+ };
+
+ inline virtual void cellPropsByCell(unsigned int i, TablePropertyMapPtr pProps)
+ {
+ if ( m_pStyleProps.get( ) )
+ m_pStyleProps->insert( pProps, true );
+ else
+ DomainMapperTableManager_Base_t::cellPropsByCell( i, pProps );
+ };
+
+ inline virtual void insertRowProps(TablePropertyMapPtr pProps)
+ {
+ if ( m_pStyleProps.get( ) )
+ m_pStyleProps->insert( pProps, true );
+ else
+ DomainMapperTableManager_Base_t::insertRowProps( pProps );
+ };
+
+ inline virtual void insertTableProps(TablePropertyMapPtr pProps)
+ {
+ if ( m_pStyleProps.get( ) )
+ m_pStyleProps->insert( pProps, true );
+ else
+ DomainMapperTableManager_Base_t::insertTableProps( pProps );
+ };
+
+};
+
+}}
+
+#endif // INCLUDED_DOMAIN_MAPPER_TABLE_MANAGER_HXX
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
new file mode 100644
index 000000000000..11d03655b5db
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -0,0 +1,3773 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <DomainMapper_Impl.hxx>
+#include <ConversionHelper.hxx>
+#include <DomainMapperTableHandler.hxx>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/beans/XPropertyState.hpp>
+#include <com/sun/star/container/XIndexReplace.hpp>
+#include <com/sun/star/container/XNamed.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
+#include <com/sun/star/drawing/XShapes.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
+#include <com/sun/star/style/LineNumberPosition.hpp>
+#include <com/sun/star/style/NumberingType.hpp>
+#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <com/sun/star/text/ChapterFormat.hpp>
+#include <com/sun/star/text/FilenameDisplayFormat.hpp>
+#include <com/sun/star/text/UserDataPart.hpp>
+#include <com/sun/star/text/SetVariableType.hpp>
+#include <com/sun/star/text/XFootnote.hpp>
+#include <com/sun/star/text/XLineNumberingProperties.hpp>
+#include <com/sun/star/text/PageNumberType.hpp>
+#include <com/sun/star/text/RelOrientation.hpp>
+#include <com/sun/star/text/HoriOrientation.hpp>
+#include <com/sun/star/text/VertOrientation.hpp>
+#include <com/sun/star/text/ReferenceFieldPart.hpp>
+#include <com/sun/star/text/ReferenceFieldSource.hpp>
+#include <com/sun/star/text/SizeType.hpp>
+#include <com/sun/star/text/TextContentAnchorType.hpp>
+#include <com/sun/star/text/WrapTextMode.hpp>
+#include <com/sun/star/text/XDependentTextField.hpp>
+#include <com/sun/star/text/XParagraphCursor.hpp>
+#include <com/sun/star/text/XRedline.hpp>
+#include <com/sun/star/text/XTextAppendAndConvert.hpp>
+#include <com/sun/star/text/XTextCopy.hpp>
+#include <com/sun/star/text/XTextField.hpp>
+#include <com/sun/star/text/XTextFieldsSupplier.hpp>
+#include <com/sun/star/style/DropCapFormat.hpp>
+#include <com/sun/star/util/DateTime.hpp>
+#include <com/sun/star/util/XNumberFormatsSupplier.hpp>
+#include <com/sun/star/util/XNumberFormats.hpp>
+#include <rtl/ustrbuf.hxx>
+#include <rtl/string.h>
+#include "FieldTypes.hxx"
+
+#include <tools/string.hxx>
+#ifdef DEBUG_DOMAINMAPPER
+#include <resourcemodel/QNameToString.hxx>
+#include <resourcemodel/util.hxx>
+#include <dmapperLoggers.hxx>
+#endif
+#include <ooxml/OOXMLFastTokens.hxx>
+
+#if DEBUG
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/style/TabStop.hpp>
+#endif
+
+#include <map>
+
+using namespace ::com::sun::star;
+using namespace ::rtl;
+namespace writerfilter {
+namespace dmapper{
+struct FieldConversion
+{
+ ::rtl::OUString sWordCommand;
+ const sal_Char* cFieldServiceName;
+ const sal_Char* cFieldMasterServiceName;
+ FieldId eFieldId;
+};
+
+typedef ::std::map< ::rtl::OUString, FieldConversion>
+ FieldConversionMap_t;
+
+/*-- 18.07.2006 08:56:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int32 FIB::GetData( Id nName )
+{
+ if( nName >= NS_rtf::LN_WIDENT && nName <= NS_rtf::LN_LCBSTTBFUSSR)
+ return aFIBData[nName - NS_rtf::LN_WIDENT];
+ OSL_ENSURE( false, "invalid index in FIB");
+ return -1;
+}
+/*-- 18.07.2006 08:56:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FIB::SetData( Id nName, sal_Int32 nValue )
+{
+ OSL_ENSURE( nName >= NS_rtf::LN_WIDENT && nName <= NS_rtf::LN_LCBSTTBFUSSR, "invalid index in FIB");
+ if( nName >= NS_rtf::LN_WIDENT && nName <= NS_rtf::LN_LCBSTTBFUSSR)
+ aFIBData[nName - NS_rtf::LN_WIDENT] = nValue;
+}
+/*-- 01.09.2006 10:22:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+DomainMapper_Impl::DomainMapper_Impl(
+ DomainMapper& rDMapper,
+ uno::Reference < uno::XComponentContext > xContext,
+ uno::Reference< lang::XComponent > xModel,
+ SourceDocumentType eDocumentType) :
+ m_eDocumentType( eDocumentType ),
+ m_rDMapper( rDMapper ),
+ m_xTextDocument( xModel, uno::UNO_QUERY ),
+ m_xTextFactory( xModel, uno::UNO_QUERY ),
+ m_xComponentContext( xContext ),
+ m_bFieldMode( false ),
+ m_bSetUserFieldContent( false ),
+ m_bIsFirstSection( true ),
+ m_bIsColumnBreakDeferred( false ),
+ m_bIsPageBreakDeferred( false ),
+ m_bIsInShape( false ),
+ m_bShapeContextAdded( false ),
+ m_pLastSectionContext( ),
+ m_nCurrentTabStopIndex( 0 ),
+ m_sCurrentParaStyleId(),
+ m_bInStyleSheetImport( false ),
+ m_bInAnyTableImport( false ),
+ m_bLineNumberingSet( false ),
+ m_bIsInFootnoteProperties( true ),
+ m_bIsCustomFtnMark( false ),
+ m_bIsParaChange( false ),
+ m_bParaChanged( false ),
+ m_bIsLastParaInSection( false )
+{
+ appendTableManager( );
+ GetBodyText();
+ uno::Reference< text::XTextAppend > xBodyTextAppend = uno::Reference< text::XTextAppend >( m_xBodyText, uno::UNO_QUERY );
+ m_aTextAppendStack.push(xBodyTextAppend);
+
+ //todo: does it make sense to set the body text as static text interface?
+ uno::Reference< text::XTextAppendAndConvert > xBodyTextAppendAndConvert( m_xBodyText, uno::UNO_QUERY );
+ TableDataHandler_t::Pointer_t pTableHandler
+ (new DomainMapperTableHandler(xBodyTextAppendAndConvert, *this));
+ getTableManager( ).setHandler(pTableHandler);
+
+ getTableManager( ).startLevel();
+}
+/*-- 01.09.2006 10:22:28---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+DomainMapper_Impl::~DomainMapper_Impl()
+{
+ RemoveLastParagraph( );
+ getTableManager( ).endLevel();
+ popTableManager( );
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< container::XNameContainer > DomainMapper_Impl::GetPageStyles()
+{
+ if(!m_xPageStyles.is())
+ {
+ uno::Reference< style::XStyleFamiliesSupplier > xSupplier( m_xTextDocument, uno::UNO_QUERY );
+ xSupplier->getStyleFamilies()->getByName(::rtl::OUString::createFromAscii("PageStyles")) >>= m_xPageStyles;
+ }
+ return m_xPageStyles;
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< text::XText > DomainMapper_Impl::GetBodyText()
+{
+ if(!m_xBodyText.is() && m_xTextDocument.is())
+ {
+ m_xBodyText = m_xTextDocument->getText();
+ }
+ return m_xBodyText;
+}
+/*-- 21.12.2006 12:09:30---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< beans::XPropertySet > DomainMapper_Impl::GetDocumentSettings()
+{
+ if( !m_xDocumentSettings.is() )
+ {
+ m_xDocumentSettings = uno::Reference< beans::XPropertySet >(
+ m_xTextFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.Settings"))), uno::UNO_QUERY );
+ }
+ return m_xDocumentSettings;
+}
+/*-- 21.12.2006 12:16:23---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::SetDocumentSettingsProperty( const ::rtl::OUString& rPropName, const uno::Any& rValue )
+{
+ uno::Reference< beans::XPropertySet > xSettings = GetDocumentSettings();
+ if( xSettings.is() )
+ {
+ try
+ {
+ xSettings->setPropertyValue( rPropName, rValue );
+ }
+ catch( const uno::Exception& )
+ {
+ }
+ }
+}
+
+void DomainMapper_Impl::RemoveLastParagraph( )
+{
+ uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ try
+ {
+ uno::Reference< text::XTextCursor > xCursor = xTextAppend->createTextCursor();
+ xCursor->gotoEnd(false);
+ xCursor->goLeft( 1, true );
+ xCursor->setString(::rtl::OUString());
+ }
+ catch( const uno::Exception& rEx)
+ {
+ (void)rEx;
+ }
+}
+
+void DomainMapper_Impl::SetIsLastParagraphInSection( bool bIsLast )
+{
+ m_bIsLastParaInSection = bIsLast;
+}
+
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushProperties(ContextType eId)
+{
+ SectionPropertyMap* pSectionContext = 0;
+ PropertyMapPtr pInsert(eId == CONTEXT_SECTION ?
+ (pSectionContext = new SectionPropertyMap( m_bIsFirstSection )) :
+ eId == CONTEXT_PARAGRAPH ? new ParagraphPropertyMap : new PropertyMap);
+ if(eId == CONTEXT_SECTION)
+ {
+ if( m_bIsFirstSection )
+ m_bIsFirstSection = false;
+ // beginning with the second section group a section has to be inserted
+ // into the document
+ SectionPropertyMap* pSectionContext_ = dynamic_cast< SectionPropertyMap* >( pInsert.get() );
+ uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ if(xTextAppend.is())
+ pSectionContext_->SetStart( xTextAppend->getEnd() );
+ }
+ m_aPropertyStacks[eId].push( pInsert );
+ m_aContextStack.push(eId);
+
+ m_pTopContext = m_aPropertyStacks[eId].top();
+}
+/*-- 13.06.2007 16:18:18---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushStyleProperties( PropertyMapPtr pStyleProperties )
+{
+ m_aPropertyStacks[CONTEXT_STYLESHEET].push( pStyleProperties );
+ m_aContextStack.push(CONTEXT_STYLESHEET);
+
+ m_pTopContext = m_aPropertyStacks[CONTEXT_STYLESHEET].top();
+}
+/*-- 28.01.2008 14:47:46---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushListProperties(PropertyMapPtr pListProperties)
+{
+ m_aPropertyStacks[CONTEXT_LIST].push( pListProperties );
+ m_aContextStack.push(CONTEXT_LIST);
+ m_pTopContext = m_aPropertyStacks[CONTEXT_LIST].top();
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PopProperties(ContextType eId)
+{
+ OSL_ENSURE(!m_aPropertyStacks[eId].empty(), "section stack already empty");
+
+ if ( eId == CONTEXT_SECTION )
+ {
+ m_pLastSectionContext = m_aPropertyStacks[eId].top( );
+ }
+
+ m_aPropertyStacks[eId].pop();
+ m_aContextStack.pop();
+ if(!m_aContextStack.empty() && !m_aPropertyStacks[m_aContextStack.top()].empty())
+
+ m_pTopContext = m_aPropertyStacks[m_aContextStack.top()].top();
+ else
+ {
+ // OSL_ENSURE(eId == CONTEXT_SECTION, "this should happen at a section context end");
+ m_pTopContext.reset();
+ }
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyMapPtr DomainMapper_Impl::GetTopContextOfType(ContextType eId)
+{
+ PropertyMapPtr pRet;
+ OSL_ENSURE( !m_aPropertyStacks[eId].empty(),
+ "no context of this type available");
+ if(!m_aPropertyStacks[eId].empty())
+ pRet = m_aPropertyStacks[eId].top();
+ return pRet;
+}
+
+/*-- 24.05.2007 15:54:51---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< text::XTextAppend > DomainMapper_Impl::GetTopTextAppend()
+{
+ OSL_ENSURE(!m_aTextAppendStack.empty(), "text append stack is empty" );
+ return m_aTextAppendStack.top().xTextAppend;
+}
+
+/*-- 17.07.2006 08:47:04---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::InitTabStopFromStyle( const uno::Sequence< style::TabStop >& rInitTabStops )
+{
+ OSL_ENSURE(!m_aCurrentTabStops.size(), "tab stops already initialized");
+ for( sal_Int32 nTab = 0; nTab < rInitTabStops.getLength(); ++nTab)
+ {
+ m_aCurrentTabStops.push_back( DeletableTabStop(rInitTabStops[nTab]) );
+ }
+}
+
+/*-- 29.06.2006 13:35:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::ModifyCurrentTabStop( Id nId, sal_Int32 nValue)
+{
+ OSL_ENSURE(nId == NS_rtf::LN_dxaAdd || m_nCurrentTabStopIndex < m_aCurrentTabStops.size(),
+ "tab stop creation error");
+
+ if( nId != NS_rtf::LN_dxaAdd && m_nCurrentTabStopIndex >= m_aCurrentTabStops.size())
+ return;
+ static const style::TabAlign aTabAlignFromWord[] =
+ {
+ style::TabAlign_LEFT,
+ style::TabAlign_CENTER,
+ style::TabAlign_RIGHT,
+ style::TabAlign_DECIMAL,
+ style::TabAlign_LEFT
+ };
+ static const sal_Unicode aTabFillCharWord[] =
+ {
+ ' ',
+ '.',
+ '-',
+ '_',
+ '_',
+ 0xb7
+ };
+
+ switch(nId)
+ {
+ case NS_rtf::LN_dxaAdd: //set tab
+ m_aCurrentTabStops.push_back(
+ DeletableTabStop(style::TabStop(ConversionHelper::convertTwipToMM100(nValue), style::TabAlign_LEFT, ' ', ' ')));
+ break;
+ case NS_rtf::LN_dxaDel: //deleted tab
+ {
+ //mark the tab stop at the given position as deleted
+ ::std::vector<DeletableTabStop>::iterator aIt = m_aCurrentTabStops.begin();
+ ::std::vector<DeletableTabStop>::iterator aEndIt = m_aCurrentTabStops.end();
+ sal_Int32 nConverted = ConversionHelper::convertTwipToMM100(nValue);
+ for( ; aIt != aEndIt; ++aIt)
+ {
+ if( aIt->Position == nConverted )
+ {
+ aIt->bDeleted = true;
+ break;
+ }
+ }
+ }
+ break;
+ case NS_rtf::LN_TLC: //tab leading characters - for decimal tabs
+ // 0 - no leader, 1- dotted, 2 - hyphenated, 3 - single line, 4 - heavy line, 5 - middle dot
+ if( nValue >= 0 && nValue < sal::static_int_cast<sal_Int32>(sizeof(aTabFillCharWord) / sizeof (sal_Unicode)))
+ m_aCurrentTabStops[m_nCurrentTabStopIndex].FillChar = aTabFillCharWord[nValue];
+ break;
+ case NS_rtf::LN_JC: //tab justification
+ //0 - left, 1 - centered, 2 - right, 3 - decimal 4 - bar
+ if( nValue >= 0 && nValue < sal::static_int_cast<sal_Int32>(sizeof(aTabAlignFromWord) / sizeof (style::TabAlign)))
+ m_aCurrentTabStops[m_nCurrentTabStopIndex].Alignment = aTabAlignFromWord[nValue];
+ break;
+ }
+}
+
+void DomainMapper_Impl::IncorporateTabStop( const DeletableTabStop & rTabStop )
+{
+ ::std::vector<DeletableTabStop>::iterator aIt = m_aCurrentTabStops.begin();
+ ::std::vector<DeletableTabStop>::iterator aEndIt = m_aCurrentTabStops.end();
+ sal_Int32 nConverted = rTabStop.Position;
+ bool bFound = false;
+ for( ; aIt != aEndIt; ++aIt)
+ {
+ if( aIt->Position == nConverted )
+ {
+ bFound = true;
+ if( rTabStop.bDeleted )
+ m_aCurrentTabStops.erase( aIt );
+ else
+ *aIt = rTabStop;
+ break;
+ }
+ }
+ if( !bFound )
+ m_aCurrentTabStops.push_back( rTabStop );
+}
+/*-- 29.06.2006 13:35:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Sequence< style::TabStop > DomainMapper_Impl::GetCurrentTabStopAndClear()
+{
+ uno::Sequence< style::TabStop > aRet( sal_Int32( m_aCurrentTabStops.size() ) );
+ style::TabStop* pArray = aRet.getArray();
+ ::std::vector<DeletableTabStop>::const_iterator aIt = m_aCurrentTabStops.begin();
+ ::std::vector<DeletableTabStop>::const_iterator aEndIt = m_aCurrentTabStops.end();
+ sal_Int32 nDeleted = 0;
+ for(sal_Int32 nIndex = 0; aIt != aEndIt; ++aIt)
+ {
+ if(!aIt->bDeleted)
+ pArray[nIndex++] = *aIt;
+ else
+ ++nDeleted;
+ }
+ m_aCurrentTabStops.clear();
+ m_nCurrentTabStopIndex = 0;
+ if(nDeleted)
+ {
+ aRet.realloc( aRet.getLength() - nDeleted);
+ }
+ return aRet;
+}
+
+/*-- 17.07.2006 09:08:26---------------------------------------------------
+ returns a the value from the current paragraph style - if available
+ TODO: What about parent styles?
+ -----------------------------------------------------------------------*/
+uno::Any DomainMapper_Impl::GetPropertyFromStyleSheet(PropertyIds eId)
+{
+ StyleSheetEntryPtr pEntry;
+ if( m_bInStyleSheetImport )
+ pEntry = GetStyleSheetTable()->FindParentStyleSheet(::rtl::OUString());
+ else
+ pEntry =
+ GetStyleSheetTable()->FindStyleSheetByISTD(GetCurrentParaStyleId());
+ while(pEntry.get( ) )
+ {
+ //is there a tab stop set?
+ if(pEntry->pProperties)
+ {
+ PropertyMap::const_iterator aPropertyIter =
+ pEntry->pProperties->find(PropertyDefinition(eId, false ));
+ if( aPropertyIter != pEntry->pProperties->end())
+ {
+ return aPropertyIter->second;
+ }
+ }
+ //search until the property is set or no parent is available
+ pEntry = GetStyleSheetTable()->FindParentStyleSheet(pEntry->sBaseStyleIdentifier);
+ }
+ return uno::Any();
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ListsManager::Pointer DomainMapper_Impl::GetListTable()
+{
+ if(!m_pListTable)
+ m_pListTable.reset(
+ new ListsManager( m_rDMapper, m_xTextFactory ));
+ return m_pListTable;
+}
+
+
+void DomainMapper_Impl::deferBreak( BreakType deferredBreakType)
+{
+ switch (deferredBreakType)
+ {
+ case COLUMN_BREAK:
+ m_bIsColumnBreakDeferred = true;
+ break;
+ case PAGE_BREAK:
+ m_bIsPageBreakDeferred = true;
+ break;
+ default:
+ return;
+ }
+}
+
+bool DomainMapper_Impl::isBreakDeferred( BreakType deferredBreakType )
+{
+ switch (deferredBreakType)
+ {
+ case COLUMN_BREAK:
+ return m_bIsColumnBreakDeferred;
+ case PAGE_BREAK:
+ return m_bIsPageBreakDeferred;
+ default:
+ return false;
+ }
+}
+
+void DomainMapper_Impl::clearDeferredBreaks()
+{
+ m_bIsColumnBreakDeferred = false;
+ m_bIsPageBreakDeferred = false;
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void lcl_MoveBorderPropertiesToFrame(uno::Sequence<beans::PropertyValue>& rFrameProperties,
+ uno::Reference<text::XTextRange> xStartTextRange,
+ uno::Reference<text::XTextRange> xEndTextRange )
+{
+ try
+ {
+ uno::Reference<text::XTextCursor> xRangeCursor = xStartTextRange->getText()->createTextCursorByRange( xStartTextRange );
+ xRangeCursor->gotoRange( xEndTextRange, true );
+
+ uno::Reference<beans::XPropertySet> xTextRangeProperties(xRangeCursor, uno::UNO_QUERY);
+ if(!xTextRangeProperties.is())
+ return ;
+
+ PropertyIds aBorderProperties[] =
+ {
+ PROP_LEFT_BORDER,
+ PROP_RIGHT_BORDER,
+ PROP_TOP_BORDER,
+ PROP_BOTTOM_BORDER,
+ PROP_LEFT_BORDER_DISTANCE,
+ PROP_RIGHT_BORDER_DISTANCE,
+ PROP_TOP_BORDER_DISTANCE,
+ PROP_BOTTOM_BORDER_DISTANCE
+ };
+
+ sal_uInt32 nStart = rFrameProperties.getLength();
+ sal_uInt32 nBorderPropertyCount = sizeof( aBorderProperties ) / sizeof(PropertyIds);
+ rFrameProperties.realloc(nStart + nBorderPropertyCount);
+
+ beans::PropertyValue* pFrameProperties = rFrameProperties.getArray();
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ for( sal_uInt32 nProperty = 0; nProperty < nBorderPropertyCount; ++nProperty)
+ {
+ ::rtl::OUString sPropertyName = rPropNameSupplier.GetName(aBorderProperties[nProperty]);
+ pFrameProperties[nStart].Name = sPropertyName;
+ pFrameProperties[nStart].Value = xTextRangeProperties->getPropertyValue(sPropertyName);
+ if( nProperty < 4 )
+ xTextRangeProperties->setPropertyValue( sPropertyName, uno::makeAny(table::BorderLine()));
+ ++nStart;
+ }
+ rFrameProperties.realloc(nStart);
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ }
+}
+/*-- 04.01.2008 10:59:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void lcl_AddRangeAndStyle(
+ ParagraphPropertiesPtr& pToBeSavedProperties,
+ uno::Reference< text::XTextAppend > xTextAppend,
+ PropertyMapPtr pPropertyMap)
+{
+ uno::Reference<text::XParagraphCursor> xParaCursor(
+ xTextAppend->createTextCursorByRange( xTextAppend->getEnd()), uno::UNO_QUERY_THROW );
+ pToBeSavedProperties->SetEndingRange(xParaCursor->getStart());
+ xParaCursor->gotoStartOfParagraph( false );
+
+ pToBeSavedProperties->SetStartingRange(xParaCursor->getStart());
+ if(pPropertyMap)
+ {
+ PropertyMap::iterator aParaStyleIter = pPropertyMap->find(PropertyDefinition( PROP_PARA_STYLE_NAME, false ) );
+ if( aParaStyleIter != pPropertyMap->end())
+ {
+ ::rtl::OUString sName;
+ aParaStyleIter->second >>= sName;
+ pToBeSavedProperties->SetParaStyleName(sName);
+ }
+ }
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+//define some default frame width - 0cm ATM: this allow the frame to be wrapped around the text
+#define DEFAULT_FRAME_MIN_WIDTH 0
+
+void DomainMapper_Impl::finishParagraph( PropertyMapPtr pPropertyMap )
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("finishParagraph");
+#endif
+
+ ParagraphPropertyMap* pParaContext = dynamic_cast< ParagraphPropertyMap* >( pPropertyMap.get() );
+ TextAppendContext& rAppendContext = m_aTextAppendStack.top();
+ uno::Reference< text::XTextAppend > xTextAppend = rAppendContext.xTextAppend;
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->attribute("isTextAppend", xTextAppend.is());
+#endif
+
+ if(xTextAppend.is() && ! getTableManager( ).isIgnore() && pParaContext != NULL)
+ {
+ try
+ {
+ /*the following combinations of previous and current frame settings can occur:
+ (1) - no old frame and no current frame -> no special action
+ (2) - no old frame and current DropCap -> save DropCap for later use, don't call finishParagraph
+ remove character properties of the DropCap?
+ (3) - no old frame and current Frame -> save Frame for later use
+ (4) - old DropCap and no current frame -> add DropCap to the properties of the finished paragraph, delete previous setting
+ (5) - old DropCap and current frame -> add DropCap to the properties of the finished paragraph, save current frame settings
+ (6) - old Frame and new DropCap -> add old Frame, save DropCap for later use
+ (7) - old Frame and new same Frame -> continue
+ (8) - old Frame and new different Frame -> add old Frame, save new Frame for later use
+ (9) - old Frame and no current frame -> add old Frame, delete previous settings
+
+ old _and_ new DropCap must not occur
+ */
+
+ bool bIsDropCap =
+ pParaContext->IsFrameMode() &&
+ sal::static_int_cast<Id>(pParaContext->GetDropCap()) != NS_ooxml::LN_Value_wordprocessingml_ST_DropCap_none;
+
+ style::DropCapFormat aDrop;
+ ParagraphPropertiesPtr pToBeSavedProperties;
+ bool bKeepLastParagraphProperties = false;
+ if( bIsDropCap )
+ {
+ uno::Reference<text::XParagraphCursor> xParaCursor(
+ xTextAppend->createTextCursorByRange(xTextAppend->getEnd()), uno::UNO_QUERY_THROW);
+ //select paragraph
+ xParaCursor->gotoStartOfParagraph( true );
+ uno::Reference< beans::XPropertyState > xParaProperties( xParaCursor, uno::UNO_QUERY_THROW );
+ xParaProperties->setPropertyToDefault(rPropNameSupplier.GetName(PROP_CHAR_ESCAPEMENT));
+ xParaProperties->setPropertyToDefault(rPropNameSupplier.GetName(PROP_CHAR_HEIGHT));
+ //handles (2) and part of (6)
+ pToBeSavedProperties.reset( new ParagraphProperties(*pParaContext) );
+ sal_Int32 nCount = xParaCursor->getString().getLength();
+ pToBeSavedProperties->SetDropCapLength(nCount > 0 && nCount < 255 ? (sal_Int8)nCount : 1);
+ }
+ if( rAppendContext.pLastParagraphProperties.get() )
+ {
+ if( sal::static_int_cast<Id>(rAppendContext.pLastParagraphProperties->GetDropCap()) != NS_ooxml::LN_Value_wordprocessingml_ST_DropCap_none)
+ {
+ //handles (4) and part of (5)
+ //create a DropCap property, add it to the property sequence of finishParagraph
+ sal_Int32 nLines = rAppendContext.pLastParagraphProperties->GetLines();
+ aDrop.Lines = nLines > 0 && nLines < 254 ? (sal_Int8)++nLines : 2;
+ aDrop.Count = rAppendContext.pLastParagraphProperties->GetDropCapLength();
+ aDrop.Distance = 0; //TODO: find distance value
+ //completes (5)
+ if( pParaContext->IsFrameMode() )
+ pToBeSavedProperties.reset( new ParagraphProperties(*pParaContext) );
+ }
+ else if(*rAppendContext.pLastParagraphProperties == *pParaContext )
+ {
+ //handles (7)
+ rAppendContext.pLastParagraphProperties->SetEndingRange(xTextAppend->getEnd());
+ bKeepLastParagraphProperties = true;
+ }
+ else
+ {
+ //handles (8)(9) and completes (6)
+ try
+ {
+ //
+ StyleSheetEntryPtr pParaStyle =
+ m_pStyleSheetTable->FindStyleSheetByConvertedStyleName(rAppendContext.pLastParagraphProperties->GetParaStyleName());
+
+ uno::Sequence< beans::PropertyValue > aFrameProperties(pParaStyle ? 15: 0);
+ if ( pParaStyle.get( ) )
+ {
+ const ParagraphProperties* pStyleProperties = dynamic_cast<const ParagraphProperties*>( pParaStyle->pProperties.get() );
+ beans::PropertyValue* pFrameProperties = aFrameProperties.getArray();
+ pFrameProperties[0].Name = rPropNameSupplier.GetName(PROP_WIDTH);
+ pFrameProperties[1].Name = rPropNameSupplier.GetName(PROP_HEIGHT);
+ pFrameProperties[2].Name = rPropNameSupplier.GetName(PROP_SIZE_TYPE);
+ pFrameProperties[3].Name = rPropNameSupplier.GetName(PROP_WIDTH_TYPE);
+ pFrameProperties[4].Name = rPropNameSupplier.GetName(PROP_HORI_ORIENT);
+ pFrameProperties[5].Name = rPropNameSupplier.GetName(PROP_HORI_ORIENT_POSITION);
+ pFrameProperties[6].Name = rPropNameSupplier.GetName(PROP_HORI_ORIENT_RELATION);
+ pFrameProperties[7].Name = rPropNameSupplier.GetName(PROP_VERT_ORIENT);
+ pFrameProperties[8].Name = rPropNameSupplier.GetName(PROP_VERT_ORIENT_POSITION);
+ pFrameProperties[9].Name = rPropNameSupplier.GetName(PROP_VERT_ORIENT_RELATION);
+ pFrameProperties[10].Name = rPropNameSupplier.GetName(PROP_SURROUND);
+ pFrameProperties[11].Name = rPropNameSupplier.GetName(PROP_LEFT_MARGIN);
+ pFrameProperties[12].Name = rPropNameSupplier.GetName(PROP_RIGHT_MARGIN);
+ pFrameProperties[13].Name = rPropNameSupplier.GetName(PROP_TOP_MARGIN);
+ pFrameProperties[14].Name = rPropNameSupplier.GetName(PROP_BOTTOM_MARGIN);
+ sal_Int32 nWidth =
+ rAppendContext.pLastParagraphProperties->Getw() > 0 ?
+ rAppendContext.pLastParagraphProperties->Getw() :
+ pStyleProperties->Getw();
+ bool bAutoWidth = nWidth < 1;
+ if( bAutoWidth )
+ nWidth = DEFAULT_FRAME_MIN_WIDTH;
+ pFrameProperties[0].Value <<= nWidth;
+ pFrameProperties[1].Value <<=
+ rAppendContext.pLastParagraphProperties->Geth() > 0 ?
+ rAppendContext.pLastParagraphProperties->Geth() :
+ pStyleProperties->Geth();
+ pFrameProperties[2].Value <<= sal_Int16(
+ rAppendContext.pLastParagraphProperties->GethRule() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GethRule() :
+ pStyleProperties->GethRule() >=0 ? pStyleProperties->GethRule() : text::SizeType::VARIABLE);
+
+ pFrameProperties[3].Value <<= bAutoWidth ? text::SizeType::MIN : text::SizeType::FIX;
+
+ sal_Int16 nHoriOrient = sal_Int16(
+ rAppendContext.pLastParagraphProperties->GetxAlign() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GetxAlign() :
+ pStyleProperties->GetxAlign() >= 0 ? pStyleProperties->GetxAlign() : text::HoriOrientation::NONE );
+ pFrameProperties[4].Value <<= nHoriOrient;
+
+ pFrameProperties[5].Value <<=
+ rAppendContext.pLastParagraphProperties->IsxValid() ?
+ rAppendContext.pLastParagraphProperties->Getx() : pStyleProperties->Getx();
+ pFrameProperties[6].Value <<= sal_Int16(
+ rAppendContext.pLastParagraphProperties->GethAnchor() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GethAnchor() :
+ pStyleProperties->GethAnchor() );
+
+ sal_Int16 nVertOrient = sal_Int16(
+ rAppendContext.pLastParagraphProperties->GetyAlign() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GetyAlign() :
+ pStyleProperties->GetyAlign() >= 0 ? pStyleProperties->GetyAlign() : text::VertOrientation::NONE );
+ pFrameProperties[7].Value <<= nVertOrient;
+
+ pFrameProperties[8].Value <<=
+ rAppendContext.pLastParagraphProperties->IsyValid() ?
+ rAppendContext.pLastParagraphProperties->Gety() : pStyleProperties->Gety();
+ pFrameProperties[9].Value <<= sal_Int16(
+ rAppendContext.pLastParagraphProperties->GetvAnchor() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GetvAnchor() :
+ pStyleProperties->GetvAnchor() );
+
+ pFrameProperties[10].Value <<= text::WrapTextMode(
+ rAppendContext.pLastParagraphProperties->GetWrap() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GetWrap() :
+ pStyleProperties->GetWrap());
+
+ sal_Int32 nBottomDist;
+ sal_Int32 nTopDist = nBottomDist =
+ rAppendContext.pLastParagraphProperties->GethSpace() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GethSpace() :
+ pStyleProperties->GethSpace();
+
+ pFrameProperties[11].Value <<= nVertOrient == text::VertOrientation::TOP ? 0 : nTopDist;
+ pFrameProperties[12].Value <<= nVertOrient == text::VertOrientation::BOTTOM ? 0 : nBottomDist;
+
+ sal_Int32 nRightDist;
+ sal_Int32 nLeftDist = nRightDist =
+ rAppendContext.pLastParagraphProperties->GetvSpace() >= 0 ?
+ rAppendContext.pLastParagraphProperties->GetvSpace() :
+ pStyleProperties->GetvSpace() >= 0 ? pStyleProperties->GetvSpace() : 0;
+ pFrameProperties[13].Value <<= nHoriOrient == text::HoriOrientation::LEFT ? 0 : nLeftDist;
+ pFrameProperties[14].Value <<= nHoriOrient == text::HoriOrientation::RIGHT ? 0 : nRightDist;
+
+ lcl_MoveBorderPropertiesToFrame(aFrameProperties,
+ rAppendContext.pLastParagraphProperties->GetStartingRange(),
+ rAppendContext.pLastParagraphProperties->GetEndingRange());
+ }
+ //frame conversion has to be executed after table conversion
+ RegisterFrameConversion(
+ rAppendContext.pLastParagraphProperties->GetStartingRange(),
+ rAppendContext.pLastParagraphProperties->GetEndingRange(),
+ aFrameProperties );
+ // next frame follows directly
+ if( pParaContext->IsFrameMode() )
+ {
+ pToBeSavedProperties.reset( new ParagraphProperties(*pParaContext) );
+ lcl_AddRangeAndStyle(pToBeSavedProperties, xTextAppend, pPropertyMap);
+ }
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ }
+ }
+
+ }
+ else //
+ {
+ // (1) doesn't need handling
+ //
+ if( !bIsDropCap && pParaContext->IsFrameMode() )
+ {
+ pToBeSavedProperties.reset( new ParagraphProperties(*pParaContext) );
+ lcl_AddRangeAndStyle(pToBeSavedProperties, xTextAppend, pPropertyMap);
+ }
+ }
+ uno::Sequence< beans::PropertyValue > aProperties;
+ if( pPropertyMap.get() )
+ {
+ aProperties = pPropertyMap->GetPropertyValues();
+ }
+ if( !bIsDropCap )
+ {
+ if( aDrop.Lines > 1 )
+ {
+ sal_uInt32 nLength = aProperties.getLength();
+ aProperties.realloc( nLength + 1 );
+ aProperties[nLength].Value <<= aDrop;
+ aProperties[nLength].Name = rPropNameSupplier.GetName(PROP_DROP_CAP_FORMAT);
+ }
+ uno::Reference< text::XTextRange > xTextRange =
+ xTextAppend->finishParagraph( aProperties );
+ getTableManager( ).handle(xTextRange);
+
+ // Set the anchor of the objects to the created paragraph
+ while ( m_aAnchoredStack.size( ) > 0 && !m_bIsInShape )
+ {
+ uno::Reference< text::XTextContent > xObj = m_aAnchoredStack.top( );
+ try
+ {
+#if DEBUG
+ rtl::OUString sText( xTextRange->getString( ) );
+#endif
+ xObj->attach( xTextRange );
+ }
+ catch ( uno::RuntimeException& )
+ {
+ // this is normal: the shape is already attached
+ }
+ m_aAnchoredStack.pop( );
+ }
+
+ // Get the end of paragraph character inserted
+ uno::Reference< text::XTextCursor > xCur = xTextRange->getText( )->createTextCursor( );
+ xCur->gotoEnd( false );
+ xCur->goLeft( 1 , true );
+ uno::Reference< text::XTextRange > xParaEnd( xCur, uno::UNO_QUERY );
+ CheckParaRedline( xParaEnd );
+
+ // Remove the last empty section paragraph if needed
+ if ( m_bIsLastParaInSection && !m_bParaChanged )
+ {
+ RemoveLastParagraph( );
+ m_bIsLastParaInSection = false;
+ }
+
+ m_bParaChanged = false;
+ }
+ if( !bKeepLastParagraphProperties )
+ rAppendContext.pLastParagraphProperties = pToBeSavedProperties;
+ }
+ catch(const lang::IllegalArgumentException& rIllegal)
+ {
+ (void)rIllegal;
+ OSL_ENSURE( false, "IllegalArgumentException in DomainMapper_Impl::finishParagraph" );
+ }
+ catch(const uno::Exception& rEx)
+ {
+ (void)rEx;
+ //OSL_ENSURE( false, "ArgumentException in DomainMapper_Impl::finishParagraph" );
+ }
+ }
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("finishParagraph");
+#endif
+}
+/*-------------------------------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+util::DateTime lcl_DateStringToDateTime( const ::rtl::OUString& rDateTime )
+{
+ util::DateTime aDateTime;
+ //xsd::DateTime in the format [-]CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm] example: 2008-01-21T10:42:00Z
+ //OUString getToken( sal_Int32 token, sal_Unicode cTok, sal_Int32& index ) const SAL_THROW(())
+ sal_Int32 nIndex = 0;
+ ::rtl::OUString sDate = rDateTime.getToken( 0, 'T', nIndex );
+ ::rtl::OUString sTime = rDateTime.getToken( 0, 'Z', nIndex );
+ nIndex = 0;
+ aDateTime.Year = sal_uInt16( sDate.getToken( 0, '-', nIndex ).toInt32() );
+ aDateTime.Month = sal_uInt16( sDate.getToken( 0, '-', nIndex ).toInt32() );
+ aDateTime.Day = sal_uInt16( sDate.copy( nIndex ).toInt32() );
+
+ nIndex = 0;
+ aDateTime.Hours = sal_uInt16( sTime.getToken( 0, ':', nIndex ).toInt32() );
+ aDateTime.Minutes = sal_uInt16( sTime.getToken( 0, ':', nIndex ).toInt32() );
+ aDateTime.Seconds = sal_uInt16( sTime.copy( nIndex ).toInt32() );
+
+ return aDateTime;
+}
+void DomainMapper_Impl::appendTextPortion( const ::rtl::OUString& rString, PropertyMapPtr pPropertyMap )
+{
+ uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ if(xTextAppend.is() && ! getTableManager( ).isIgnore())
+ {
+ try
+ {
+ uno::Reference< text::XTextRange > xTextRange =
+ xTextAppend->appendTextPortion
+ (rString, pPropertyMap->GetPropertyValues());
+ CheckRedline( xTextRange );
+ m_bParaChanged = true;
+
+ //getTableManager( ).handle(xTextRange);
+ }
+ catch(const lang::IllegalArgumentException& rEx)
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "IllegalArgumentException in DomainMapper_Impl::appendTextPortion" );
+ }
+ catch(const uno::Exception& rEx)
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "Exception in DomainMapper_Impl::appendTextPortion" );
+ }
+ }
+}
+/*-- 02.11.2006 12:08:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::appendTextContent(
+ const uno::Reference< text::XTextContent > xContent,
+ const uno::Sequence< beans::PropertyValue > xPropertyValues
+ )
+{
+ uno::Reference< text::XTextAppendAndConvert > xTextAppendAndConvert( m_aTextAppendStack.top().xTextAppend, uno::UNO_QUERY );
+ OSL_ENSURE( xTextAppendAndConvert.is(), "trying to append a text content without XTextAppendAndConvert" );
+ if(xTextAppendAndConvert.is() && ! getTableManager( ).isIgnore())
+ {
+ try
+ {
+ xTextAppendAndConvert->appendTextContent( xContent, xPropertyValues );
+ }
+ catch(const lang::IllegalArgumentException& )
+ {
+ }
+ catch(const uno::Exception& )
+ {
+ }
+ }
+}
+
+/*-- 24.04.2008 08:38:07---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::appendOLE( const ::rtl::OUString& rStreamName, OLEHandlerPtr pOLEHandler )
+{
+ static const rtl::OUString sEmbeddedService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextEmbeddedObject"));
+ try
+ {
+ uno::Reference< text::XTextContent > xOLE( m_xTextFactory->createInstance(sEmbeddedService), uno::UNO_QUERY_THROW );
+ uno::Reference< beans::XPropertySet > xOLEProperties(xOLE, uno::UNO_QUERY_THROW);
+
+ xOLEProperties->setPropertyValue(PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_STREAM_NAME ),
+ uno::makeAny( rStreamName ));
+ awt::Size aSize = pOLEHandler->getSize();
+ if( !aSize.Width )
+ aSize.Width = 1000;
+ if( !aSize.Height )
+ aSize.Height = 1000;
+ xOLEProperties->setPropertyValue(PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_WIDTH ),
+ uno::makeAny(aSize.Width));
+ xOLEProperties->setPropertyValue(PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_HEIGHT ),
+ uno::makeAny(aSize.Height));
+
+ uno::Reference< graphic::XGraphic > xGraphic = pOLEHandler->getReplacement();
+ xOLEProperties->setPropertyValue(PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_GRAPHIC ),
+ uno::makeAny(xGraphic));
+
+ //
+ appendTextContent( xOLE, uno::Sequence< beans::PropertyValue >() );
+
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "Exception in creation of OLE object" );
+ }
+
+}
+/*-- 14.12.2006 12:26:00---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< beans::XPropertySet > DomainMapper_Impl::appendTextSectionAfter(
+ uno::Reference< text::XTextRange >& xBefore )
+{
+ uno::Reference< beans::XPropertySet > xRet;
+ uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ if(xTextAppend.is())
+ {
+ try
+ {
+ uno::Reference< text::XParagraphCursor > xCursor(
+ xTextAppend->createTextCursorByRange( xBefore ), uno::UNO_QUERY_THROW);
+ //the cursor has been moved to the end of the paragraph because of the appendTextPortion() calls
+ xCursor->gotoStartOfParagraph( false );
+ xCursor->gotoEnd( true );
+ //the paragraph after this new section is already inserted
+ xCursor->goLeft(1, true);
+ static const rtl::OUString sSectionService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextSection"));
+ uno::Reference< text::XTextContent > xSection( m_xTextFactory->createInstance(sSectionService), uno::UNO_QUERY_THROW );
+ xSection->attach( uno::Reference< text::XTextRange >( xCursor, uno::UNO_QUERY_THROW) );
+ xRet = uno::Reference< beans::XPropertySet > (xSection, uno::UNO_QUERY );
+ }
+ catch(const uno::Exception& )
+ {
+ }
+
+ }
+
+ return xRet;
+}
+/*-- 02.11.2006 12:08:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushPageHeader(SectionPropertyMap::PageType eType)
+{
+ //get the section context
+ PropertyMapPtr pContext = DomainMapper_Impl::GetTopContextOfType(CONTEXT_SECTION);
+ //ask for the header name of the given type
+ SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
+ if(pSectionContext)
+ {
+ uno::Reference< beans::XPropertySet > xPageStyle =
+ pSectionContext->GetPageStyle(
+ GetPageStyles(),
+ m_xTextFactory,
+ eType == SectionPropertyMap::PAGE_FIRST );
+ try
+ {
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ //switch on header use
+ xPageStyle->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HEADER_IS_ON),
+ uno::makeAny(sal_True) );
+ // if a left header is available then header are not shared
+ bool bLeft = eType == SectionPropertyMap::PAGE_LEFT;
+ if( bLeft )
+ xPageStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_HEADER_IS_SHARED), uno::makeAny( false ));
+
+ //set the interface
+ uno::Reference< text::XText > xHeaderText;
+ xPageStyle->getPropertyValue(rPropNameSupplier.GetName( bLeft ? PROP_HEADER_TEXT_LEFT : PROP_HEADER_TEXT) ) >>= xHeaderText;
+ m_aTextAppendStack.push( uno::Reference< text::XTextAppend >( xHeaderText, uno::UNO_QUERY_THROW));
+ }
+ catch( uno::Exception& )
+ {
+ }
+ }
+}
+/*-- 24.07.2006 09:41:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushPageFooter(SectionPropertyMap::PageType eType)
+{
+ //get the section context
+ PropertyMapPtr pContext = DomainMapper_Impl::GetTopContextOfType(CONTEXT_SECTION);
+ //ask for the footer name of the given type
+ SectionPropertyMap* pSectionContext = dynamic_cast< SectionPropertyMap* >( pContext.get() );
+ if(pSectionContext)
+ {
+ uno::Reference< beans::XPropertySet > xPageStyle =
+ pSectionContext->GetPageStyle(
+ GetPageStyles(),
+ m_xTextFactory,
+ eType == SectionPropertyMap::PAGE_FIRST );
+ try
+ {
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ //switch on footer use
+ xPageStyle->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_FOOTER_IS_ON),
+ uno::makeAny(sal_True) );
+ // if a left header is available then footer is not shared
+ bool bLeft = eType == SectionPropertyMap::PAGE_LEFT;
+ if( bLeft )
+ xPageStyle->setPropertyValue(rPropNameSupplier.GetName(PROP_FOOTER_IS_SHARED), uno::makeAny( false ));
+ //set the interface
+ uno::Reference< text::XText > xFooterText;
+ xPageStyle->getPropertyValue(rPropNameSupplier.GetName( bLeft ? PROP_FOOTER_TEXT_LEFT : PROP_FOOTER_TEXT) ) >>= xFooterText;
+ m_aTextAppendStack.push(uno::Reference< text::XTextAppend >( xFooterText, uno::UNO_QUERY_THROW ));
+ }
+ catch( uno::Exception& )
+ {
+ }
+ }
+}
+/*-- 24.07.2006 09:41:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PopPageHeaderFooter()
+{
+ //header and footer always have an empty paragraph at the end
+ //this has to be removed
+ RemoveLastParagraph( );
+ m_aTextAppendStack.pop();
+}
+/*-- 24.05.2007 14:22:28---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushFootOrEndnote( bool bIsFootnote )
+{
+ try
+ {
+ PropertyMapPtr pTopContext = GetTopContext();
+ uno::Reference< text::XText > xFootnoteText( GetTextFactory()->createInstance(
+ bIsFootnote ?
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Footnote") ) : ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Endnote") )),
+ uno::UNO_QUERY_THROW );
+ uno::Reference< text::XFootnote > xFootnote( xFootnoteText, uno::UNO_QUERY_THROW );
+ pTopContext->SetFootnote( xFootnote );
+ if( pTopContext->GetFootnoteSymbol() != 0)
+ {
+ xFootnote->setLabel( ::rtl::OUString( pTopContext->GetFootnoteSymbol() ) );
+ }
+ FontTablePtr pFontTable = GetFontTable();
+ uno::Sequence< beans::PropertyValue > aFontProperties;
+ if( pFontTable && pTopContext->GetFootnoteFontId() >= 0 && pFontTable->size() > (size_t)pTopContext->GetFootnoteFontId() )
+ {
+ const FontEntry::Pointer_t pFontEntry(pFontTable->getFontEntry(sal_uInt32(pTopContext->GetFootnoteFontId())));
+ PropertyMapPtr aFontProps( new PropertyMap );
+ aFontProps->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( pFontEntry->sFontName ));
+ aFontProps->Insert(PROP_CHAR_FONT_CHAR_SET, true, uno::makeAny( (sal_Int16)pFontEntry->nTextEncoding ));
+ aFontProps->Insert(PROP_CHAR_FONT_PITCH, true, uno::makeAny( pFontEntry->nPitchRequest ));
+ aFontProperties = aFontProps->GetPropertyValues();
+ }
+ else if(pTopContext->GetFootnoteFontName().getLength())
+ {
+ PropertyMapPtr aFontProps( new PropertyMap );
+ aFontProps->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( pTopContext->GetFootnoteFontName() ));
+ aFontProperties = aFontProps->GetPropertyValues();
+ }
+ appendTextContent( uno::Reference< text::XTextContent >( xFootnoteText, uno::UNO_QUERY_THROW ), aFontProperties );
+ m_aTextAppendStack.push(uno::Reference< text::XTextAppend >( xFootnoteText, uno::UNO_QUERY_THROW ));
+
+ // Redlines for the footnote anchor
+ CheckRedline( xFootnote->getAnchor( ) );
+ }
+ catch( uno::Exception& )
+ {
+ OSL_ENSURE( false, "exception in PushFootOrEndnote" );
+ }
+}
+
+void DomainMapper_Impl::CreateRedline( uno::Reference< text::XTextRange > xRange, RedlineParamsPtr& pRedline )
+{
+ if ( pRedline.get( ) )
+ {
+ try
+ {
+ ::rtl::OUString sType;
+ PropertyNameSupplier & rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier( );
+ switch ( pRedline->m_nToken & 0xffff )
+ {
+ case ooxml::OOXML_mod:
+ sType = rPropNameSupplier.GetName( PROP_FORMAT );
+ break;
+ case ooxml::OOXML_ins:
+ sType = rPropNameSupplier.GetName( PROP_INSERT );
+ break;
+ case ooxml::OOXML_del:
+ sType = rPropNameSupplier.GetName( PROP_DELETE );
+ break;
+ }
+ uno::Reference < text::XRedline > xRedline( xRange, uno::UNO_QUERY_THROW );
+ beans::PropertyValues aRedlineProperties( 2 );
+ beans::PropertyValue * pRedlineProperties = aRedlineProperties.getArray( );
+ pRedlineProperties[0].Name = rPropNameSupplier.GetName( PROP_REDLINE_AUTHOR );
+ pRedlineProperties[0].Value <<= pRedline->m_sAuthor;
+ pRedlineProperties[1].Name = rPropNameSupplier.GetName( PROP_REDLINE_DATE_TIME );
+ pRedlineProperties[1].Value <<= lcl_DateStringToDateTime( pRedline->m_sDate );
+
+ xRedline->makeRedline( sType, aRedlineProperties );
+ }
+ catch( const uno::Exception & rEx )
+ {
+ ( void ) rEx;
+ OSL_ENSURE( false, "Exception in makeRedline" );
+ }
+ }
+}
+
+void DomainMapper_Impl::CheckParaRedline( uno::Reference< text::XTextRange > xRange )
+{
+ if ( m_pParaRedline.get( ) )
+ {
+ CreateRedline( xRange, m_pParaRedline );
+ ResetParaRedline( );
+ }
+}
+
+void DomainMapper_Impl::CheckRedline( uno::Reference< text::XTextRange > xRange )
+{
+ vector<RedlineParamsPtr>::iterator pIt = m_aRedlines.begin( );
+ vector< RedlineParamsPtr > aCleaned;
+ for (; pIt != m_aRedlines.end( ); pIt++ )
+ {
+ CreateRedline( xRange, *pIt );
+
+ // Adding the non-mod redlines to the temporary vector
+ if ( pIt->get( ) && ( ( *pIt )->m_nToken & 0xffff ) != ooxml::OOXML_mod )
+ {
+ aCleaned.push_back( *pIt );
+ }
+ }
+
+ m_aRedlines.swap( aCleaned );
+}
+
+void DomainMapper_Impl::StartParaChange( )
+{
+ m_bIsParaChange = true;
+}
+
+void DomainMapper_Impl::EndParaChange( )
+{
+ m_bIsParaChange = false;
+}
+
+/*-- 22.12.2008 13:45:15---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushAnnotation()
+{
+ try
+ {
+ PropertyMapPtr pTopContext = GetTopContext();
+ m_xAnnotationField = uno::Reference< beans::XPropertySet >( GetTextFactory()->createInstance(
+ ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextField.Annotation") ) ),
+ uno::UNO_QUERY_THROW );
+ uno::Reference< text::XText > xAnnotationText;
+ m_xAnnotationField->getPropertyValue(::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("TextRange"))) >>= xAnnotationText;
+ m_aTextAppendStack.push(uno::Reference< text::XTextAppend >( xAnnotationText, uno::UNO_QUERY_THROW ));
+ }
+ catch( uno::Exception& )
+ {
+ OSL_ENSURE( false, "exception in PushFootOrEndnote" );
+ }
+}
+/*-- 24.05.2007 14:22:29---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PopFootOrEndnote()
+{
+ m_aTextAppendStack.pop();
+}
+/*-- 22.12.2008 13:45:15---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PopAnnotation()
+{
+ m_aTextAppendStack.pop();
+ uno::Sequence< beans::PropertyValue > aEmptyProperties;
+ appendTextContent( uno::Reference< text::XTextContent >( m_xAnnotationField, uno::UNO_QUERY_THROW ), aEmptyProperties );
+ m_xAnnotationField.clear();
+
+}
+
+void DomainMapper_Impl::PushShapeContext( const uno::Reference< drawing::XShape > xShape )
+{
+ m_bIsInShape = true;
+ try
+ {
+ // Add the shape to the text append stack
+ m_aTextAppendStack.push( uno::Reference< text::XTextAppend >( xShape, uno::UNO_QUERY_THROW ) );
+ m_bShapeContextAdded = true;
+
+ // Add the shape to the anchored objects stack
+ uno::Reference< text::XTextContent > xTxtContent( xShape, uno::UNO_QUERY_THROW );
+ m_aAnchoredStack.push( xTxtContent );
+
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ uno::Reference< beans::XPropertySet > xProps( xShape, uno::UNO_QUERY_THROW );
+ xProps->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_ANCHOR_TYPE ),
+ uno::makeAny( text::TextContentAnchorType_AT_PARAGRAPH ) );
+ xProps->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_OPAQUE ),
+ uno::makeAny( true ) );
+ }
+ catch ( const uno::Exception& e )
+ {
+#if DEBUG
+ clog << "Exception when adding shape: ";
+ clog << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr( );
+ clog << endl;
+#endif
+ }
+}
+
+/*-- 20.03.2008 09:01:59---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PopShapeContext()
+{
+ if ( m_bShapeContextAdded )
+ {
+ m_aTextAppendStack.pop();
+ m_bShapeContextAdded = false;
+ }
+ m_bIsInShape = false;
+}
+/*-- 12.09.2006 08:07:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString lcl_FindQuotedText( const ::rtl::OUString& rCommand,
+ const sal_Char* cStartQuote, const sal_Unicode uEndQuote )
+{
+ ::rtl::OUString sRet;
+ ::rtl::OUString sStartQuote( ::rtl::OUString::createFromAscii(cStartQuote) );
+ sal_Int32 nStartIndex = rCommand.indexOf( sStartQuote );
+ if( nStartIndex >= 0 )
+ {
+ sal_Int32 nStartLength = sStartQuote.getLength();
+ sal_Int32 nEndIndex = rCommand.indexOf( uEndQuote, nStartIndex + nStartLength);
+ if( nEndIndex > nStartIndex )
+ {
+ sRet = rCommand.copy( nStartIndex + nStartLength, nEndIndex - nStartIndex - nStartLength);
+ }
+ }
+ return sRet;
+
+}
+/*-- 08.09.2006 14:05:17---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int16 lcl_ParseNumberingType( const ::rtl::OUString& rCommand )
+{
+ sal_Int16 nRet = style::NumberingType::PAGE_DESCRIPTOR;
+
+ // The command looks like: " PAGE \* Arabic "
+ ::rtl::OUString sNumber = lcl_FindQuotedText(rCommand, "\\* ", ' ');
+
+ if( sNumber.getLength() )
+ {
+ //todo: might make sense to hash this list, too
+ struct NumberingPairs
+ {
+ const sal_Char* cWordName;
+ sal_Int16 nType;
+ };
+ static const NumberingPairs aNumberingPairs[] =
+ {
+ {"Arabic", style::NumberingType::ARABIC}
+ ,{"ROMAN", style::NumberingType::ROMAN_UPPER}
+ ,{"roman", style::NumberingType::ROMAN_LOWER}
+ ,{"ALPHABETIC", style::NumberingType::CHARS_UPPER_LETTER}
+ ,{"alphabetic", style::NumberingType::CHARS_LOWER_LETTER}
+ ,{"CircleNum", style::NumberingType::CIRCLE_NUMBER}
+ ,{"ThaiArabic", style::NumberingType::CHARS_THAI}
+ ,{"ThaiCardText", style::NumberingType::CHARS_THAI}
+ ,{"ThaiLetter", style::NumberingType::CHARS_THAI}
+// ,{"SBCHAR", style::NumberingType::}
+// ,{"DBCHAR", style::NumberingType::}
+// ,{"DBNUM1", style::NumberingType::}
+// ,{"DBNUM2", style::NumberingType::}
+// ,{"DBNUM3", style::NumberingType::}
+// ,{"DBNUM4", style::NumberingType::}
+ ,{"Aiueo", style::NumberingType::AIU_FULLWIDTH_JA}
+ ,{"Iroha", style::NumberingType::IROHA_FULLWIDTH_JA}
+// ,{"ZODIAC1", style::NumberingType::}
+// ,{"ZODIAC2", style::NumberingType::}
+// ,{"ZODIAC3", style::NumberingType::}
+// ,{"CHINESENUM1", style::NumberingType::}
+// ,{"CHINESENUM2", style::NumberingType::}
+// ,{"CHINESENUM3", style::NumberingType::}
+ ,{"ArabicAlpha", style::NumberingType::CHARS_ARABIC}
+ ,{"ArabicAbjad", style::NumberingType::FULLWIDTH_ARABIC}
+/* possible values:
+style::NumberingType::
+
+ CHARS_UPPER_LETTER_N
+ CHARS_LOWER_LETTER_N
+ TRANSLITERATION
+ NATIVE_NUMBERING
+ CIRCLE_NUMBER
+ NUMBER_LOWER_ZH
+ NUMBER_UPPER_ZH
+ NUMBER_UPPER_ZH_TW
+ TIAN_GAN_ZH
+ DI_ZI_ZH
+ NUMBER_TRADITIONAL_JA
+ AIU_HALFWIDTH_JA
+ IROHA_HALFWIDTH_JA
+ NUMBER_UPPER_KO
+ NUMBER_HANGUL_KO
+ HANGUL_JAMO_KO
+ HANGUL_SYLLABLE_KO
+ HANGUL_CIRCLED_JAMO_KO
+ HANGUL_CIRCLED_SYLLABLE_KO
+ CHARS_HEBREW
+ CHARS_NEPALI
+ CHARS_KHMER
+ CHARS_LAO
+ CHARS_TIBETAN
+ CHARS_CYRILLIC_UPPER_LETTER_BG
+ CHARS_CYRILLIC_LOWER_LETTER_BG
+ CHARS_CYRILLIC_UPPER_LETTER_N_BG
+ CHARS_CYRILLIC_LOWER_LETTER_N_BG
+ CHARS_CYRILLIC_UPPER_LETTER_RU
+ CHARS_CYRILLIC_LOWER_LETTER_RU
+ CHARS_CYRILLIC_UPPER_LETTER_N_RU
+ CHARS_CYRILLIC_LOWER_LETTER_N_RU
+ CHARS_CYRILLIC_UPPER_LETTER_SR
+ CHARS_CYRILLIC_LOWER_LETTER_SR
+ CHARS_CYRILLIC_UPPER_LETTER_N_SR
+ CHARS_CYRILLIC_LOWER_LETTER_N_SR*/
+
+ };
+ for( sal_uInt32 nNum = 0; nNum < sizeof(aNumberingPairs)/sizeof( NumberingPairs ); ++nNum)
+ {
+ if( /*sCommand*/sNumber.equalsAscii(aNumberingPairs[nNum].cWordName ))
+ {
+ nRet = aNumberingPairs[nNum].nType;
+ break;
+ }
+ }
+
+ }
+ return nRet;
+}
+/*-- 08.09.2006 13:52:09---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OUString lcl_ParseFormat( const ::rtl::OUString& rCommand )
+{
+ // The command looks like: " DATE \@ "dd MMMM yyyy"
+ return lcl_FindQuotedText(rCommand, "\\@ \"", '\"');
+}
+/*-- 19.09.2006 10:01:20---------------------------------------------------
+extract a parameter (with or without quotes) between the command and the following backslash
+ -----------------------------------------------------------------------*/
+::rtl::OUString lcl_ExtractParameter(const ::rtl::OUString& rCommand, sal_Int32 nCommandLength )
+{
+ sal_Int32 nStartIndex = nCommandLength;
+ sal_Int32 nEndIndex = 0;
+ sal_Int32 nQuoteIndex = rCommand.indexOf( '\"', nStartIndex);
+ if( nQuoteIndex >= 0)
+ {
+ nStartIndex = nQuoteIndex + 1;
+ nEndIndex = rCommand.indexOf( '\"', nStartIndex + 1) - 1;
+ }
+ else
+ {
+ nEndIndex = rCommand.indexOf( ::rtl::OUString::createFromAscii(" \\"), nStartIndex);
+ }
+ ::rtl::OUString sRet;
+ if( nEndIndex > nStartIndex + 1 )
+ {
+ //remove spaces at start and end of the result
+ if(nQuoteIndex <= 0)
+ {
+ const sal_Unicode* pCommandStr = rCommand.getStr();
+ while( nStartIndex < nEndIndex && pCommandStr[nStartIndex] == ' ')
+ ++nStartIndex;
+ while( nEndIndex > nStartIndex && pCommandStr[nEndIndex] == ' ')
+ --nEndIndex;
+ }
+ sRet = rCommand.copy( nStartIndex, nEndIndex - nStartIndex + 1);
+ }
+ return sRet;
+}
+
+/*-- 15.09.2006 10:57:57---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString lcl_ExctractAskVariableAndHint( const ::rtl::OUString& rCommand, ::rtl::OUString& rHint )
+{
+ // the first word after "ASK " is the variable
+ // the text after the variable and before a '\' is the hint
+ // if no hint is set the variable is used as hint
+ // the quotes of the hint have to be removed
+ sal_Int32 nIndex = rCommand.indexOf( ' ', 2);//find last space after 'ASK'
+ while(rCommand.getStr()[nIndex] == ' ')
+ ++nIndex;
+ ::rtl::OUString sShortCommand( rCommand.copy( nIndex ) ); //cut off the " ASK "
+
+ nIndex = 0;
+ sShortCommand = sShortCommand.getToken( 0, '\\', nIndex);
+ nIndex = 0;
+ ::rtl::OUString sRet = sShortCommand.getToken( 0, ' ', nIndex);
+ if( nIndex > 0)
+ rHint = sShortCommand.copy( nIndex );
+ if( !rHint.getLength() )
+ rHint = sRet;
+ return sRet;
+}
+/*-- 24.01.2007 16:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool lcl_FindInCommand(
+ const ::rtl::OUString& rCommand,
+ sal_Unicode cSwitch,
+ ::rtl::OUString& rValue )
+{
+ bool bRet = false;
+ ::rtl::OUString sSearch('\\');
+ sSearch += ::rtl::OUString( cSwitch );
+ sal_Int32 nIndex = rCommand.indexOf( sSearch );
+ if( nIndex >= 0 )
+ {
+ bRet = true;
+ //find next '\' or end of string
+ sal_Int32 nEndIndex = rCommand.indexOf( '\\', nIndex + 1);
+ if( nEndIndex < 0 )
+ nEndIndex = rCommand.getLength() - 1;
+ if( nEndIndex - nIndex > 3 )
+ rValue = rCommand.copy( nIndex + 3, nEndIndex - nIndex - 3);
+ }
+ return bRet;
+}
+/*-- 01.09.2006 11:48:08---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+/*void DomainMapper_Impl::CreateField( ::rtl::OUString& rCommand )
+{
+ static FieldConversionMap_t aFieldConversionMap;
+ static bool bFilled = false;
+ m_bSetUserFieldContent = false;
+ if(!bFilled)
+ {
+ static const FieldConversion aFields[] =
+ {
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ADDRESSBLOCK")), "", "", FIELD_ADDRESSBLOCK },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ADVANCE")), "", "", FIELD_ADVANCE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ASK")), "SetExpression", "SetExpression", FIELD_ASK },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUM")), "SetExpression", "SetExpression", FIELD_AUTONUM },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUMLGL")), "SetExpression", "SetExpression", FIELD_AUTONUMLGL },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTONUMOUT")), "SetExpression", "SetExpression", FIELD_AUTONUMOUT },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AUTHOR")), "Author", "", FIELD_AUTHOR },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DATE")), "DateTime", "", FIELD_DATE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("COMMENTS")), "DocInfo.Description", "", FIELD_COMMENTS },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CREATEDATE")), "DocInfo.CreateDateTime", "", FIELD_CREATEDATE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DOCPROPERTY")), "", "", FIELD_DOCPROPERTY },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DOCVARIABLE")), "User", "", FIELD_DOCVARIABLE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("EDITTIME")), "DocInfo.EditTime", "", FIELD_EDITTIME },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FILLIN")), "Input", "", FIELD_FILLIN },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FILENAME")), "FileName", "", FIELD_FILENAME },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FILESIZE")), "", "", FIELD_FILESIZE },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FORMULA")), "", "", FIELD_FORMULA
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GOTOBUTTON")), "", "", FIELD_GOTOBUTTON },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HYPERLINK")), "", "", FIELD_HYPERLINK },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IF")), "ConditionalText", "", FIELD_IF },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("INFO")), "","", FIELD_INFO },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("INCLUDEPICTURE")), "", "", FIELD_INCLUDEPICTURE},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("KEYWORDS")), "DocInfo.KeyWords", "", FIELD_KEYWORDS },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LASTSAVEDBY")), "DocInfo.ChangeAuthor", "", FIELD_LASTSAVEDBY },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MACROBUTTON")), "Macro", "", FIELD_MACROBUTTON },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MERGEFIELD")), "Database", "Database", FIELD_MERGEFIELD},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MERGEREC")), "DatabaseNumberOfSet", "", FIELD_MERGEREC },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MERGESEQ")), "", "", FIELD_MERGESEQ },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NEXT")), "DatabaseNextSet", "", FIELD_NEXT },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NEXTIF")), "DatabaseNextSet", "", FIELD_NEXTIF },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PAGE")), "PageNumber", "", FIELD_PAGE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("REF")), "", "", FIELD_REF },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("REVNUM")), "DocInfo.Revision", "", FIELD_REVNUM },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SAVEDATE")), "DocInfo.Change", "", FIELD_SAVEDATE },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SECTION")), "", "", FIELD_SECTION },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SECTIONPAGES")), "", "", FIELD_SECTIONPAGES },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SEQ")), "SetExpression", "SetExpression", FIELD_SEQ },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SET")), "","", FIELD_SET },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SKIPIF")),"", "", FIELD_SKIPIF },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("STYLEREF")),"", "", FIELD_STYLEREF },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SUBJECT")), "DocInfo.Subject", "", FIELD_SUBJECT },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SYMBOL")),"", "", FIELD_SYMBOL },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TEMPLATE")), "TemplateName", "", FIELD_TEMPLATE},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TIME")), "DateTime", "", FIELD_TIME },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TITLE")), "DocInfo.Title", "", FIELD_TITLE },
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERINITIALS")), "ExtendedUser", "", FIELD_USERINITIALS},
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERADDRESS")), "", "", FIELD_USERADDRESS },
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("USERNAME")), "ExtendedUser", "", FIELD_USERNAME }
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TOC")), "com.sun.star.text.ContentIndex", "", FIELD_TOC},
+ {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TC")), "com.sun.star.text.ContentIndexMark", "", FIELD_TC},
+
+// {::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")), "", "", FIELD_},
+
+ };
+ size_t nConversions = sizeof(aFields)/sizeof(FieldConversion);
+ for( size_t nConversion = 0; nConversion < nConversions; ++nConversion)
+ {
+ aFieldConversionMap.insert( FieldConversionMap_t::value_type(
+ aFields[nConversion].sWordCommand,
+ aFields[nConversion] ));
+ }
+
+ bFilled = true;
+ }
+ try
+ {
+ uno::Reference< uno::XInterface > xFieldInterface;
+ //at first determine the field type - skip first space
+ ::rtl::OUString sCommand( rCommand.copy(rCommand.getLength() ? 1 : 0) );
+ sal_Int32 nSpaceIndex = sCommand.indexOf( ' ' );
+ if( 0 <= nSpaceIndex )
+ sCommand = sCommand.copy( 0, nSpaceIndex );
+
+ FieldConversionMap_t::iterator aIt = aFieldConversionMap.find(sCommand);
+ if(aIt != aFieldConversionMap.end())
+ {
+ uno::Reference< beans::XPropertySet > xFieldProperties;
+ if( FIELD_HYPERLINK != aIt->second.eFieldId &&
+ FIELD_DOCPROPERTY != aIt->second.eFieldId &&
+ FIELD_TOC != aIt->second.eFieldId &&
+ FIELD_TC != aIt->second.eFieldId)
+ {
+ //add the service prefix
+ OUString sServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextField."));
+ sServiceName += ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName );
+ xFieldInterface = m_xTextFactory->createInstance(sServiceName);
+ xFieldProperties = uno::Reference< beans::XPropertySet >( xFieldInterface, uno::UNO_QUERY_THROW);
+ }
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ switch( aIt->second.eFieldId )
+ {
+ case FIELD_ADDRESSBLOCK: break;
+ case FIELD_ADVANCE : break;
+ case FIELD_ASK :
+ {
+ //doesn the command contain a variable name?
+ ::rtl::OUString sVariable, sHint;
+
+ sVariable = lcl_ExctractAskVariableAndHint( rCommand, sHint );
+ if(sVariable.getLength())
+ {
+ // determine field master name
+ uno::Reference< beans::XPropertySet > xMaster = FindOrCreateFieldMaster(
+ "com.sun.star.text.FieldMaster.SetExpression", sVariable );
+
+ // attach the master to the field
+ uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
+ xDependentField->attachTextFieldMaster( xMaster );
+
+ // set input flag at the field
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_IS_INPUT), uno::makeAny( true ));
+ // set the prompt
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HINT),
+ uno::makeAny( sHint ));
+ }
+ else
+ {
+ //don't insert the field
+ //todo: maybe import a 'normal' input field here?
+ xFieldInterface = 0;
+ }
+ }
+ break;
+ case FIELD_AUTONUM :
+ case FIELD_AUTONUMLGL :
+ case FIELD_AUTONUMOUT :
+ {
+ //create a sequence field master "AutoNr"
+ uno::Reference< beans::XPropertySet > xMaster = FindOrCreateFieldMaster(
+ "com.sun.star.text.FieldMaster.SetExpression",
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AutoNr") ));
+
+ xMaster->setPropertyValue( rPropNameSupplier.GetName(PROP_SUB_TYPE),
+ uno::makeAny(text::SetVariableType::SEQUENCE));
+
+ //apply the numbering type
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_NUMBERING_TYPE),
+ uno::makeAny( lcl_ParseNumberingType(rCommand) ));
+ // attach the master to the field
+ uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
+ xDependentField->attachTextFieldMaster( xMaster );
+ }
+ break;
+ case FIELD_AUTHOR :
+ {
+ xFieldProperties->setPropertyValue( rPropNameSupplier.GetName(PROP_FULL_NAME), uno::makeAny( true ));
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" AUTHOR") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_DATE:
+ {
+ //not fixed,
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_IS_FIXED),
+ uno::makeAny( false ));
+ SetNumberFormat( rCommand, xFieldProperties );
+ }
+ break;
+ case FIELD_COMMENTS :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" COMMENTS") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_CREATEDATE :
+ {
+ SetNumberFormat( rCommand, xFieldProperties );
+ }
+ break;
+ case FIELD_DOCPROPERTY :
+ {
+ //some docproperties should be imported as document statistic fields, some as DocInfo fields
+ //others should be user fields
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" DOCPROPERTY") );
+ if(sParam.getLength())
+ {
+ #define SET_ARABIC 0x01
+ #define SET_FULL_NAME 0x02
+ struct DocPropertyMap
+ {
+ const sal_Char* pDocPropertyName;
+ const sal_Char* pServiceName;
+ sal_uInt8 nFlags;
+ };
+ static const DocPropertyMap aDocProperties[] =
+ {
+ {"Author", "Author", SET_FULL_NAME},
+ {"CreateTime", "DocInfo.CreateDateTime", 0},
+ {"Characters", "CharacterCount", SET_ARABIC},
+ {"Comments", "DocInfo.Description", 0},
+ {"Keywords", "DocInfo.KeyWords", 0},
+ {"LastPrinted", "DocInfo.PrintDateTime", 0},
+ {"LastSavedBy", "DocInfo.ChangeAuthor", 0},
+ {"LastSavedTime", "DocInfo.ChangeDateTime", 0},
+ {"Paragraphs", "ParagraphCount", SET_ARABIC},
+ {"RevisionNumber", "DocInfo.Revision", 0},
+ {"Subject", "DocInfo.Subject", 0},
+ {"Template", "TemplateName", 0},
+ {"Title", "DocInfo.Title", 0},
+ {"TotalEditingTime", "DocInfo.EditTime", 9},
+ {"Words", "WordCount", SET_ARABIC}
+
+ //other available DocProperties:
+ //Bytes, Category, CharactersWithSpaces, Company
+ //HyperlinkBase,
+ //Lines, Manager, NameofApplication, ODMADocId, Pages,
+ //Security,
+ };
+ //search for a field mapping
+ ::rtl::OUString sFieldServiceName;
+ sal_uInt16 nMap = 0;
+ for( ; nMap < sizeof(aDocProperties) / sizeof(DocPropertyMap); ++nMap )
+ {
+ if(sParam.equalsAscii(aDocProperties[nMap].pDocPropertyName))
+ {
+ sFieldServiceName = ::rtl::OUString::createFromAscii(aDocProperties[nMap].pServiceName);
+ break;
+ }
+ }
+ ::rtl::OUString sServiceName(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextField."));
+ if(sFieldServiceName.getLength())
+ {
+ sServiceName += sFieldServiceName;
+ xFieldInterface = m_xTextFactory->createInstance(sServiceName);
+ xFieldProperties = uno::Reference< beans::XPropertySet >( xFieldInterface, uno::UNO_QUERY_THROW);
+ if(0 != (aDocProperties[nMap].nFlags & SET_ARABIC))
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_NUMBERING_TYPE),
+ uno::makeAny( style::NumberingType::ARABIC ));
+ else if(0 != (aDocProperties[nMap].nFlags & SET_FULL_NAME))
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_FULL_NAME), uno::makeAny( true ));
+
+ }
+ else
+ {
+ //create a user field and type
+ uno::Reference< beans::XPropertySet > xMaster =
+ FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.User", sParam );
+ sServiceName += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("User"));
+ xFieldInterface = m_xTextFactory->createInstance(sServiceName);
+ xFieldProperties = uno::Reference< beans::XPropertySet >( xFieldInterface, uno::UNO_QUERY_THROW);
+ uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
+ xDependentField->attachTextFieldMaster( xMaster );
+ m_bSetUserFieldContent = true;
+ }
+ }
+ }
+ #undef SET_ARABIC
+ #undef SET_FULL_NAME
+ break;
+ case FIELD_DOCVARIABLE :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" DOCVARIABLE") );
+ //create a user field and type
+ uno::Reference< beans::XPropertySet > xMaster =
+ FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.User", sParam );
+ uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
+ xDependentField->attachTextFieldMaster( xMaster );
+ m_bSetUserFieldContent = true;
+ }
+ break;
+ case FIELD_EDITTIME :
+ //it's a numbering type, no number format! SetNumberFormat( rCommand, xFieldProperties );
+ break;
+ case FIELD_FILLIN :
+ {
+ sal_Int32 nIndex = 0;
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HINT), uno::makeAny( rCommand.getToken( 1, '\"', nIndex)));
+ }
+ break;
+ case FIELD_FILENAME:
+ {
+ sal_Int32 nNumberingTypeIndex = rCommand.indexOf( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\\p")));
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_FILE_FORMAT),
+ uno::makeAny( nNumberingTypeIndex > 0 ? text::FilenameDisplayFormat::FULL : text::FilenameDisplayFormat::NAME ));
+ }
+ break;
+ case FIELD_FILESIZE : break;
+ case FIELD_FORMULA : break;
+ case FIELD_GOTOBUTTON : break;
+ case FIELD_HYPERLINK:
+ {
+ sal_Int32 nStartQuote = rCommand.indexOf( '\"' );
+ sal_Int32 nEndQuote = nStartQuote < rCommand.getLength() + 1 ? rCommand.indexOf( '\"', nStartQuote + 1) : -1;
+ if( nEndQuote > 0)
+ m_sHyperlinkURL = rCommand.copy(nStartQuote + 1, nEndQuote - nStartQuote - 1);
+ }
+ break;
+ case FIELD_IF : break;
+ case FIELD_INFO : break;
+ case FIELD_INCLUDEPICTURE: break;
+ case FIELD_KEYWORDS :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" KEYWORDS") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_LASTSAVEDBY : break;
+ case FIELD_MACROBUTTON:
+ {
+ //extract macro name
+ sal_Int32 nIndex = sizeof(" MACROBUTTON ");
+ ::rtl::OUString sMacro = rCommand.getToken( 0, ' ', nIndex);
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_MACRO_NAME), uno::makeAny( sMacro ));
+
+ //extract quick help text
+ if( rCommand.getLength() > nIndex + 1)
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HINT),
+ uno::makeAny( rCommand.copy( nIndex )));
+ }
+ }
+ break;
+ case FIELD_MERGEFIELD :
+ {
+ //todo: create a database field and fieldmaster pointing to a column, only
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" MERGEFIELD") );
+ //create a user field and type
+ uno::Reference< beans::XPropertySet > xMaster =
+ FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.Database", sParam );
+
+// xFieldProperties->setPropertyValue(
+// ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FieldCode")),
+// uno::makeAny( rCommand.copy( nIndex + 1 )));
+ uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
+ xDependentField->attachTextFieldMaster( xMaster );
+ m_bSetUserFieldContent = true;
+ }
+ break;
+ case FIELD_MERGEREC : break;
+ case FIELD_MERGESEQ : break;
+ case FIELD_NEXT : break;
+ case FIELD_NEXTIF : break;
+ case FIELD_PAGE :
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_NUMBERING_TYPE),
+ uno::makeAny( lcl_ParseNumberingType(rCommand) ));
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_SUB_TYPE),
+ uno::makeAny( text::PageNumberType_CURRENT ));
+
+ break;
+ case FIELD_REF : break;
+ case FIELD_REVNUM : break;
+ case FIELD_SAVEDATE :
+ SetNumberFormat( rCommand, xFieldProperties );
+ break;
+ case FIELD_SECTION : break;
+ case FIELD_SECTIONPAGES : break;
+ case FIELD_SEQ : break;
+ case FIELD_SET : break;
+ case FIELD_SKIPIF : break;
+ case FIELD_STYLEREF : break;
+ case FIELD_SUBJECT :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" SUBJECT") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_SYMBOL : break;
+ case FIELD_TEMPLATE: break;
+ case FIELD_TIME :
+ SetNumberFormat( rCommand, xFieldProperties );
+ break;
+ case FIELD_TITLE :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" TITLE") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_USERINITIALS:
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_USER_DATA_TYPE), uno::makeAny( text::UserDataPart::SHORTCUT ));
+ //todo: if initials are provided - set them as fixed content
+ ::rtl::OUString sParam = lcl_ExtractParameter(rCommand, sizeof(" USERINITIALS") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_USERADDRESS : //todo: user address collects street, city ...
+ break;
+ case FIELD_USERNAME : //todo: user name is firstname + lastname
+ break;
+ case FIELD_TOC:
+ {
+ ::rtl::OUString sValue;
+ bool bTableOfFigures = false;
+ bool bHyperlinks = false;
+ bool bFromOutline = false;
+ bool bFromEntries = false;
+ ::rtl::OUString sTemplate;
+ ::rtl::OUString sChapterNoSeparator;
+// \a Builds a table of figures but does not include the captions's label and number
+ if( lcl_FindInCommand( rCommand, 'a', sValue ))
+ { //make it a table of figures
+ bTableOfFigures = true;
+ }
+// \b Uses a bookmark to specify area of document from which to build table of contents
+// if( lcl_FindInCommand( rCommand, 'b', sValue ))
+// { //todo: sValue contains the bookmark name - unsupported feature
+// }
+ if( lcl_FindInCommand( rCommand, 'c', sValue ))
+// \c Builds a table of figures of the given label
+ {
+ //todo: sValue contains the label's name
+ bTableOfFigures = true;
+ }
+// \d Defines the separator between sequence and page numbers
+ if( lcl_FindInCommand( rCommand, 'd', sValue ))
+ {
+ //todo: insert the chapter number into each level and insert the separator additionally
+ sChapterNoSeparator = sValue;
+ }
+// \f Builds a table of contents using TC entries instead of outline levels
+ if( lcl_FindInCommand( rCommand, 'f', sValue ))
+ {
+ //todo: sValue can contain a TOC entry identifier - use unclear
+ bFromEntries = true;
+ }
+// \h Hyperlinks the entries and page numbers within the table of contents
+ if( lcl_FindInCommand( rCommand, 'h', sValue ))
+ {
+ //todo: make all entries to hyperlinks
+ bHyperlinks = true;
+ }
+// \l Defines the TC entries field level used to build a table of contents
+// if( lcl_FindInCommand( rCommand, 'l', sValue ))
+// {
+ //todo: entries can only be included completely
+// }
+// \n Builds a table of contents or a range of entries, sucah as “1-9”, in a table of contents without page numbers
+// if( lcl_FindInCommand( rCommand, 'n', sValue ))
+// {
+ //todo: what does the description mean?
+// }
+// \o Builds a table of contents by using outline levels instead of TC entries
+ if( lcl_FindInCommand( rCommand, 'o', sValue ))
+ {
+ bFromOutline = true;
+ }
+// \p Defines the separator between the table entry and its page number
+ if( lcl_FindInCommand( rCommand, 'p', sValue ))
+ { }
+// \s Builds a table of contents by using a sequence type
+ if( lcl_FindInCommand( rCommand, 's', sValue ))
+ { }
+// \t Builds a table of contents by using style names other than the standard outline styles
+ if( lcl_FindInCommand( rCommand, 't', sValue ))
+ {
+ sTemplate = sValue;
+ }
+// \u Builds a table of contents by using the applied paragraph outline level
+ if( lcl_FindInCommand( rCommand, 'u', sValue ))
+ {
+ bFromOutline = true;
+ //todo: what doesn 'the applied paragraph outline level' refer to?
+ }
+// \w Preserve tab characters within table entries
+// if( lcl_FindInCommand( rCommand, 'w', sValue ))
+// {
+ //todo: not supported
+// }
+// \x Preserve newline characters within table entries
+// if( lcl_FindInCommand( rCommand, 'x', sValue ))
+// {
+ //todo: unsupported
+// }
+// \z Hides page numbers within the table of contens when shown in Web Layout View
+// if( lcl_FindInCommand( rCommand, 'z', sValue ))
+// { //todo: unsupported feature }
+
+ m_xTOC = uno::Reference< beans::XPropertySet >(
+ m_xTextFactory->createInstance(
+ bTableOfFigures ?
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.IllustrationsIndex")) :
+ ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName)),
+ uno::UNO_QUERY_THROW);
+ if( !bTableOfFigures )
+ {
+ m_xTOC->setPropertyValue( rPropNameSupplier.GetName( PROP_CREATE_FROM_OUTLINE ), uno::makeAny( bFromOutline ));
+ m_xTOC->setPropertyValue( rPropNameSupplier.GetName( PROP_CREATE_FROM_MARKS ), uno::makeAny( bFromEntries ));
+ if( sTemplate.getLength() )
+ {
+ uno::Reference< container::XIndexReplace> xParaStyles;
+ m_xTOC->getPropertyValue(rPropNameSupplier.GetName(PROP_LEVEL_PARAGRAPH_STYLES)) >>= xParaStyles;
+ uno::Sequence< rtl::OUString> aStyles(1);
+ aStyles[0] = sTemplate;
+ xParaStyles->replaceByIndex(0, uno::makeAny(aStyles));
+ }
+ if(bHyperlinks || sChapterNoSeparator.getLength())
+ {
+ uno::Reference< container::XIndexReplace> xLevelFormats;
+ m_xTOC->getPropertyValue(rPropNameSupplier.GetName(PROP_LEVEL_FORMAT)) >>= xLevelFormats;
+ sal_Int32 nLevelCount = xLevelFormats->getCount();
+ //start with level 1, 0 is the header level
+ for( sal_Int32 nLevel = 1; nLevel < nLevelCount; ++nLevel)
+ {
+ uno::Sequence< beans::PropertyValues > aLevel;
+ xLevelFormats->getByIndex( nLevel ) >>= aLevel;
+ //create a copy of the level and add two new entries - hyperlink start and end
+ bool bChapterNoSeparator = sChapterNoSeparator.getLength() > 0;
+ sal_Int32 nAdd = (bHyperlinks && bChapterNoSeparator) ? 4 : 2;
+ uno::Sequence< beans::PropertyValues > aNewLevel( aLevel.getLength() + nAdd);
+ beans::PropertyValues* pNewLevel = aNewLevel.getArray();
+ if( bHyperlinks )
+ {
+ beans::PropertyValues aHyperlink(1);
+ aHyperlink[0].Name = rPropNameSupplier.GetName( PROP_TOKEN_TYPE );
+ aHyperlink[0].Value <<= rPropNameSupplier.GetName( PROP_TOKEN_HYPERLINK_START );
+ pNewLevel[0] = aHyperlink;
+ aHyperlink[0].Value <<= rPropNameSupplier.GetName( PROP_TOKEN_HYPERLINK_END );
+ pNewLevel[aNewLevel.getLength() -1] = aHyperlink;
+ }
+ if( bChapterNoSeparator )
+ {
+ beans::PropertyValues aChapterNo(2);
+ aChapterNo[0].Name = rPropNameSupplier.GetName( PROP_TOKEN_TYPE );
+ aChapterNo[0].Value <<= rPropNameSupplier.GetName( PROP_TOKEN_CHAPTER_INFO );
+ aChapterNo[1].Name = rPropNameSupplier.GetName( PROP_CHAPTER_FORMAT );
+ //todo: is ChapterFormat::Number correct?
+ aChapterNo[1].Value <<= (sal_Int16)text::ChapterFormat::NUMBER;
+ pNewLevel[aNewLevel.getLength() - (bHyperlinks ? 4 : 2) ] = aChapterNo;
+
+ beans::PropertyValues aChapterSeparator(2);
+ aChapterSeparator[0].Name = rPropNameSupplier.GetName( PROP_TOKEN_TYPE );
+ aChapterSeparator[0].Value <<= rPropNameSupplier.GetName( PROP_TOKEN_TEXT );
+ aChapterSeparator[1].Name = rPropNameSupplier.GetName( PROP_TEXT );
+ aChapterSeparator[1].Value <<= sChapterNoSeparator;
+ pNewLevel[aNewLevel.getLength() - (bHyperlinks ? 3 : 1)] = aChapterSeparator;
+ }
+ //copy the 'old' entries except the last (page no)
+ for( sal_Int32 nToken = 0; nToken < aLevel.getLength() - 1; ++nToken)
+ {
+ pNewLevel[nToken + 1] = aLevel[nToken];
+ }
+ //copy page no entry (last or last but one depending on bHyperlinks
+ sal_Int32 nPageNo = aNewLevel.getLength() - (bHyperlinks ? 2 : 3);
+ pNewLevel[nPageNo] = aLevel[aLevel.getLength() - 1];
+
+ xLevelFormats->replaceByIndex( nLevel, uno::makeAny( aNewLevel ) );
+ }
+ }
+ }
+ }
+ break;
+ case FIELD_TC :
+ {
+ m_xTC = uno::Reference< beans::XPropertySet >(
+ m_xTextFactory->createInstance(
+ ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName)),
+ uno::UNO_QUERY_THROW);
+ ::rtl::OUString sTCText = lcl_ExtractParameter(rCommand, sizeof(" TC") );
+ if( sTCText.getLength())
+ m_xTC->setPropertyValue(rPropNameSupplier.GetName(PROP_ALTERNATIVE_TEXT),
+ uno::makeAny(sTCText));
+ ::rtl::OUString sValue;
+ // \f TC entry in doc with multiple tables
+// if( lcl_FindInCommand( rCommand, 'f', sValue ))
+// {
+ // todo: unsupported
+// }
+ if( lcl_FindInCommand( rCommand, 'l', sValue ))
+ // \l Outline Level
+ {
+ sal_Int32 nLevel = sValue.toInt32();
+ if( sValue.getLength() && nLevel >= 0 && nLevel <= 10 )
+ m_xTC->setPropertyValue(rPropNameSupplier.GetName(PROP_LEVEL), uno::makeAny( nLevel ));
+ }
+// if( lcl_FindInCommand( rCommand, 'n', sValue ))
+// \n Suppress page numbers
+// {
+ //todo: unsupported feature
+// }
+ }
+ break;
+ }
+ }
+ m_xTextField = uno::Reference< text::XTextField >( xFieldInterface, uno::UNO_QUERY );
+ }
+ catch( uno::Exception& )
+ {
+ }
+}
+*/
+
+/*-- 11.09.2006 13:16:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+/*bool DomainMapper_Impl::IsFieldAvailable() const
+{
+ return m_xTextField.is() || m_xTOC.is() || m_xTC.is() || m_sHyperlinkURL.getLength();
+}
+*/
+/*-- 14.09.2006 12:46:52---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::GetCurrentLocale(lang::Locale& rLocale)
+{
+ PropertyMapPtr pTopContext = GetTopContext();
+ PropertyDefinition aCharLocale( PROP_CHAR_LOCALE, true );
+ PropertyMap::iterator aLocaleIter = pTopContext->find( aCharLocale );
+ if( aLocaleIter != pTopContext->end())
+ aLocaleIter->second >>= rLocale;
+ else
+ {
+ PropertyMapPtr pParaContext = GetTopContextOfType(CONTEXT_PARAGRAPH);
+ aLocaleIter = pParaContext->find(aCharLocale);
+ if( aLocaleIter != pParaContext->end())
+ {
+ aLocaleIter->second >>= rLocale;
+ }
+ }
+}
+
+/*-- 14.09.2006 12:52:58---------------------------------------------------
+ extract the number format from the command and apply the resulting number
+ format to the XPropertySet
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::SetNumberFormat( const ::rtl::OUString& rCommand,
+ uno::Reference< beans::XPropertySet >& xPropertySet )
+{
+ OUString sFormatString = lcl_ParseFormat( rCommand );
+ // find \h - hijri/luna calendar todo: what about saka/era calendar?
+ bool bHijri = 0 < rCommand.indexOf( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\\h ")));
+ lang::Locale aUSLocale;
+ aUSLocale.Language = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("en"));
+ aUSLocale.Country = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("US"));
+
+ //determine current locale - todo: is it necessary to initialize this locale?
+ lang::Locale aCurrentLocale = aUSLocale;
+ GetCurrentLocale( aCurrentLocale );
+ ::rtl::OUString sFormat = ConversionHelper::ConvertMSFormatStringToSO( sFormatString, aCurrentLocale, bHijri);
+
+ //get the number formatter and convert the string to a format value
+ try
+ {
+ uno::Reference< util::XNumberFormatsSupplier > xNumberSupplier( m_xTextDocument, uno::UNO_QUERY_THROW );
+ long nKey = xNumberSupplier->getNumberFormats()->addNewConverted( sFormat, aUSLocale, aCurrentLocale );
+ xPropertySet->setPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_NUMBER_FORMAT),
+ uno::makeAny( nKey ));
+ }
+ catch(const uno::Exception&)
+ {
+ }
+}
+
+/*-- 15.09.2006 15:10:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< beans::XPropertySet > DomainMapper_Impl::FindOrCreateFieldMaster(
+ const sal_Char* pFieldMasterService, const ::rtl::OUString& rFieldMasterName )
+ throw(::com::sun::star::uno::Exception)
+{
+ // query master, create if not available
+ uno::Reference< text::XTextFieldsSupplier > xFieldsSupplier( GetTextDocument(), uno::UNO_QUERY );
+ uno::Reference< container::XNameAccess > xFieldMasterAccess = xFieldsSupplier->getTextFieldMasters();
+ uno::Reference< beans::XPropertySet > xMaster;
+ ::rtl::OUString sFieldMasterService( ::rtl::OUString::createFromAscii(pFieldMasterService) );
+ ::rtl::OUStringBuffer aFieldMasterName;
+ aFieldMasterName.appendAscii( pFieldMasterService );
+ aFieldMasterName.append(sal_Unicode('.'));
+ aFieldMasterName.append(rFieldMasterName);
+ ::rtl::OUString sFieldMasterName = aFieldMasterName.makeStringAndClear();
+ if(xFieldMasterAccess->hasByName(sFieldMasterName))
+ {
+ //get the master
+ xMaster = uno::Reference< beans::XPropertySet >(xFieldMasterAccess->getByName(sFieldMasterName),
+ uno::UNO_QUERY_THROW);
+ }
+ else
+ {
+ //create the master
+ xMaster = uno::Reference< beans::XPropertySet >(
+ m_xTextFactory->createInstance(sFieldMasterService), uno::UNO_QUERY_THROW);
+ //set the master's name
+// sal_Int32 nIndex = rtl_str_indexOfStr( pFieldMasterService, "Database" );
+// if( nIndex < 0 )
+ xMaster->setPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_NAME),
+ uno::makeAny(rFieldMasterName));
+// else
+// {
+// xMaster->setPropertyValue(
+// PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_DATA_COLUMN_NAME),
+// uno::makeAny(rFieldMasterName));
+// }
+ }
+ return xMaster;
+}
+
+/*-- 29.01.2007 11:33:10---------------------------------------------------
+//field context starts with a 0x13
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::PushFieldContext()
+{
+#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 >() );
+ uno::Reference< text::XTextCursor > xCrsr = xTextAppend->createTextCursorByRange( xTextAppend->getEnd() );
+ xCrsr->goLeft( 1, false );
+ m_aFieldStack.push( FieldContextPtr( new FieldContext( xCrsr->getStart() ) ) );
+}
+/*-- 29.01.2007 11:33:13---------------------------------------------------
+//the current field context waits for the completion of the command
+ -----------------------------------------------------------------------*/
+bool DomainMapper_Impl::IsOpenFieldCommand() const
+{
+ return !m_aFieldStack.empty() && !m_aFieldStack.top()->IsCommandCompleted();
+}
+/*-- 29.01.2007 11:33:13---------------------------------------------------
+//the current field context waits for the completion of the command
+ -----------------------------------------------------------------------*/
+bool DomainMapper_Impl::IsOpenField() const
+{
+ return !m_aFieldStack.empty();
+}
+/*-- 29.01.2007 11:49:13---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+FieldContext::FieldContext(uno::Reference< text::XTextRange > xStart) :
+ m_bFieldCommandCompleted( false )
+ ,m_xStartRange( xStart )
+{
+}
+/*-- 29.01.2007 11:48:44---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+FieldContext::~FieldContext()
+{
+}
+/*-- 29.01.2007 11:48:45---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FieldContext::AppendCommand(const ::rtl::OUString& rPart)
+{
+ m_sCommand += rPart;
+}
+
+::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() )
+ {
+ pContext->AppendCommand( rPartOfCommand );
+ }
+}
+/*-- 13.12.2007 11:45:43---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+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() )
+ {
+ m_bSetUserFieldContent = false;
+ FieldConversionMap_t aFieldConversionMap = lcl_GetFieldConversion();
+
+ try
+ {
+ uno::Reference< uno::XInterface > xFieldInterface;
+ //at first determine the field type - erase leading and trailing whitespaces
+ ::rtl::OUString sCommand( pContext->GetCommand().trim() );
+ sal_Int32 nSpaceIndex = sCommand.indexOf( ' ' );
+ if( 0 <= nSpaceIndex )
+ sCommand = sCommand.copy( 0, nSpaceIndex );
+
+ FieldConversionMap_t::iterator aIt = aFieldConversionMap.find(sCommand);
+ if(aIt != aFieldConversionMap.end())
+ {
+ uno::Reference< beans::XPropertySet > xFieldProperties;
+ 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);
+ }
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ switch( aIt->second.eFieldId )
+ {
+ case FIELD_ADDRESSBLOCK: break;
+ case FIELD_ADVANCE : break;
+ case FIELD_ASK :
+ handleFieldAsk(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties);
+ break;
+ case FIELD_AUTONUM :
+ case FIELD_AUTONUMLGL :
+ case FIELD_AUTONUMOUT :
+ handleAutoNum(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties);
+ break;
+ case FIELD_AUTHOR :
+ handleAuthor(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties);
+ break;
+ case FIELD_DATE:
+ {
+ //not fixed,
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_IS_FIXED),
+ uno::makeAny( false ));
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_IS_DATE),
+ uno::makeAny( true ));
+ SetNumberFormat( pContext->GetCommand(), xFieldProperties );
+ }
+ break;
+ case FIELD_COMMENTS :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" COMMENTS") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_CREATEDATE :
+ {
+ SetNumberFormat( pContext->GetCommand(), xFieldProperties );
+ }
+ break;
+ case FIELD_DOCPROPERTY :
+ handleDocProperty(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties);
+ break;
+ case FIELD_DOCVARIABLE :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" DOCVARIABLE") );
+ //create a user field and type
+ uno::Reference< beans::XPropertySet > xMaster =
+ FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.User", sParam );
+ uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
+ xDependentField->attachTextFieldMaster( xMaster );
+ m_bSetUserFieldContent = true;
+ }
+ break;
+ case FIELD_EDITTIME :
+ //it's a numbering type, no number format! SetNumberFormat( pContext->GetCommand(), xFieldProperties );
+ break;
+ case FIELD_FILLIN :
+ {
+ sal_Int32 nIndex = 0;
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HINT), uno::makeAny( pContext->GetCommand().getToken( 1, '\"', nIndex)));
+ }
+ break;
+ case FIELD_FILENAME:
+ {
+ sal_Int32 nNumberingTypeIndex = pContext->GetCommand().indexOf( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\\p")));
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_FILE_FORMAT),
+ uno::makeAny( nNumberingTypeIndex > 0 ? text::FilenameDisplayFormat::FULL : text::FilenameDisplayFormat::NAME ));
+ }
+ break;
+ case FIELD_FILESIZE : break;
+ case FIELD_FORMULA : break;
+ case FIELD_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:
+ {
+ ::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;
+ case FIELD_INFO : break;
+ case FIELD_INCLUDEPICTURE: break;
+ case FIELD_KEYWORDS :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" KEYWORDS") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_LASTSAVEDBY : break;
+ case FIELD_MACROBUTTON:
+ {
+ //extract macro name
+ sal_Int32 nIndex = sizeof(" MACROBUTTON ");
+ ::rtl::OUString sMacro = pContext->GetCommand().getToken( 0, ' ', nIndex);
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_MACRO_NAME), uno::makeAny( sMacro ));
+
+ //extract quick help text
+ if( pContext->GetCommand().getLength() > nIndex + 1)
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_HINT),
+ uno::makeAny( pContext->GetCommand().copy( nIndex )));
+ }
+ }
+ break;
+ case FIELD_MERGEFIELD :
+ {
+ //todo: create a database field and fieldmaster pointing to a column, only
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" MERGEFIELD") );
+ //create a user field and type
+ uno::Reference< beans::XPropertySet > xMaster =
+ FindOrCreateFieldMaster( "com.sun.star.text.FieldMaster.Database", sParam );
+
+ // xFieldProperties->setPropertyValue(
+ // ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FieldCode")),
+ // uno::makeAny( pContext->GetCommand().copy( nIndex + 1 )));
+ uno::Reference< text::XDependentTextField > xDependentField( xFieldInterface, uno::UNO_QUERY_THROW );
+ xDependentField->attachTextFieldMaster( xMaster );
+ m_bSetUserFieldContent = true;
+ }
+ break;
+ case FIELD_MERGEREC : break;
+ case FIELD_MERGESEQ : break;
+ case FIELD_NEXT : break;
+ case FIELD_NEXTIF : break;
+ case FIELD_PAGE :
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_NUMBERING_TYPE),
+ uno::makeAny( lcl_ParseNumberingType(pContext->GetCommand()) ));
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_SUB_TYPE),
+ uno::makeAny( text::PageNumberType_CURRENT ));
+
+ break;
+ case FIELD_REF:
+ {
+ ::rtl::OUString sBookmark = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" REF") );
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_REFERENCE_FIELD_SOURCE),
+ uno::makeAny( sal_Int16(text::ReferenceFieldSource::BOOKMARK)) );
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_SOURCE_NAME),
+ uno::makeAny( sBookmark) );
+ sal_Int16 nFieldPart = text::ReferenceFieldPart::TEXT;
+ ::rtl::OUString sValue;
+ if( lcl_FindInCommand( pContext->GetCommand(), 'p', sValue ))
+ {
+ //above-below
+ nFieldPart = text::ReferenceFieldPart::UP_DOWN;
+ }
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_REFERENCE_FIELD_PART ), uno::makeAny( nFieldPart ));
+ }
+ break;
+ case FIELD_REVNUM : break;
+ case FIELD_SAVEDATE :
+ SetNumberFormat( pContext->GetCommand(), xFieldProperties );
+ break;
+ case FIELD_SECTION : break;
+ case FIELD_SECTIONPAGES : break;
+ case FIELD_SEQ : break;
+ case FIELD_SET : break;
+ case FIELD_SKIPIF : break;
+ case FIELD_STYLEREF : break;
+ case FIELD_SUBJECT :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" SUBJECT") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_SYMBOL : break;
+ case FIELD_TEMPLATE: break;
+ case FIELD_TIME :
+ SetNumberFormat( pContext->GetCommand(), xFieldProperties );
+ break;
+ case FIELD_TITLE :
+ {
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" TITLE") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_USERINITIALS:
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_USER_DATA_TYPE), uno::makeAny( text::UserDataPart::SHORTCUT ));
+ //todo: if initials are provided - set them as fixed content
+ ::rtl::OUString sParam = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" USERINITIALS") );
+ if(sParam.getLength())
+ {
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_IS_FIXED ), uno::makeAny( true ));
+ //PROP_CURRENT_PRESENTATION is set later anyway
+ }
+ }
+ break;
+ case FIELD_USERADDRESS : //todo: user address collects street, city ...
+ break;
+ case FIELD_USERNAME : //todo: user name is firstname + lastname
+ break;
+ case FIELD_TOC:
+ handleToc(pContext, rPropNameSupplier, xFieldInterface, xFieldProperties,
+ ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName));
+ break;
+ case FIELD_TC :
+ {
+ uno::Reference< beans::XPropertySet > xTC(
+ m_xTextFactory->createInstance(
+ ::rtl::OUString::createFromAscii(aIt->second.cFieldServiceName)),
+ uno::UNO_QUERY_THROW);
+ ::rtl::OUString sTCText = lcl_ExtractParameter(pContext->GetCommand(), sizeof(" TC") );
+ if( sTCText.getLength())
+ xTC->setPropertyValue(rPropNameSupplier.GetName(PROP_ALTERNATIVE_TEXT),
+ uno::makeAny(sTCText));
+ ::rtl::OUString sValue;
+ // \f TC entry in doc with multiple tables
+ // if( lcl_FindInCommand( pContext->GetCommand(), 'f', sValue ))
+ // {
+ // todo: unsupported
+ // }
+ if( lcl_FindInCommand( pContext->GetCommand(), 'l', sValue ))
+ // \l Outline Level
+ {
+ sal_Int32 nLevel = sValue.toInt32();
+ if( sValue.getLength() && nLevel >= 0 && nLevel <= 10 )
+ xTC->setPropertyValue(rPropNameSupplier.GetName(PROP_LEVEL), uno::makeAny( (sal_Int16)nLevel ));
+ }
+ // if( lcl_FindInCommand( pContext->GetCommand(), 'n', sValue ))
+ // \n Suppress page numbers
+ // {
+ //todo: unsupported feature
+ // }
+ pContext->SetTC( xTC );
+ }
+ break;
+ case FIELD_NUMCHARS:
+ case FIELD_NUMWORDS:
+ case FIELD_NUMPAGES:
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_NUMBERING_TYPE),
+ uno::makeAny( lcl_ParseNumberingType(pContext->GetCommand()) ));
+ break;
+
+ }
+ }
+ //set the text field if there is any
+ pContext->SetTextField( uno::Reference< text::XTextField >( xFieldInterface, uno::UNO_QUERY ) );
+ }
+ catch( uno::Exception& rEx)
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "Exception in CloseFieldCommand()" );
+ }
+ pContext->SetCommandCompleted();
+ }
+}
+/*-- 29.01.2007 11:33:16---------------------------------------------------
+//the _current_ fields require a string type result while TOCs accept richt results
+ -----------------------------------------------------------------------*/
+bool DomainMapper_Impl::IsFieldResultAsString()
+{
+ bool bRet = false;
+ OSL_ENSURE( !m_aFieldStack.empty(), "field stack empty?");
+ FieldContextPtr pContext = m_aFieldStack.top();
+ OSL_ENSURE( pContext.get(), "no field context available");
+ if( pContext.get() )
+ {
+ bRet = pContext->GetTextField().is();
+ }
+ return bRet;
+}
+/*-- 01.09.2006 11:48:09---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::SetFieldResult( ::rtl::OUString& rResult )
+{
+#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() )
+ {
+ uno::Reference<text::XTextField> xTextField = pContext->GetTextField();
+ try
+ {
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ OSL_ENSURE( xTextField.is()
+ //||m_xTOC.is() ||m_xTC.is()
+ //||m_sHyperlinkURL.getLength()
+ , "DomainMapper_Impl::SetFieldResult: field not created" );
+ if(xTextField.is())
+ {
+ try
+ {
+ if( m_bSetUserFieldContent )
+ {
+ // user field content has to be set at the field master
+ uno::Reference< text::XDependentTextField > xDependentField( xTextField, uno::UNO_QUERY_THROW );
+ xDependentField->getTextFieldMaster()->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_CONTENT),
+ uno::makeAny( rResult ));
+ }
+ else
+ {
+ uno::Reference< beans::XPropertySet > xFieldProperties( xTextField, uno::UNO_QUERY_THROW);
+ xFieldProperties->setPropertyValue(
+ rPropNameSupplier.GetName(PROP_CURRENT_PRESENTATION),
+ uno::makeAny( rResult ));
+ }
+ }
+ catch( const beans::UnknownPropertyException& )
+ {
+ //some fields don't have a CurrentPresentation (DateTime)
+ }
+ }
+ }
+ catch( uno::Exception& )
+ {
+
+ }
+ }
+}
+
+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() )
+ {
+ if( !pContext->IsCommandCompleted() )
+ CloseFieldCommand();
+
+ //insert the field, TC or TOC
+ uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ if(xTextAppend.is())
+ {
+ try
+ {
+ uno::Reference< text::XTextCursor > xCrsr = xTextAppend->createTextCursorByRange(pContext->GetStartRange());
+ //remove the dummy character
+ xCrsr->goRight( 1, true );
+ xCrsr->setString( ::rtl::OUString() );
+ uno::Reference< text::XTextContent > xToInsert( pContext->GetTOC(), uno::UNO_QUERY );
+ if( xToInsert.is() )
+ {
+ xCrsr->gotoEnd( true );
+ xToInsert->attach( uno::Reference< text::XTextRange >( xCrsr, uno::UNO_QUERY_THROW ));
+ }
+ else
+ {
+ xToInsert = uno::Reference< text::XTextContent >(pContext->GetTC(), uno::UNO_QUERY);
+ if( !xToInsert.is() )
+ xToInsert = uno::Reference< text::XTextContent >(pContext->GetTextField(), uno::UNO_QUERY);
+ if( xToInsert.is() )
+ {
+ uno::Reference< text::XTextAppendAndConvert > xTextAppendAndConvert( xTextAppend, uno::UNO_QUERY_THROW );
+ xTextAppendAndConvert->appendTextContent( xToInsert, uno::Sequence< beans::PropertyValue >() );
+ }
+ else
+ {
+ 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()));
+ }
+ }
+ }
+ }
+ catch(const lang::IllegalArgumentException& )
+ {
+ OSL_ENSURE( false, "IllegalArgumentException in PopFieldContext()" );
+ }
+ catch(const uno::Exception& )
+ {
+ OSL_ENSURE( false, "exception in PopFieldContext()" );
+ }
+ }
+ //
+ //TOCs have to include all the imported content
+ //...
+ }
+ //remove the field context
+ m_aFieldStack.pop();
+}
+/*-- 11.06.2007 16:19:00---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::AddBookmark( const ::rtl::OUString& rBookmarkName, const ::rtl::OUString& rId )
+{
+ uno::Reference< text::XTextAppend > xTextAppend = m_aTextAppendStack.top().xTextAppend;
+ BookmarkMap_t::iterator aBookmarkIter = m_aBookmarkMap.find( rId );
+ //is the bookmark name already registered?
+ try
+ {
+ if( aBookmarkIter != m_aBookmarkMap.end() )
+ {
+ static const rtl::OUString sBookmarkService(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Bookmark"));
+ uno::Reference< text::XTextContent > xBookmark( m_xTextFactory->createInstance( sBookmarkService ), uno::UNO_QUERY_THROW );
+ uno::Reference< text::XTextCursor > xCursor;
+ uno::Reference< text::XText > xText = aBookmarkIter->second.m_xTextRange->getText();
+ if( aBookmarkIter->second.m_bIsStartOfText )
+ xCursor = xText->createTextCursorByRange( xText->getStart() );
+ else
+ {
+ xCursor = xText->createTextCursorByRange( aBookmarkIter->second.m_xTextRange );
+ xCursor->goRight( 1, false );
+ }
+
+ xCursor->gotoRange( xTextAppend->getEnd(), true );
+ uno::Reference< container::XNamed > xBkmNamed( xBookmark, uno::UNO_QUERY_THROW );
+ //todo: make sure the name is not used already!
+ xBkmNamed->setName( aBookmarkIter->second.m_sBookmarkName );
+ xTextAppend->insertTextContent( uno::Reference< text::XTextRange >( xCursor, uno::UNO_QUERY_THROW), xBookmark, !xCursor->isCollapsed() );
+ m_aBookmarkMap.erase( aBookmarkIter );
+ }
+ else
+ {
+ //otherwise insert a text range as marker
+ uno::Reference< text::XTextCursor > xCursor = xTextAppend->createTextCursorByRange( xTextAppend->getEnd() );
+ bool bIsStart = !xCursor->goLeft(1, false);
+ uno::Reference< text::XTextRange > xCurrent = xCursor->getStart();
+ m_aBookmarkMap.insert(BookmarkMap_t::value_type( rId, BookmarkInsertPosition( bIsStart, rBookmarkName, xCurrent ) ));
+ }
+ }
+ catch( const uno::Exception& )
+ {
+ //TODO: What happens to bookmarks where start and end are at different XText objects?
+ }
+}
+/*-- 01.11.2006 14:57:44---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+GraphicImportPtr DomainMapper_Impl::GetGraphicImport(GraphicImportType eGraphicImportType)
+{
+ if(!m_pGraphicImport)
+ m_pGraphicImport.reset( new GraphicImport( m_xComponentContext, m_xTextFactory, m_rDMapper, eGraphicImportType ) );
+ return m_pGraphicImport;
+}
+/*-- 09.08.2007 10:19:45---------------------------------------------------
+ reset graphic import if the last import resulted in a shape, not a graphic
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::ResetGraphicImport()
+{
+ m_pGraphicImport.reset();
+}
+/*-- 01.11.2006 09:25:40---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::ImportGraphic(writerfilter::Reference< Properties >::Pointer_t ref, GraphicImportType eGraphicImportType)
+{
+ GetGraphicImport(eGraphicImportType);
+ if( eGraphicImportType != IMPORT_AS_DETECTED_INLINE && eGraphicImportType != IMPORT_AS_DETECTED_ANCHOR )
+ {
+ //create the graphic
+ ref->resolve( *m_pGraphicImport );
+ }
+
+ //insert it into the document at the current cursor position
+
+ uno::Reference<text::XTextContent> xTextContent
+ (m_pGraphicImport->GetGraphicObject());
+
+ //insert it into the document at the current cursor position
+ OSL_ENSURE( xTextContent.is(), "DomainMapper_Impl::ImportGraphic");
+ if( xTextContent.is())
+ appendTextContent( xTextContent, uno::Sequence< beans::PropertyValue >() );
+
+ m_pGraphicImport.reset();
+}
+
+/*-- 28.12.2006 14:00:47---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::SetLineNumbering( sal_Int32 nLnnMod, sal_Int32 nLnc, sal_Int32 ndxaLnn )
+{
+ if( !m_bLineNumberingSet )
+ {
+ const PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ try
+ {
+ uno::Reference< text::XLineNumberingProperties > xLineProperties( m_xTextDocument, uno::UNO_QUERY_THROW );
+ uno::Reference< beans::XPropertySet > xProperties = xLineProperties->getLineNumberingProperties();
+ uno::Any aTrue( uno::makeAny( true ));
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_IS_ON ), aTrue);
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_COUNT_EMPTY_LINES ), aTrue );
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_COUNT_LINES_IN_FRAMES ), uno::makeAny( false ) );
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_INTERVAL ), uno::makeAny( static_cast< sal_Int16 >( nLnnMod )));
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_DISTANCE ), uno::makeAny( ConversionHelper::convertTwipToMM100(ndxaLnn) ));
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_NUMBER_POSITION ), uno::makeAny( style::LineNumberPosition::LEFT));
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_NUMBERING_TYPE ), uno::makeAny( style::NumberingType::ARABIC));
+ xProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_RESTART_AT_EACH_PAGE ), uno::makeAny( nLnc == 0 ));
+ }
+ catch( const uno::Exception& )
+ {}
+
+
+
+/*
+ { SW_PROP_NAME(UNO_NAME_CHAR_STYLE_NAME
+ { SW_PROP_NAME(UNO_NAME_COUNT_EMPTY_LINES
+ { SW_PROP_NAME(UNO_NAME_COUNT_LINES_IN_FRAMES
+ { SW_PROP_NAME(UNO_NAME_DISTANCE
+ { SW_PROP_NAME(UNO_NAME_IS_ON
+ { SW_PROP_NAME(UNO_NAME_INTERVAL
+ { SW_PROP_NAME(UNO_NAME_SEPARATOR_TEXT
+ { SW_PROP_NAME(UNO_NAME_NUMBER_POSITION
+ { SW_PROP_NAME(UNO_NAME_NUMBERING_TYPE
+ { SW_PROP_NAME(UNO_NAME_RESTART_AT_EACH_PAGE
+ { SW_PROP_NAME(UNO_NAME_SEPARATOR_INTERVAL
+*/
+ }
+ m_bLineNumberingSet = true;
+}
+/*-- 31.08.2007 13:50:49---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::SetPageMarginTwip( PageMarElement eElement, sal_Int32 nValue )
+{
+ nValue = ConversionHelper::convertTwipToMM100(nValue);
+ switch(eElement)
+ {
+ case PAGE_MAR_TOP : m_aPageMargins.top = nValue; break;
+ case PAGE_MAR_RIGHT : m_aPageMargins.right = nValue; break;
+ case PAGE_MAR_BOTTOM : m_aPageMargins.bottom = nValue; break;
+ case PAGE_MAR_LEFT : m_aPageMargins.left = nValue; break;
+ case PAGE_MAR_HEADER : m_aPageMargins.header = nValue; break;
+ case PAGE_MAR_FOOTER : m_aPageMargins.footer = nValue; break;
+ case PAGE_MAR_GUTTER : m_aPageMargins.gutter = nValue; break;
+ }
+}
+
+/*-- 31.08.2007 13:47:50---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+_PageMar::_PageMar()
+{
+ header = footer = top = bottom = ConversionHelper::convertTwipToMM100( sal_Int32(1440));
+ right = left = ConversionHelper::convertTwipToMM100( sal_Int32(1800));
+ gutter = 0;
+}
+
+/*-- 07.03.2008 12:07:27---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::RegisterFrameConversion(
+ uno::Reference< text::XTextRange > xFrameStartRange,
+ uno::Reference< text::XTextRange > xFrameEndRange,
+ uno::Sequence< beans::PropertyValue > aFrameProperties
+ )
+{
+ OSL_ENSURE(
+ !m_aFrameProperties.getLength() && !m_xFrameStartRange.is() && !m_xFrameEndRange.is(),
+ "frame properties not removed");
+ m_aFrameProperties = aFrameProperties;
+ m_xFrameStartRange = xFrameStartRange;
+ m_xFrameEndRange = xFrameEndRange;
+}
+/*-- 07.03.2008 12:07:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool DomainMapper_Impl::ExecuteFrameConversion()
+{
+ bool bRet = false;
+ if( m_xFrameStartRange.is() && m_xFrameEndRange.is() )
+ {
+ bRet = true;
+ try
+ {
+ uno::Reference< text::XTextAppendAndConvert > xTextAppendAndConvert( GetTopTextAppend(), uno::UNO_QUERY_THROW );
+ xTextAppendAndConvert->convertToTextFrame(
+ m_xFrameStartRange,
+ m_xFrameEndRange,
+ m_aFrameProperties );
+ }
+ catch( const uno::Exception& rEx)
+ {
+ (void)rEx;
+ bRet = false;
+ }
+ m_xFrameStartRange = 0;
+ m_xFrameEndRange = 0;
+ m_aFrameProperties.realloc( 0 );
+ }
+ return bRet;
+}
+
+void DomainMapper_Impl::AddNewRedline( )
+{
+ RedlineParamsPtr pNew( new RedlineParams );
+ pNew->m_nToken = ooxml::OOXML_mod;
+ if ( !m_bIsParaChange )
+ {
+ m_aRedlines.push_back( pNew );
+ }
+ else
+ {
+ m_pParaRedline.swap( pNew );
+ }
+}
+
+RedlineParamsPtr DomainMapper_Impl::GetTopRedline( )
+{
+ RedlineParamsPtr pResult;
+ if ( !m_bIsParaChange && m_aRedlines.size( ) > 0 )
+ pResult = m_aRedlines.back( );
+ else if ( m_bIsParaChange )
+ pResult = m_pParaRedline;
+ return pResult;
+}
+
+sal_Int32 DomainMapper_Impl::GetCurrentRedlineToken( )
+{
+ sal_Int32 nToken = 0;
+ RedlineParamsPtr pCurrent( GetTopRedline( ) );
+ if ( pCurrent.get( ) )
+ nToken = pCurrent->m_nToken;
+ return nToken;
+}
+
+void DomainMapper_Impl::SetCurrentRedlineAuthor( rtl::OUString sAuthor )
+{
+ RedlineParamsPtr pCurrent( GetTopRedline( ) );
+ if ( pCurrent.get( ) )
+ pCurrent->m_sAuthor = sAuthor;
+}
+
+void DomainMapper_Impl::SetCurrentRedlineDate( rtl::OUString sDate )
+{
+ RedlineParamsPtr pCurrent( GetTopRedline( ) );
+ if ( pCurrent.get( ) )
+ pCurrent->m_sDate = sDate;
+}
+
+void DomainMapper_Impl::SetCurrentRedlineId( sal_Int32 sId )
+{
+ RedlineParamsPtr pCurrent( GetTopRedline( ) );
+ if ( pCurrent.get( ) )
+ pCurrent->m_nId = sId;
+}
+
+void DomainMapper_Impl::SetCurrentRedlineToken( sal_Int32 nToken )
+{
+ RedlineParamsPtr pCurrent( GetTopRedline( ) );
+ if ( pCurrent.get( ) )
+ pCurrent->m_nToken = nToken;
+}
+
+/*-- 19.03.2008 11:35:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void DomainMapper_Impl::RemoveCurrentRedline( )
+{
+ if ( m_aRedlines.size( ) > 0 )
+ {
+ m_aRedlines.pop_back( );
+ }
+}
+
+void DomainMapper_Impl::ResetParaRedline( )
+{
+ if ( m_pParaRedline.get( ) )
+ {
+ RedlineParamsPtr pEmpty;
+ m_pParaRedline.swap( pEmpty );
+ }
+}
+
+/*-- 22.09.2009 10:26:19---------------------------------------------------
+
+-----------------------------------------------------------------------*/
+void DomainMapper_Impl::ApplySettingsTable()
+{
+ if( m_pSettingsTable )
+ {
+ try
+ {
+ uno::Reference< beans::XPropertySet > xTextDefaults(
+ m_xTextFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Defaults"))), uno::UNO_QUERY_THROW );
+ sal_Int32 nDefTab = m_pSettingsTable->GetDefaultTabStop();
+ xTextDefaults->setPropertyValue( PropertyNameSupplier::GetPropertyNameSupplier().GetName( PROP_TAB_STOP_DISTANCE ), uno::makeAny(nDefTab) );
+ }
+ catch(const uno::Exception& )
+ {
+ }
+ }
+}
+
+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
new file mode 100644
index 000000000000..145e19412a75
--- /dev/null
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx
@@ -0,0 +1,603 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_DMAPPER_DOMAINMAPPER_IMPL_HXX
+#define INCLUDED_DMAPPER_DOMAINMAPPER_IMPL_HXX
+
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/text/XTextCursor.hpp>
+#include <com/sun/star/text/XTextAppend.hpp>
+#include <com/sun/star/text/XTextAppendAndConvert.hpp>
+#include <com/sun/star/text/XTextFrame.hpp>
+#include <com/sun/star/style/TabStop.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <vector>
+#include <stack>
+
+#ifndef INCLUDED_RESOURCESIDS
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#endif
+#include <dmapper/DomainMapper.hxx>
+#include <DomainMapperTableManager.hxx>
+#include <PropertyMap.hxx>
+#include <FontTable.hxx>
+#include <NumberingManager.hxx>
+#include <StyleSheetTable.hxx>
+#include <SettingsTable.hxx>
+#include <ThemeTable.hxx>
+#include <SettingsTable.hxx>
+#include <GraphicImport.hxx>
+#include <OLEHandler.hxx>
+#include <FFDataHandler.hxx>
+#include <FormControlHelper.hxx>
+#include <map>
+
+#include <string.h>
+
+namespace com{ namespace sun{ namespace star{
+ namespace awt{
+ struct Size;
+ }
+ namespace lang{
+ class XMultiServiceFactory;
+ struct Locale;
+ }
+ namespace text
+ {
+ class XTextField;
+ }
+ namespace beans{ class XPropertySet;}
+}}}
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace com::sun::star;
+
+//#define TWIP_TO_MM100(TWIP) ((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L))
+//sal_Int32 lcl_convertToMM100(sal_Int32 _t);
+
+struct _PageMar
+{
+ sal_Int32 top;
+ sal_Int32 right;
+ sal_Int32 bottom;
+ sal_Int32 left;
+ sal_Int32 header;
+ sal_Int32 footer;
+ sal_Int32 gutter;
+ public:
+ _PageMar();
+};
+enum PageMarElement
+{
+ PAGE_MAR_TOP,
+ PAGE_MAR_RIGHT,
+ PAGE_MAR_BOTTOM,
+ PAGE_MAR_LEFT,
+ PAGE_MAR_HEADER,
+ PAGE_MAR_FOOTER,
+ PAGE_MAR_GUTTER
+};
+
+/*-- 14.06.2006 07:42:52---------------------------------------------------
+ property stack element
+ -----------------------------------------------------------------------*/
+enum ContextType
+{
+ CONTEXT_SECTION,
+ CONTEXT_PARAGRAPH,
+ CONTEXT_CHARACTER,
+ CONTEXT_STYLESHEET,
+ CONTEXT_LIST,
+ NUMBER_OF_CONTEXTS
+};
+
+enum BreakType
+{
+ PAGE_BREAK,
+ COLUMN_BREAK
+};
+/*-----------------29.01.2007 11:47-----------------
+ field stack element
+ * --------------------------------------------------*/
+class FieldContext
+{
+ bool m_bFieldCommandCompleted;
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xStartRange;
+
+ ::rtl::OUString m_sCommand;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField > m_xTextField;
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xTOC;//TOX
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xTC;//TOX entry
+ ::rtl::OUString m_sHyperlinkURL;
+ FFDataHandler::Pointer_t m_pFFDataHandler;
+ FormControlHelper::Pointer_t m_pFormControlHelper;
+
+public:
+ FieldContext(::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xStart);
+ ~FieldContext();
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > GetStartRange() const { return m_xStartRange; }
+
+ void AppendCommand(const ::rtl::OUString& rPart);
+ const ::rtl::OUString& GetCommand() const {return m_sCommand; }
+
+ void SetCommandCompleted() { m_bFieldCommandCompleted = true; }
+ bool IsCommandCompleted() const { return m_bFieldCommandCompleted; }
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField > GetTextField() const { return m_xTextField;}
+ void SetTextField(::com::sun::star::uno::Reference< ::com::sun::star::text::XTextField > xTextField) { m_xTextField = xTextField;}
+
+ void SetTOC( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xTOC ) { m_xTOC = xTOC; }
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > GetTOC() { return m_xTOC; }
+
+ void SetTC( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xTC ) { m_xTC = xTC; }
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > GetTC( ) { return m_xTC; }
+
+ void SetHyperlinkURL( const ::rtl::OUString& rURL ) { m_sHyperlinkURL = rURL; }
+ const ::rtl::OUString& GetHyperlinkURL() { return m_sHyperlinkURL; }
+
+ 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
+{
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextAppend > xTextAppend;
+ ParagraphPropertiesPtr pLastParagraphProperties;
+
+ TextAppendContext( const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextAppend >& xAppend ) :
+ xTextAppend( xAppend ){}
+};
+
+typedef boost::shared_ptr<FieldContext> FieldContextPtr;
+
+typedef std::stack<ContextType> ContextStack;
+typedef std::stack<PropertyMapPtr> PropertyStack;
+typedef std::stack< TextAppendContext > TextAppendStack;
+typedef std::stack<FieldContextPtr> FieldStack;
+typedef std::stack< com::sun::star::uno::Reference< com::sun::star::text::XTextContent > > TextContentStack;
+
+/*-- 18.07.2006 08:49:08---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class FIB
+{
+ sal_Int32 aFIBData[ NS_rtf::LN_LCBSTTBFUSSR - NS_rtf::LN_WIDENT + 1];
+ sal_Int32 nLNCHS;
+ public:
+ FIB() :
+ nLNCHS( 0 )
+ {
+ memset(&aFIBData, 0x00, sizeof(aFIBData));
+ }
+
+ sal_Int32 GetLNCHS() const {return nLNCHS;}
+ void SetLNCHS(sal_Int32 nValue) {nLNCHS = nValue;}
+ sal_Int32 GetData( Id nName );
+ void SetData( Id nName, sal_Int32 nValue );
+};
+
+/*-- 17.07.2006 09:14:13---------------------------------------------------
+ extended tab stop struct
+ -----------------------------------------------------------------------*/
+struct DeletableTabStop : public ::com::sun::star::style::TabStop
+{
+ bool bDeleted;
+ DeletableTabStop() :
+ bDeleted( false ){}
+ DeletableTabStop( const ::com::sun::star::style::TabStop& rTabStop ) :
+ TabStop( rTabStop ),
+ bDeleted( false ){}
+};
+/*-- 12.06.2007 07:15:31---------------------------------------------------
+ /// helper to remember bookmark start position
+ -----------------------------------------------------------------------*/
+struct BookmarkInsertPosition
+{
+ bool m_bIsStartOfText;
+ ::rtl::OUString m_sBookmarkName;
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xTextRange;
+ BookmarkInsertPosition(bool bIsStartOfText, const ::rtl::OUString& rName, ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xTextRange):
+ m_bIsStartOfText( bIsStartOfText ),
+ m_sBookmarkName( rName ),
+ m_xTextRange( xTextRange )
+ {}
+};
+
+struct RedlineParams
+{
+ ::rtl::OUString m_sAuthor;
+ ::rtl::OUString m_sDate;
+ sal_Int32 m_nId;
+ sal_Int32 m_nToken;
+};
+typedef boost::shared_ptr< RedlineParams > RedlineParamsPtr;
+
+/*-- 03.03.2008 11:01:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+struct LineNumberSettings
+{
+ bool bIsOn;
+ sal_Int32 nDistance;
+ sal_Int32 nInterval;
+ sal_Int32 bRestartAtEachPage;
+ sal_Int32 nStartValue;
+ LineNumberSettings() :
+ bIsOn(false)
+ ,nDistance(0)
+ ,nInterval(0)
+ ,bRestartAtEachPage(true)
+ ,nStartValue(1)
+ {}
+
+};
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class DomainMapper;
+class DomainMapper_Impl
+{
+public:
+ typedef TableManager< ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange >, PropertyMapPtr > TableManager_t;
+ typedef TableDataHandler< ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange >, TablePropertyMapPtr > TableDataHandler_t;
+ typedef std::map < ::rtl::OUString, BookmarkInsertPosition > BookmarkMap_t;
+
+private:
+ SourceDocumentType m_eDocumentType;
+ DomainMapper& m_rDMapper;
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextDocument > m_xTextDocument;
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xDocumentSettings;
+ ::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory > m_xTextFactory;
+ ::com::sun::star::uno::Reference < com::sun::star::uno::XComponentContext > m_xComponentContext;
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > m_xPageStyles;
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > m_xBodyText;
+
+ TextAppendStack m_aTextAppendStack;
+
+ TextContentStack
+ m_aAnchoredStack;
+
+ FieldStack m_aFieldStack;
+ bool m_bFieldMode;
+ bool m_bSetUserFieldContent;
+ bool m_bIsFirstSection;
+ bool m_bIsColumnBreakDeferred;
+ bool m_bIsPageBreakDeferred;
+ bool m_bIsInShape;
+ bool m_bShapeContextAdded;
+
+ LineNumberSettings m_aLineNumberSettings;
+
+ BookmarkMap_t m_aBookmarkMap;
+
+ _PageMar m_aPageMargins;
+
+
+ // TableManagers are stacked: one for each stream to avoid any confusion
+ std::stack< boost::shared_ptr< DomainMapperTableManager > > m_aTableManagers;
+
+ //each context needs a stack of currently used attributes
+ FIB m_aFIB;
+ PropertyStack m_aPropertyStacks[NUMBER_OF_CONTEXTS];
+ ContextStack m_aContextStack;
+ FontTablePtr m_pFontTable;
+ ListsManager::Pointer m_pListTable;
+ StyleSheetTablePtr m_pStyleSheetTable;
+ ThemeTablePtr m_pThemeTable;
+ SettingsTablePtr m_pSettingsTable;
+ GraphicImportPtr m_pGraphicImport;
+
+
+ PropertyMapPtr m_pTopContext;
+ PropertyMapPtr m_pLastSectionContext;
+
+ ::std::vector<DeletableTabStop> m_aCurrentTabStops;
+ sal_uInt32 m_nCurrentTabStopIndex;
+ ::rtl::OUString m_sCurrentParaStyleId;
+ bool m_bInStyleSheetImport; //in import of fonts, styles, lists or lfos
+ bool m_bInAnyTableImport; //in import of fonts, styles, lists or lfos
+
+ bool m_bLineNumberingSet;
+ bool m_bIsInFootnoteProperties;
+ bool m_bIsCustomFtnMark;
+
+ //registered frame properties
+ ::com::sun::star::uno::Sequence< beans::PropertyValue > m_aFrameProperties;
+ ::com::sun::star::uno::Reference< text::XTextRange > m_xFrameStartRange;
+ ::com::sun::star::uno::Reference< text::XTextRange > m_xFrameEndRange;
+
+ // Redline stack
+ std::vector< RedlineParamsPtr > m_aRedlines;
+ RedlineParamsPtr m_pParaRedline;
+ bool m_bIsParaChange;
+
+ bool m_bParaChanged;
+ bool m_bIsLastParaInSection;
+
+ //annotation import
+ uno::Reference< beans::XPropertySet > m_xAnnotationField;
+
+ void GetCurrentLocale(::com::sun::star::lang::Locale& rLocale);
+ void SetNumberFormat( const ::rtl::OUString& rCommand,
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xPropertySet );
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
+ FindOrCreateFieldMaster( const sal_Char* pFieldMasterService,
+ const ::rtl::OUString& rFieldMasterName )
+ throw(::com::sun::star::uno::Exception);
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > GetDocumentSettings();
+
+public:
+ DomainMapper_Impl(
+ DomainMapper& rDMapper,
+ uno::Reference < uno::XComponentContext > xContext,
+ uno::Reference< lang::XComponent > xModel,
+ SourceDocumentType eDocumentType );
+ DomainMapper_Impl();
+ virtual ~DomainMapper_Impl();
+
+ SectionPropertyMap* GetLastSectionContext( )
+ {
+ return dynamic_cast< SectionPropertyMap* >( m_pLastSectionContext.get( ) );
+ }
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > GetPageStyles();
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XText > GetBodyText();
+ ::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory > GetTextFactory() const
+ {
+ return m_xTextFactory;
+ }
+ ::com::sun::star::uno::Reference < com::sun::star::uno::XComponentContext > GetComponentContext() const
+ {
+ return m_xComponentContext;
+ }
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextDocument > GetTextDocument() const
+ {
+ return m_xTextDocument;
+ }
+ void SetDocumentSettingsProperty( const ::rtl::OUString& rPropName, const uno::Any& rValue );
+
+ void CreateRedline( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xRange, RedlineParamsPtr& pRedline );
+
+ void CheckParaRedline( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xRange );
+
+ void CheckRedline( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xRange );
+
+ void StartParaChange( );
+ void EndParaChange( );
+
+ void RemoveLastParagraph( );
+ void SetIsLastParagraphInSection( bool bIsLast );
+
+ void deferBreak( BreakType deferredBreakType );
+ bool isBreakDeferred( BreakType deferredBreakType );
+ void clearDeferredBreaks();
+ void finishParagraph( PropertyMapPtr pPropertyMap );
+ void appendTextPortion( const ::rtl::OUString& rString, PropertyMapPtr pPropertyMap );
+ void appendTextContent( const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent >,
+ const uno::Sequence< beans::PropertyValue > );
+ void appendOLE( const ::rtl::OUString& rStreamName, OLEHandlerPtr pOleHandler );
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > appendTextSectionAfter(
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange >& xBefore );
+
+// void appendTextSection();
+
+ FIB& GetFIB() {return m_aFIB;}
+ // push the new properties onto the stack and make it the 'current' property map
+ void PushProperties(ContextType eId);
+ void PushStyleProperties(PropertyMapPtr pStyleProperties);
+ void PushListProperties(PropertyMapPtr pListProperties);
+ void PopProperties(ContextType eId);
+
+ ContextType GetTopContextType() const { return m_aContextStack.top(); }
+ PropertyMapPtr GetTopContext()
+ {
+ return m_pTopContext;
+ }
+ PropertyMapPtr GetTopContextOfType(ContextType eId);
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextAppend > GetTopTextAppend();
+
+ FontTablePtr GetFontTable()
+ {
+ if(!m_pFontTable)
+ m_pFontTable.reset(new FontTable());
+ return m_pFontTable;
+ }
+ StyleSheetTablePtr GetStyleSheetTable()
+ {
+ if(!m_pStyleSheetTable)
+ m_pStyleSheetTable.reset(new StyleSheetTable( m_rDMapper, m_xTextDocument ));
+ return m_pStyleSheetTable;
+ }
+ ListsManager::Pointer GetListTable();
+ ThemeTablePtr GetThemeTable()
+ {
+ if(!m_pThemeTable)
+ m_pThemeTable.reset( new ThemeTable );
+ return m_pThemeTable;
+ }
+
+ SettingsTablePtr GetSettingsTable()
+ {
+ if( !m_pSettingsTable )
+ m_pSettingsTable.reset( new SettingsTable( m_rDMapper, m_xTextFactory ) );
+ return m_pSettingsTable;
+ }
+
+ GraphicImportPtr GetGraphicImport( GraphicImportType eGraphicImportType );
+ void ResetGraphicImport();
+ // this method deletes the current m_pGraphicImport after import
+ void ImportGraphic(writerfilter::Reference< Properties>::Pointer_t, GraphicImportType eGraphicImportType );
+
+ void InitTabStopFromStyle( const ::com::sun::star::uno::Sequence< ::com::sun::star::style::TabStop >& rInitTabStops );
+ void ModifyCurrentTabStop( Id nId, sal_Int32 nValue);
+ void IncorporateTabStop( const DeletableTabStop &aTabStop );
+ ::com::sun::star::uno::Sequence< ::com::sun::star::style::TabStop > GetCurrentTabStopAndClear();
+ void NextTabStop() {++m_nCurrentTabStopIndex;}
+
+ void SetCurrentParaStyleId(::rtl::OUString sStringValue) {m_sCurrentParaStyleId = sStringValue;}
+ ::rtl::OUString GetCurrentParaStyleId() const {return m_sCurrentParaStyleId;}
+
+ ::com::sun::star::uno::Any GetPropertyFromStyleSheet(PropertyIds eId);
+ void SetStyleSheetImport( bool bSet ) { m_bInStyleSheetImport = bSet;}
+ bool IsStyleSheetImport()const { return m_bInStyleSheetImport;}
+ void SetAnyTableImport( bool bSet ) { m_bInAnyTableImport = bSet;}
+ bool IsAnyTableImport()const { return m_bInAnyTableImport;}
+
+ void PushShapeContext( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+ void PopShapeContext();
+
+ void PushPageHeader(SectionPropertyMap::PageType eType);
+ void PushPageFooter(SectionPropertyMap::PageType eType);
+
+ void PopPageHeaderFooter();
+
+ void PushFootOrEndnote( bool bIsFootnote );
+ void PopFootOrEndnote();
+
+ void PushAnnotation();
+ void PopAnnotation();
+
+ //field context starts with a 0x13
+ void PushFieldContext();
+ //the current field context waits for the completion of the command
+ bool IsOpenFieldCommand() const;
+ bool IsOpenField() const;
+ //collect the pieces of the command
+ void AppendFieldCommand(::rtl::OUString& rPartOfCommand);
+ 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();
+
+ void AddBookmark( const ::rtl::OUString& rBookmarkName, const ::rtl::OUString& rId );
+
+ DomainMapperTableManager& getTableManager()
+ {
+ boost::shared_ptr< DomainMapperTableManager > pMngr = m_aTableManagers.top();
+ return *pMngr.get( );
+ }
+
+ void appendTableManager( )
+ {
+ boost::shared_ptr< DomainMapperTableManager > pMngr(
+ new DomainMapperTableManager( m_eDocumentType == DOCUMENT_OOXML ) );
+ m_aTableManagers.push( pMngr );
+ }
+
+ void popTableManager( )
+ {
+ if ( m_aTableManagers.size( ) > 0 )
+ m_aTableManagers.pop( );
+ }
+
+ void SetLineNumbering( sal_Int32 nLnnMod, sal_Int32 nLnc, sal_Int32 ndxaLnn );
+ bool IsLineNumberingSet() const {return m_bLineNumberingSet;}
+
+ DeletableTabStop m_aCurrentTabStop;
+
+ bool IsOOXMLImport() const { return m_eDocumentType == DOCUMENT_OOXML; }
+
+ void InitPageMargins() { m_aPageMargins = _PageMar(); }
+ void SetPageMarginTwip( PageMarElement eElement, sal_Int32 nValue );
+ const _PageMar& GetPageMargins() const {return m_aPageMargins;}
+
+ const LineNumberSettings& GetLineNumberSettings() const { return m_aLineNumberSettings;}
+ void SetLineNumberSettings(const LineNumberSettings& rSet) { m_aLineNumberSettings = rSet;}
+
+ void SetInFootnoteProperties(bool bSet) { m_bIsInFootnoteProperties = bSet;}
+ bool IsInFootnoteProperties() const { return m_bIsInFootnoteProperties;}
+
+ void SetCustomFtnMark(bool bSet) { m_bIsCustomFtnMark = bSet; }
+ bool IsCustomFtnMark() const { return m_bIsCustomFtnMark; }
+
+ void RegisterFrameConversion(
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xFrameStartRange,
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xFrameEndRange,
+ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > aFrameProperties
+ );
+ bool ExecuteFrameConversion();
+
+ void AddNewRedline( );
+
+ RedlineParamsPtr GetTopRedline( );
+
+ sal_Int32 GetCurrentRedlineToken( );
+ void SetCurrentRedlineAuthor( rtl::OUString sAuthor );
+ void SetCurrentRedlineDate( rtl::OUString sDate );
+ void SetCurrentRedlineId( sal_Int32 nId );
+ void SetCurrentRedlineToken( sal_Int32 nToken );
+ void RemoveCurrentRedline( );
+ void ResetParaRedline( );
+
+ void ApplySettingsTable();
+ SectionPropertyMap * GetSectionContext();
+};
+} //namespace dmapper
+} //namespace writerfilter
+#endif
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..6decd84d2786
--- /dev/null
+++ b/writerfilter/source/dmapper/FFDataHandler.cxx
@@ -0,0 +1,469 @@
+/*************************************************************************
+ *
+ * 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>
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+namespace dmapper {
+
+/************************
+ * class: FFDataHandler *
+ ************************/
+
+FFDataHandler::FFDataHandler() :
+LoggedProperties(dmapper_logger, "FFDataHandler"),
+m_bEnabled(false),
+m_bCalcOnExit(false),
+m_nHelpTextType(0),
+m_nStatusTextType(0),
+m_nCheckboxHeight(0),
+m_bCheckboxAutoHeight(false),
+m_bCheckboxDefault(false),
+m_bCheckboxChecked(false),
+m_nTextType(0),
+m_nTextMaxLength(0)
+{
+}
+
+
+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::lcl_sprm(Sprm & r_Sprm)
+{
+ 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;
+ }
+}
+
+void FFDataHandler::resolveSprm(Sprm & r_Sprm)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = r_Sprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+}
+
+void FFDataHandler::lcl_attribute(Id name, Value & val)
+{
+ 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..b1c7ff2ea7fb
--- /dev/null
+++ b/writerfilter/source/dmapper/FFDataHandler.hxx
@@ -0,0 +1,163 @@
+/*************************************************************************
+ *
+ * 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/LoggedResources.hxx>
+#include <rtl/ustring.hxx>
+namespace writerfilter {
+namespace dmapper {
+class FFDataHandler : public LoggedProperties
+{
+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 resolveSprm(Sprm & r_sprm);
+
+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;
+
+ // sprm
+ void lcl_sprm(Sprm & r_sprm);
+
+ // attribute
+ void lcl_attribute(Id name, Value & val);
+};
+
+
+}}
+#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/FontTable.cxx b/writerfilter/source/dmapper/FontTable.cxx
new file mode 100644
index 000000000000..fd6f15660557
--- /dev/null
+++ b/writerfilter/source/dmapper/FontTable.cxx
@@ -0,0 +1,678 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <FontTable.hxx>
+#ifndef INCLUDED_RESOURCESIDS
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#endif
+#include <vector>
+#include <stdio.h>
+
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+namespace dmapper
+{
+
+struct FontTable_Impl
+{
+ std::vector< FontEntry::Pointer_t > aFontEntries;
+ FontEntry::Pointer_t pCurrentEntry;
+ FontTable_Impl() {}
+};
+/*-- 19.06.2006 12:04:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+FontTable::FontTable()
+: LoggedProperties(dmapper_logger, "FontTable")
+, LoggedTable(dmapper_logger, "FontTable")
+, LoggedStream(dmapper_logger, "FontTable")
+, m_pImpl( new FontTable_Impl )
+{
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+FontTable::~FontTable()
+{
+ delete m_pImpl;
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_attribute(Id Name, Value & val)
+{
+ OSL_ENSURE( m_pImpl->pCurrentEntry, "current entry has to be set here");
+ if(!m_pImpl->pCurrentEntry)
+ return ;
+ int nIntValue = val.getInt();
+ ::rtl::OUString sValue = val.getString();
+ //printf ( "FontTable::attribute(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)Name, (unsigned int)nIntValue, ::rtl::OUStringToOString(sValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+ /* WRITERFILTERSTATUS: table: FontTable_attributedata */
+ switch(Name)
+ {
+// case NS_rtf::LN_ISTD: break;
+// case NS_rtf::LN_ISTARTAT: break;
+// case NS_rtf::LN_NFC: break;
+// case NS_rtf::LN_JC: break;
+// case NS_rtf::LN_FLEGAL: break;
+// case NS_rtf::LN_FNORESTART: break;
+// case NS_rtf::LN_FPREV: break;
+// case NS_rtf::LN_FPREVSPACE: break;
+// case NS_rtf::LN_FWORD6: break;
+// case NS_rtf::LN_UNUSED5_7: break;
+// case NS_rtf::LN_RGBXCHNUMS: break;
+// case NS_rtf::LN_IXCHFOLLOW: break;
+// case NS_rtf::LN_DXASPACE: break;
+// case NS_rtf::LN_DXAINDENT: break;
+// case NS_rtf::LN_CBGRPPRLCHPX: break;
+// case NS_rtf::LN_CBGRPPRLPAPX: break;
+// case NS_rtf::LN_LSID: break;
+// case NS_rtf::LN_TPLC: break;
+// case NS_rtf::LN_RGISTD: break;
+// case NS_rtf::LN_FSIMPLELIST: break;
+// case NS_rtf::LN_FRESTARTHDN: break;
+// case NS_rtf::LN_UNSIGNED26_2: break;
+// case NS_rtf::LN_ILVL: break;
+// case NS_rtf::LN_FSTARTAT: break;
+// case NS_rtf::LN_FFORMATTING: break;
+// case NS_rtf::LN_UNSIGNED4_6: break;
+// case NS_rtf::LN_UNUSED4: break;
+// case NS_rtf::LN_UNUSED8: break;
+// case NS_rtf::LN_CLFOLVL: break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_CBFFNM1:
+ m_pImpl->pCurrentEntry->sFontName1 = sValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_PRQ:
+ m_pImpl->pCurrentEntry->nPitchRequest = static_cast<sal_Int16>( nIntValue );
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_FTRUETYPE:
+ m_pImpl->pCurrentEntry->bTrueType = nIntValue == 1 ? true : false;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNUSED1_3: //unused
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FF: //unused
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNUSED1_7: //unused
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_WWEIGHT:
+ m_pImpl->pCurrentEntry->nBaseWeight = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_CHS:
+ m_pImpl->pCurrentEntry->nTextEncoding = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_IXCHSZALT:
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_PANOSE:
+ m_pImpl->pCurrentEntry->sPanose += sValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_FS:
+ m_pImpl->pCurrentEntry->sFontSignature += sValue;
+ break;
+// case NS_rtf::LN_STI: break;
+// case NS_rtf::LN_FSCRATCH: break;
+// case NS_rtf::LN_FINVALHEIGHT: break;
+// case NS_rtf::LN_FHASUPE: break;
+// case NS_rtf::LN_FMASSCOPY: break;
+// case NS_rtf::LN_SGC: break;
+// case NS_rtf::LN_ISTDBASE: break;
+// case NS_rtf::LN_CUPX: break;
+// case NS_rtf::LN_ISTDNEXT: break;
+// case NS_rtf::LN_BCHUPE: break;
+// case NS_rtf::LN_FAUTOREDEF: break;
+// case NS_rtf::LN_FHIDDEN: break;
+// case NS_rtf::LN_UNUSED8_3: break;
+// case NS_rtf::LN_CSTD: break;
+// case NS_rtf::LN_CBSTDBASEINFILE: break;
+// case NS_rtf::LN_FSTDSTYLENAMESWRITTEN: break;
+// case NS_rtf::LN_UNUSED4_2: break;
+// case NS_rtf::LN_STIMAXWHENSAVED: break;
+// case NS_rtf::LN_ISTDMAXFIXEDWHENSAVED: break;
+// case NS_rtf::LN_NVERBUILTINNAMESWHENSAVED: break;
+// case NS_rtf::LN_RGFTCSTANDARDCHPSTSH: break;
+// case NS_rtf::LN_WIDENT: break;
+// case NS_rtf::LN_NFIB: break;
+// case NS_rtf::LN_NPRODUCT: break;
+// case NS_rtf::LN_LID: break;
+// case NS_rtf::LN_PNNEXT: break;
+// case NS_rtf::LN_FDOT: break;
+// case NS_rtf::LN_FGLSY: break;
+// case NS_rtf::LN_FCOMPLEX: break;
+// case NS_rtf::LN_FHASPIC: break;
+// case NS_rtf::LN_CQUICKSAVES: break;
+// case NS_rtf::LN_FENCRYPTED: break;
+// case NS_rtf::LN_FWHICHTBLSTM: break;
+// case NS_rtf::LN_FREADONLYRECOMMENDED: break;
+// case NS_rtf::LN_FWRITERESERVATION: break;
+// case NS_rtf::LN_FEXTCHAR: break;
+// case NS_rtf::LN_FLOADOVERRIDE: break;
+// case NS_rtf::LN_FFAREAST: break;
+// case NS_rtf::LN_FCRYPTO: break;
+// case NS_rtf::LN_NFIBBACK: break;
+// case NS_rtf::LN_LKEY: break;
+// case NS_rtf::LN_ENVR: break;
+// case NS_rtf::LN_FMAC: break;
+// case NS_rtf::LN_FEMPTYSPECIAL: break;
+// case NS_rtf::LN_FLOADOVERRIDEPAGE: break;
+// case NS_rtf::LN_FFUTURESAVEDUNDO: break;
+// case NS_rtf::LN_FWORD97SAVED: break;
+// case NS_rtf::LN_FSPARE0: break;
+// case NS_rtf::LN_CHSTABLES: break;
+// case NS_rtf::LN_FCMIN: break;
+// case NS_rtf::LN_FCMAC: break;
+// case NS_rtf::LN_CSW: break;
+// case NS_rtf::LN_WMAGICCREATED: break;
+// case NS_rtf::LN_WMAGICREVISED: break;
+// case NS_rtf::LN_WMAGICCREATEDPRIVATE: break;
+// case NS_rtf::LN_WMAGICREVISEDPRIVATE: break;
+// case NS_rtf::LN_PNFBPCHPFIRST_W6: break;
+// case NS_rtf::LN_PNCHPFIRST_W6: break;
+// case NS_rtf::LN_CPNBTECHP_W6: break;
+// case NS_rtf::LN_PNFBPPAPFIRST_W6: break;
+// case NS_rtf::LN_PNPAPFIRST_W6: break;
+// case NS_rtf::LN_CPNBTEPAP_W6: break;
+// case NS_rtf::LN_PNFBPLVCFIRST_W6: break;
+// case NS_rtf::LN_PNLVCFIRST_W6: break;
+// case NS_rtf::LN_CPNBTELVC_W6: break;
+// case NS_rtf::LN_LIDFE: break;
+// case NS_rtf::LN_CLW: break;
+// case NS_rtf::LN_CBMAC: break;
+// case NS_rtf::LN_LPRODUCTCREATED: break;
+// case NS_rtf::LN_LPRODUCTREVISED: break;
+// case NS_rtf::LN_CCPTEXT: break;
+// case NS_rtf::LN_CCPFTN: break;
+// case NS_rtf::LN_CCPHDD: break;
+// case NS_rtf::LN_CCPMCR: break;
+// case NS_rtf::LN_CCPATN: break;
+// case NS_rtf::LN_CCPEDN: break;
+// case NS_rtf::LN_CCPTXBX: break;
+// case NS_rtf::LN_CCPHDRTXBX: break;
+// case NS_rtf::LN_PNFBPCHPFIRST: break;
+// case NS_rtf::LN_PNCHPFIRST: break;
+// case NS_rtf::LN_CPNBTECHP: break;
+// case NS_rtf::LN_PNFBPPAPFIRST: break;
+// case NS_rtf::LN_PNPAPFIRST: break;
+// case NS_rtf::LN_CPNBTEPAP: break;
+// case NS_rtf::LN_PNFBPLVCFIRST: break;
+// case NS_rtf::LN_PNLVCFIRST: break;
+// case NS_rtf::LN_CPNBTELVC: break;
+// case NS_rtf::LN_FCISLANDFIRST: break;
+// case NS_rtf::LN_FCISLANDLIM: break;
+// case NS_rtf::LN_CFCLCB: break;
+// case NS_rtf::LN_FCSTSHFORIG: break;
+// case NS_rtf::LN_LCBSTSHFORIG: break;
+// case NS_rtf::LN_FCSTSHF: break;
+// case NS_rtf::LN_LCBSTSHF: break;
+// case NS_rtf::LN_FCPLCFFNDREF: break;
+// case NS_rtf::LN_LCBPLCFFNDREF: break;
+// case NS_rtf::LN_FCPLCFFNDTXT: break;
+// case NS_rtf::LN_LCBPLCFFNDTXT: break;
+// case NS_rtf::LN_FCPLCFANDREF: break;
+// case NS_rtf::LN_LCBPLCFANDREF: break;
+// case NS_rtf::LN_FCPLCFANDTXT: break;
+// case NS_rtf::LN_LCBPLCFANDTXT: break;
+// case NS_rtf::LN_FCPLCFSED: break;
+// case NS_rtf::LN_LCBPLCFSED: break;
+// case NS_rtf::LN_FCPLCFPAD: break;
+// case NS_rtf::LN_LCBPLCFPAD: break;
+// case NS_rtf::LN_FCPLCFPHE: break;
+// case NS_rtf::LN_LCBPLCFPHE: break;
+// case NS_rtf::LN_FCSTTBFGLSY: break;
+// case NS_rtf::LN_LCBSTTBFGLSY: break;
+// case NS_rtf::LN_FCPLCFGLSY: break;
+// case NS_rtf::LN_LCBPLCFGLSY: break;
+// case NS_rtf::LN_FCPLCFHDD: break;
+// case NS_rtf::LN_LCBPLCFHDD: break;
+// case NS_rtf::LN_FCPLCFBTECHPX: break;
+// case NS_rtf::LN_LCBPLCFBTECHPX: break;
+// case NS_rtf::LN_FCPLCFBTEPAPX: break;
+// case NS_rtf::LN_LCBPLCFBTEPAPX: break;
+// case NS_rtf::LN_FCPLCFSEA: break;
+// case NS_rtf::LN_LCBPLCFSEA: break;
+// case NS_rtf::LN_FCSTTBFFFN: break;
+// case NS_rtf::LN_LCBSTTBFFFN: break;
+// case NS_rtf::LN_FCPLCFFLDMOM: break;
+// case NS_rtf::LN_LCBPLCFFLDMOM: break;
+// case NS_rtf::LN_FCPLCFFLDHDR: break;
+// case NS_rtf::LN_LCBPLCFFLDHDR: break;
+// case NS_rtf::LN_FCPLCFFLDFTN: break;
+// case NS_rtf::LN_LCBPLCFFLDFTN: break;
+// case NS_rtf::LN_FCPLCFFLDATN: break;
+// case NS_rtf::LN_LCBPLCFFLDATN: break;
+// case NS_rtf::LN_FCPLCFFLDMCR: break;
+// case NS_rtf::LN_LCBPLCFFLDMCR: break;
+// case NS_rtf::LN_FCSTTBFBKMK: break;
+// case NS_rtf::LN_LCBSTTBFBKMK: break;
+// case NS_rtf::LN_FCPLCFBKF: break;
+// case NS_rtf::LN_LCBPLCFBKF: break;
+// case NS_rtf::LN_FCPLCFBKL: break;
+// case NS_rtf::LN_LCBPLCFBKL: break;
+// case NS_rtf::LN_FCCMDS: break;
+// case NS_rtf::LN_LCBCMDS: break;
+// case NS_rtf::LN_FCPLCMCR: break;
+// case NS_rtf::LN_LCBPLCMCR: break;
+// case NS_rtf::LN_FCSTTBFMCR: break;
+// case NS_rtf::LN_LCBSTTBFMCR: break;
+// case NS_rtf::LN_FCPRDRVR: break;
+// case NS_rtf::LN_LCBPRDRVR: break;
+// case NS_rtf::LN_FCPRENVPORT: break;
+// case NS_rtf::LN_LCBPRENVPORT: break;
+// case NS_rtf::LN_FCPRENVLAND: break;
+// case NS_rtf::LN_LCBPRENVLAND: break;
+// case NS_rtf::LN_FCWSS: break;
+// case NS_rtf::LN_LCBWSS: break;
+// case NS_rtf::LN_FCDOP: break;
+// case NS_rtf::LN_LCBDOP: break;
+// case NS_rtf::LN_FCSTTBFASSOC: break;
+// case NS_rtf::LN_LCBSTTBFASSOC: break;
+// case NS_rtf::LN_FCCLX: break;
+// case NS_rtf::LN_LCBCLX: break;
+// case NS_rtf::LN_FCPLCFPGDFTN: break;
+// case NS_rtf::LN_LCBPLCFPGDFTN: break;
+// case NS_rtf::LN_FCAUTOSAVESOURCE: break;
+// case NS_rtf::LN_LCBAUTOSAVESOURCE: break;
+// case NS_rtf::LN_FCGRPXSTATNOWNERS: break;
+// case NS_rtf::LN_LCBGRPXSTATNOWNERS: break;
+// case NS_rtf::LN_FCSTTBFATNBKMK: break;
+// case NS_rtf::LN_LCBSTTBFATNBKMK: break;
+// case NS_rtf::LN_FCPLCDOAMOM: break;
+// case NS_rtf::LN_LCBPLCDOAMOM: break;
+// case NS_rtf::LN_FCPLCDOAHDR: break;
+// case NS_rtf::LN_LCBPLCDOAHDR: break;
+// case NS_rtf::LN_FCPLCSPAMOM: break;
+// case NS_rtf::LN_LCBPLCSPAMOM: break;
+// case NS_rtf::LN_FCPLCSPAHDR: break;
+// case NS_rtf::LN_LCBPLCSPAHDR: break;
+// case NS_rtf::LN_FCPLCFATNBKF: break;
+// case NS_rtf::LN_LCBPLCFATNBKF: break;
+// case NS_rtf::LN_FCPLCFATNBKL: break;
+// case NS_rtf::LN_LCBPLCFATNBKL: break;
+// case NS_rtf::LN_FCPMS: break;
+// case NS_rtf::LN_LCBPMS: break;
+// case NS_rtf::LN_FCFORMFLDSTTBF: break;
+// case NS_rtf::LN_LCBFORMFLDSTTBF: break;
+// case NS_rtf::LN_FCPLCFENDREF: break;
+// case NS_rtf::LN_LCBPLCFENDREF: break;
+// case NS_rtf::LN_FCPLCFENDTXT: break;
+// case NS_rtf::LN_LCBPLCFENDTXT: break;
+// case NS_rtf::LN_FCPLCFFLDEDN: break;
+// case NS_rtf::LN_LCBPLCFFLDEDN: break;
+// case NS_rtf::LN_FCPLCFPGDEDN: break;
+// case NS_rtf::LN_LCBPLCFPGDEDN: break;
+// case NS_rtf::LN_FCDGGINFO: break;
+// case NS_rtf::LN_LCBDGGINFO: break;
+// case NS_rtf::LN_FCSTTBFRMARK: break;
+// case NS_rtf::LN_LCBSTTBFRMARK: break;
+// case NS_rtf::LN_FCSTTBFCAPTION: break;
+// case NS_rtf::LN_LCBSTTBFCAPTION: break;
+// case NS_rtf::LN_FCSTTBFAUTOCAPTION: break;
+// case NS_rtf::LN_LCBSTTBFAUTOCAPTION: break;
+// case NS_rtf::LN_FCPLCFWKB: break;
+// case NS_rtf::LN_LCBPLCFWKB: break;
+// case NS_rtf::LN_FCPLCFSPL: break;
+// case NS_rtf::LN_LCBPLCFSPL: break;
+// case NS_rtf::LN_FCPLCFTXBXTXT: break;
+// case NS_rtf::LN_LCBPLCFTXBXTXT: break;
+// case NS_rtf::LN_FCPLCFFLDTXBX: break;
+// case NS_rtf::LN_LCBPLCFFLDTXBX: break;
+// case NS_rtf::LN_FCPLCFHDRTXBXTXT: break;
+// case NS_rtf::LN_LCBPLCFHDRTXBXTXT: break;
+// case NS_rtf::LN_FCPLCFFLDHDRTXBX: break;
+// case NS_rtf::LN_LCBPLCFFLDHDRTXBX: break;
+// case NS_rtf::LN_FCSTWUSER: break;
+// case NS_rtf::LN_LCBSTWUSER: break;
+// case NS_rtf::LN_FCSTTBTTMBD: break;
+// case NS_rtf::LN_LCBSTTBTTMBD: break;
+// case NS_rtf::LN_FCUNUSED: break;
+// case NS_rtf::LN_LCBUNUSED: break;
+// case NS_rtf::LN_FCPGDMOTHER: break;
+// case NS_rtf::LN_LCBPGDMOTHER: break;
+// case NS_rtf::LN_FCBKDMOTHER: break;
+// case NS_rtf::LN_LCBBKDMOTHER: break;
+// case NS_rtf::LN_FCPGDFTN: break;
+// case NS_rtf::LN_LCBPGDFTN: break;
+// case NS_rtf::LN_FCBKDFTN: break;
+// case NS_rtf::LN_LCBBKDFTN: break;
+// case NS_rtf::LN_FCPGDEDN: break;
+// case NS_rtf::LN_LCBPGDEDN: break;
+// case NS_rtf::LN_FCBKDEDN: break;
+// case NS_rtf::LN_LCBBKDEDN: break;
+// case NS_rtf::LN_FCSTTBFINTLFLD: break;
+// case NS_rtf::LN_LCBSTTBFINTLFLD: break;
+// case NS_rtf::LN_FCROUTESLIP: break;
+// case NS_rtf::LN_LCBROUTESLIP: break;
+// case NS_rtf::LN_FCSTTBSAVEDBY: break;
+// case NS_rtf::LN_LCBSTTBSAVEDBY: break;
+// case NS_rtf::LN_FCSTTBFNM: break;
+// case NS_rtf::LN_LCBSTTBFNM: break;
+// case NS_rtf::LN_FCPLCFLST: break;
+// case NS_rtf::LN_LCBPLCFLST: break;
+// case NS_rtf::LN_FCPLFLFO: break;
+// case NS_rtf::LN_LCBPLFLFO: break;
+// case NS_rtf::LN_FCPLCFTXBXBKD: break;
+// case NS_rtf::LN_LCBPLCFTXBXBKD: break;
+// case NS_rtf::LN_FCPLCFTXBXHDRBKD: break;
+// case NS_rtf::LN_LCBPLCFTXBXHDRBKD: break;
+// case NS_rtf::LN_FCDOCUNDO: break;
+// case NS_rtf::LN_LCBDOCUNDO: break;
+// case NS_rtf::LN_FCRGBUSE: break;
+// case NS_rtf::LN_LCBRGBUSE: break;
+// case NS_rtf::LN_FCUSP: break;
+// case NS_rtf::LN_LCBUSP: break;
+// case NS_rtf::LN_FCUSKF: break;
+// case NS_rtf::LN_LCBUSKF: break;
+// case NS_rtf::LN_FCPLCUPCRGBUSE: break;
+// case NS_rtf::LN_LCBPLCUPCRGBUSE: break;
+// case NS_rtf::LN_FCPLCUPCUSP: break;
+// case NS_rtf::LN_LCBPLCUPCUSP: break;
+// case NS_rtf::LN_FCSTTBGLSYSTYLE: break;
+// case NS_rtf::LN_LCBSTTBGLSYSTYLE: break;
+// case NS_rtf::LN_FCPLGOSL: break;
+// case NS_rtf::LN_LCBPLGOSL: break;
+// case NS_rtf::LN_FCPLCOCX: break;
+// case NS_rtf::LN_LCBPLCOCX: break;
+// case NS_rtf::LN_FCPLCFBTELVC: break;
+// case NS_rtf::LN_LCBPLCFBTELVC: break;
+// case NS_rtf::LN_DWLOWDATETIME: break;
+// case NS_rtf::LN_DWHIGHDATETIME: break;
+// case NS_rtf::LN_FCPLCFLVC: break;
+// case NS_rtf::LN_LCBPLCFLVC: break;
+// case NS_rtf::LN_FCPLCASUMY: break;
+// case NS_rtf::LN_LCBPLCASUMY: break;
+// case NS_rtf::LN_FCPLCFGRAM: break;
+// case NS_rtf::LN_LCBPLCFGRAM: break;
+// case NS_rtf::LN_FCSTTBLISTNAMES: break;
+// case NS_rtf::LN_LCBSTTBLISTNAMES: break;
+// case NS_rtf::LN_FCSTTBFUSSR: break;
+// case NS_rtf::LN_LCBSTTBFUSSR: break;
+// case NS_rtf::LN_FN: break;
+// case NS_rtf::LN_FCSEPX: break;
+// case NS_rtf::LN_FNMPR: break;
+// case NS_rtf::LN_FCMPR: break;
+// case NS_rtf::LN_ICOFORE: break;
+// case NS_rtf::LN_ICOBACK: break;
+// case NS_rtf::LN_IPAT: break;
+// case NS_rtf::LN_SHDFORECOLOR: break;
+// case NS_rtf::LN_SHDBACKCOLOR: break;
+// case NS_rtf::LN_SHDPATTERN: break;
+// case NS_rtf::LN_DPTLINEWIDTH: break;
+// case NS_rtf::LN_BRCTYPE: break;
+// case NS_rtf::LN_ICO: break;
+// case NS_rtf::LN_DPTSPACE: break;
+// case NS_rtf::LN_FSHADOW: break;
+// case NS_rtf::LN_FFRAME: break;
+// case NS_rtf::LN_UNUSED2_15: break;
+// case NS_rtf::LN_FFIRSTMERGED: break;
+// case NS_rtf::LN_FMERGED: break;
+// case NS_rtf::LN_FVERTICAL: break;
+// case NS_rtf::LN_FBACKWARD: break;
+// case NS_rtf::LN_FROTATEFONT: break;
+// case NS_rtf::LN_FVERTMERGE: break;
+// case NS_rtf::LN_FVERTRESTART: break;
+// case NS_rtf::LN_VERTALIGN: break;
+// case NS_rtf::LN_FUNUSED: break;
+// case NS_rtf::LN_WUNUSED: break;
+// case NS_rtf::LN_BRCTOP: break;
+// case NS_rtf::LN_BRCLEFT: break;
+// case NS_rtf::LN_BRCBOTTOM: break;
+// case NS_rtf::LN_BRCRIGHT: break;
+// case NS_rtf::LN_IBKL: break;
+// case NS_rtf::LN_ITCFIRST: break;
+// case NS_rtf::LN_FPUB: break;
+// case NS_rtf::LN_ITCLIM: break;
+// case NS_rtf::LN_FCOL: break;
+// case NS_rtf::LN_LINECOLOR: break;
+// case NS_rtf::LN_LINEWIDTH: break;
+// case NS_rtf::LN_LINETYPE: break;
+// case NS_rtf::LN_MM: break;
+// case NS_rtf::LN_XEXT: break;
+// case NS_rtf::LN_YEXT: break;
+// case NS_rtf::LN_HMF: break;
+// case NS_rtf::LN_LCB: break;
+// case NS_rtf::LN_CBHEADER: break;
+// case NS_rtf::LN_MFP: break;
+// case NS_rtf::LN_BM_RCWINMF: break;
+// case NS_rtf::LN_DXAGOAL: break;
+// case NS_rtf::LN_DYAGOAL: break;
+// case NS_rtf::LN_MX: break;
+// case NS_rtf::LN_MY: break;
+// case NS_rtf::LN_DXACROPLEFT: break;
+// case NS_rtf::LN_DYACROPTOP: break;
+// case NS_rtf::LN_DXACROPRIGHT: break;
+// case NS_rtf::LN_DYACROPBOTTOM: break;
+// case NS_rtf::LN_BRCL: break;
+// case NS_rtf::LN_FFRAMEEMPTY: break;
+// case NS_rtf::LN_FBITMAP: break;
+// case NS_rtf::LN_FDRAWHATCH: break;
+// case NS_rtf::LN_FERROR: break;
+// case NS_rtf::LN_BPP: break;
+// case NS_rtf::LN_DXAORIGIN: break;
+// case NS_rtf::LN_DYAORIGIN: break;
+// case NS_rtf::LN_CPROPS: break;
+// case NS_rtf::LN_LINEPROPSTOP: break;
+// case NS_rtf::LN_LINEPROPSLEFT: break;
+// case NS_rtf::LN_LINEPROPSBOTTOM: break;
+// case NS_rtf::LN_LINEPROPSRIGHT: break;
+// case NS_rtf::LN_LINEPROPSHORIZONTAL: break;
+// case NS_rtf::LN_LINEPROPSVERTICAL: break;
+// case NS_rtf::LN_headerr: break;
+// case NS_rtf::LN_footerr: break;
+// case NS_rtf::LN_endnote: break;
+// case NS_rtf::LN_BOOKMARKNAME: break;
+
+// case NS_rtf::LN_LISTLEVEL: break;
+// case NS_rtf::LN_LFO: break;
+ case NS_rtf::LN_F:
+ break;
+ case NS_rtf::LN_ALTFONTNAME:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ m_pImpl->pCurrentEntry->sAlternativeFont = sValue;
+ break;
+ case NS_rtf::LN_XSZFFN:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Font_name:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ m_pImpl->pCurrentEntry->sFontName = sValue;
+ break;
+// case NS_rtf::LN_XSTZNAME: break;
+// case NS_rtf::LN_XSTZNAME1: break;
+// case NS_rtf::LN_UPXSTART: break;
+// case NS_rtf::LN_UPX: break;
+// case NS_rtf::LN_sed: break;
+// case NS_rtf::LN_picf: break;
+// case NS_rtf::LN_rgbrc: break;
+// case NS_rtf::LN_shd: break;
+// case NS_rtf::LN_cellShd: break;
+// case NS_rtf::LN_cellTopColor: break;
+// case NS_rtf::LN_cellLeftColor: break;
+// case NS_rtf::LN_cellBottomColor: break;
+// case NS_rtf::LN_cellRightColor: break;
+
+// case NS_rtf::LN_LISTTABLE: break;
+// case NS_rtf::LN_LFOTABLE: break;
+// case NS_rtf::LN_FONTTABLE: break;
+// case NS_rtf::LN_STYLESHEET: break;
+ default:
+ {
+ //----> debug
+ int nVal = val.getInt();
+ ++nVal;
+ //<---- debug
+ }
+ }
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_sprm(Sprm& rSprm)
+{
+ OSL_ENSURE( m_pImpl->pCurrentEntry, "current entry has to be set here");
+ if(!m_pImpl->pCurrentEntry)
+ return ;
+ sal_uInt32 nSprmId = rSprm.getId();
+ (void)nSprmId;
+
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = pValue->getInt();
+ (void)nIntValue;
+ rtl::OUString sStringValue = pValue->getString();
+
+ //printf ( "FontTable::sprm(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nSprmId, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+
+/* switch(nSprmId)
+ {
+ default:
+ {
+ OSL_ENSURE( false, "FontTable::sprm()"); //
+ //Value::Pointer_t pValue_ = rSprm.getValue();
+ }
+ }*/
+}
+
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ //create a new font entry
+ OSL_ENSURE( !m_pImpl->pCurrentEntry, "current entry has to be NULL here");
+ m_pImpl->pCurrentEntry.reset(new FontEntry);
+ ref->resolve(*this);
+ //append it to the table
+ m_pImpl->aFontEntries.push_back( m_pImpl->pCurrentEntry );
+ m_pImpl->pCurrentEntry.reset();
+}
+/*-- 19.06.2006 12:04:34---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_startSectionGroup()
+{
+}
+/*-- 19.06.2006 12:04:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_endSectionGroup()
+{
+}
+/*-- 19.06.2006 12:04:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_startParagraphGroup()
+{
+}
+/*-- 19.06.2006 12:04:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_endParagraphGroup()
+{
+}
+/*-- 19.06.2006 12:04:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_startCharacterGroup()
+{
+}
+/*-- 19.06.2006 12:04:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_endCharacterGroup()
+{
+}
+/*-- 19.06.2006 12:04:36---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_text(const sal_uInt8*, size_t )
+{
+}
+/*-- 19.06.2006 12:04:36---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_utext(const sal_uInt8* , size_t)
+{
+}
+/*-- 19.06.2006 12:04:37---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_props(writerfilter::Reference<Properties>::Pointer_t)
+{
+}
+/*-- 19.06.2006 12:04:37---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_table(Id, writerfilter::Reference<Table>::Pointer_t)
+{
+}
+/*-- 19.06.2006 12:04:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_substream(Id, ::writerfilter::Reference<Stream>::Pointer_t)
+{
+}
+/*-- 19.06.2006 12:04:39---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void FontTable::lcl_info(const string& )
+{
+}
+
+void FontTable::lcl_startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > )
+{
+}
+
+void FontTable::lcl_endShape( )
+{
+}
+
+/*-- 21.06.2006 11:21:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const FontEntry::Pointer_t FontTable::getFontEntry(sal_uInt32 nIndex)
+{
+ return (m_pImpl->aFontEntries.size() > nIndex)
+ ? m_pImpl->aFontEntries[nIndex]
+ : FontEntry::Pointer_t();
+}
+/*-- 21.06.2006 11:21:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_uInt32 FontTable::size()
+{
+ return m_pImpl->aFontEntries.size();
+}
+
+}//namespace dmapper
+}//namespace writerfilter
diff --git a/writerfilter/source/dmapper/FontTable.hxx b/writerfilter/source/dmapper/FontTable.hxx
new file mode 100644
index 000000000000..cc8e9458f7da
--- /dev/null
+++ b/writerfilter/source/dmapper/FontTable.hxx
@@ -0,0 +1,108 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_FONTTABLE_HXX
+#define INCLUDED_FONTTABLE_HXX
+
+#include <boost/shared_ptr.hpp>
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+#include <com/sun/star/lang/XComponent.hpp>
+
+namespace writerfilter {
+namespace dmapper
+{
+
+struct FontTable_Impl;
+struct FontEntry
+{
+ typedef boost::shared_ptr<FontEntry> Pointer_t;
+
+ ::rtl::OUString sFontName;
+ ::rtl::OUString sFontName1;
+ bool bTrueType;
+ sal_Int16 nPitchRequest;
+ sal_Int32 nTextEncoding;
+ sal_Int32 nFontFamilyId;
+ sal_Int32 nBaseWeight;
+ sal_Int32 nAltFontIndex;
+ ::rtl::OUString sPanose;
+ ::rtl::OUString sFontSignature;
+ ::rtl::OUString sAlternativeFont;
+ FontEntry() :
+ bTrueType(false),
+ nPitchRequest( 0 ),
+ nTextEncoding( 0 ),
+ nFontFamilyId( 0 ),
+ nBaseWeight( 0 ),
+ nAltFontIndex( 0 )
+ {}
+};
+
+class WRITERFILTER_DLLPRIVATE FontTable : public LoggedProperties, public LoggedTable
+ /*,public BinaryObj*/, public LoggedStream
+{
+ FontTable_Impl *m_pImpl;
+
+ public:
+ FontTable();
+ virtual ~FontTable();
+
+ sal_uInt32 size();
+ const FontEntry::Pointer_t getFontEntry(sal_uInt32 nIndex);
+
+ private:
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+ // Table
+ virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ // Stream
+ virtual void lcl_startSectionGroup();
+ virtual void lcl_endSectionGroup();
+ virtual void lcl_startParagraphGroup();
+ virtual void lcl_endParagraphGroup();
+ virtual void lcl_startCharacterGroup();
+ virtual void lcl_endCharacterGroup();
+ virtual void lcl_text(const sal_uInt8 * data, size_t len);
+ virtual void lcl_utext(const sal_uInt8 * data, size_t len);
+ virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref);
+ virtual void lcl_table(Id name,
+ writerfilter::Reference<Table>::Pointer_t ref);
+ virtual void lcl_substream(Id name,
+ ::writerfilter::Reference<Stream>::Pointer_t ref);
+ virtual void lcl_info(const string & info);
+ virtual void lcl_startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+ virtual void lcl_endShape( );
+
+};
+typedef boost::shared_ptr< FontTable > FontTablePtr;
+}}
+
+#endif //
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/GraphicHelpers.cxx b/writerfilter/source/dmapper/GraphicHelpers.cxx
new file mode 100644
index 000000000000..76ef4c7257ff
--- /dev/null
+++ b/writerfilter/source/dmapper/GraphicHelpers.cxx
@@ -0,0 +1,233 @@
+#include "ConversionHelper.hxx"
+#include "GraphicHelpers.hxx"
+
+#include <ooxml/resourceids.hxx>
+
+#include <com/sun/star/text/HoriOrientation.hpp>
+#include <com/sun/star/text/VertOrientation.hpp>
+#include <com/sun/star/text/RelOrientation.hpp>
+#include <com/sun/star/text/WrapTextMode.hpp>
+
+#include "dmapperLoggers.hxx"
+
+#include <iostream>
+using namespace std;
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace com::sun::star;
+
+PositionHandler::PositionHandler( ) :
+LoggedProperties(dmapper_logger, "PositionHandler")
+{
+ m_nOrient = text::VertOrientation::NONE;
+ m_nRelation = text::RelOrientation::FRAME;
+ m_nPosition = 0;
+}
+
+PositionHandler::~PositionHandler( )
+{
+}
+
+void PositionHandler::lcl_attribute( Id aName, Value& rVal )
+{
+ sal_Int32 nIntValue = rVal.getInt( );
+ switch ( aName )
+ {
+ case NS_ooxml::LN_CT_PosV_relativeFrom:
+ {
+ // TODO There are some other unhandled values
+ static Id pVertRelValues[] =
+ {
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_margin,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_page,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_paragraph,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromV_line
+ };
+
+ static sal_Int16 pVertRelations[] =
+ {
+ text::RelOrientation::PAGE_PRINT_AREA,
+ text::RelOrientation::PAGE_FRAME,
+ text::RelOrientation::FRAME,
+ text::RelOrientation::TEXT_LINE
+ };
+
+ for ( int i = 0; i < 4; i++ )
+ {
+ if ( pVertRelValues[i] == sal_uInt32( nIntValue ) )
+ m_nRelation = pVertRelations[i];
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_PosH_relativeFrom:
+ {
+ // TODO There are some other unhandled values
+ static Id pHoriRelValues[] =
+ {
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_margin,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_page,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_column,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_RelFromH_character
+ };
+
+ static sal_Int16 pHoriRelations[] =
+ {
+ text::RelOrientation::PAGE_PRINT_AREA,
+ text::RelOrientation::PAGE_FRAME,
+ text::RelOrientation::FRAME,
+ text::RelOrientation::CHAR,
+ };
+
+ for ( int i = 0; i < 4; i++ )
+ {
+ if ( pHoriRelValues[i] == sal_uInt32( nIntValue ) )
+ m_nRelation = pHoriRelations[i];
+ }
+ }
+ break;
+ default:
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->element("unhandled");
+#endif
+ break;
+ }
+}
+
+void PositionHandler::lcl_sprm( Sprm& rSprm )
+{
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = pValue->getInt();
+
+ switch ( rSprm.getId( ) )
+ {
+ case NS_ooxml::LN_CT_PosV_align:
+ {
+ static Id pVertValues[] =
+ {
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignV_top,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignV_bottom,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignV_center,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignV_inside,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignV_outside
+ };
+
+ static sal_Int16 pVertOrients[] =
+ {
+ text::VertOrientation::TOP,
+ text::VertOrientation::BOTTOM,
+ text::VertOrientation::CENTER,
+ text::VertOrientation::NONE,
+ text::VertOrientation::NONE
+ };
+
+ for ( int i = 0; i < 5; i++ )
+ {
+ if ( pVertValues[i] == sal_uInt32( nIntValue ) )
+ m_nOrient = pVertOrients[i];
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_PosH_align:
+ {
+ static Id pHoriValues[] =
+ {
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignH_left,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignH_right,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignH_center,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignH_inside,
+ NS_ooxml::LN_Value_wordprocessingDrawing_ST_AlignH_outside
+ };
+
+ static sal_Int16 pHoriOrients[] =
+ {
+ text::HoriOrientation::LEFT,
+ text::HoriOrientation::RIGHT,
+ text::HoriOrientation::CENTER,
+ text::HoriOrientation::INSIDE,
+ text::HoriOrientation::OUTSIDE
+ };
+
+ for ( int i = 0; i < 5; i++ )
+ {
+ if ( pHoriValues[i] == sal_uInt32( nIntValue ) )
+ m_nOrient = pHoriOrients[i];
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_PosH_posOffset:
+ case NS_ooxml::LN_CT_PosV_posOffset:
+ m_nPosition = ConversionHelper::convertEMUToMM100( nIntValue );
+ default:
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->element("unhandled");
+#endif
+ break;
+ }
+}
+
+WrapHandler::WrapHandler( ) :
+LoggedProperties(dmapper_logger, "WrapHandler"),
+ m_nType( 0 ),
+ m_nSide( 0 )
+{
+}
+
+WrapHandler::~WrapHandler( )
+{
+}
+
+void WrapHandler::lcl_attribute( Id aName, Value& rVal )
+{
+ switch ( aName )
+ {
+ case NS_ooxml::LN_CT_Wrap_type:
+ m_nType = sal_Int32( rVal.getInt( ) );
+ break;
+ case NS_ooxml::LN_CT_Wrap_side:
+ m_nSide = sal_Int32( rVal.getInt( ) );
+ break;
+ default:;
+ }
+}
+
+void WrapHandler::lcl_sprm( Sprm& )
+{
+}
+
+sal_Int32 WrapHandler::getWrapMode( )
+{
+ sal_Int32 nMode = com::sun::star::text::WrapTextMode_NONE;
+
+ switch ( m_nType )
+ {
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_square:
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_tight:
+ {
+ switch ( m_nSide )
+ {
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapSide_left:
+ nMode = com::sun::star::text::WrapTextMode_LEFT;
+ break;
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapSide_right:
+ nMode = com::sun::star::text::WrapTextMode_RIGHT;
+ break;
+ default:
+ nMode = com::sun::star::text::WrapTextMode_PARALLEL;
+ }
+ }
+ break;
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_through:
+ nMode = com::sun::star::text::WrapTextMode_THROUGHT;
+ break;
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_topAndBottom:
+ case NS_ooxml::LN_Value_vml_wordprocessingDrawing_ST_WrapType_none:
+ default:
+ nMode = com::sun::star::text::WrapTextMode_NONE;
+ }
+
+ return nMode;
+}
+
+} }
diff --git a/writerfilter/source/dmapper/GraphicHelpers.hxx b/writerfilter/source/dmapper/GraphicHelpers.hxx
new file mode 100644
index 000000000000..7127ccf22c1f
--- /dev/null
+++ b/writerfilter/source/dmapper/GraphicHelpers.hxx
@@ -0,0 +1,50 @@
+#ifndef INCLUDED_GRAPHICHELPERS_HXX
+#define INCLUDED_GRAPHICHELPERS_HXX
+
+#include "PropertyMap.hxx"
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+
+#include <boost/shared_ptr.hpp>
+
+namespace writerfilter {
+namespace dmapper
+{
+
+class WRITERFILTER_DLLPRIVATE PositionHandler: public LoggedProperties
+{
+public:
+ PositionHandler( );
+ ~PositionHandler( );
+
+ sal_Int16 m_nOrient;
+ sal_Int16 m_nRelation;
+ sal_Int32 m_nPosition;
+
+ private:
+ virtual void lcl_attribute( Id aName, Value& rVal );
+ virtual void lcl_sprm( Sprm& rSprm );
+};
+typedef boost::shared_ptr<PositionHandler> PositionHandlerPtr;
+
+class WRITERFILTER_DLLPRIVATE WrapHandler: public LoggedProperties
+{
+public:
+ WrapHandler( );
+ ~WrapHandler( );
+
+ sal_Int32 m_nType;
+ sal_Int32 m_nSide;
+
+ sal_Int32 getWrapMode( );
+
+ private:
+ virtual void lcl_attribute( Id aName, Value& rVal );
+ virtual void lcl_sprm( Sprm& rSprm );
+};
+typedef boost::shared_ptr<WrapHandler> WrapHandlerPtr;
+
+} }
+
+#endif
diff --git a/writerfilter/source/dmapper/GraphicImport.cxx b/writerfilter/source/dmapper/GraphicImport.cxx
new file mode 100644
index 000000000000..beae39a68a29
--- /dev/null
+++ b/writerfilter/source/dmapper/GraphicImport.cxx
@@ -0,0 +1,1859 @@
+/*************************************************************************
+ *
+ * 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 <string.h>
+
+#include <com/sun/star/awt/Size.hpp>
+#include <com/sun/star/container/XNamed.hpp>
+#include <com/sun/star/drawing/ColorMode.hpp>
+#include <com/sun/star/drawing/PointSequenceSequence.hpp>
+#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/graphic/XGraphicProvider.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <com/sun/star/text/GraphicCrop.hpp>
+#include <com/sun/star/text/HoriOrientation.hpp>
+#include <com/sun/star/text/RelOrientation.hpp>
+#include <com/sun/star/text/TextContentAnchorType.hpp>
+#include <com/sun/star/text/VertOrientation.hpp>
+#include <com/sun/star/text/WrapTextMode.hpp>
+#include <com/sun/star/text/XTextContent.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+#include <cppuhelper/implbase1.hxx>
+#include <rtl/ustrbuf.hxx>
+
+#include <dmapper/DomainMapper.hxx>
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <resourcemodel/ResourceModelHelper.hxx>
+
+#include "ConversionHelper.hxx"
+#include "GraphicHelpers.hxx"
+#include "GraphicImport.hxx"
+#include "PropertyMap.hxx"
+#include "WrapPolygonHandler.hxx"
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+
+using resourcemodel::resolveSprmProps;
+
+namespace dmapper
+{
+using namespace ::std;
+using namespace ::com::sun::star;
+
+class XInputStreamHelper : public cppu::WeakImplHelper1
+< io::XInputStream >
+{
+ const sal_uInt8* m_pBuffer;
+ const sal_Int32 m_nLength;
+ sal_Int32 m_nPosition;
+ bool m_bBmp;
+
+ const sal_uInt8* m_pBMPHeader; //default BMP-header
+ sal_Int32 m_nHeaderLength;
+public:
+ XInputStreamHelper(const sal_uInt8* buf, size_t len, bool bBmp);
+ ~XInputStreamHelper();
+
+ virtual ::sal_Int32 SAL_CALL readBytes( uno::Sequence< ::sal_Int8 >& aData, ::sal_Int32 nBytesToRead ) throw (io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL readSomeBytes( uno::Sequence< ::sal_Int8 >& aData, ::sal_Int32 nMaxBytesToRead ) throw (io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException);
+ virtual void SAL_CALL skipBytes( ::sal_Int32 nBytesToSkip ) throw (io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL available( ) throw (io::NotConnectedException, io::IOException, uno::RuntimeException);
+ virtual void SAL_CALL closeInput( ) throw (io::NotConnectedException, io::IOException, uno::RuntimeException);
+};
+/*-- 01.11.2006 13:56:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+XInputStreamHelper::XInputStreamHelper(const sal_uInt8* buf, size_t len, bool bBmp) :
+ m_pBuffer( buf ),
+ m_nLength( len ),
+ m_nPosition( 0 ),
+ m_bBmp( bBmp )
+{
+ static const sal_uInt8 aHeader[] =
+ {0x42, 0x4d, 0xe6, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00 };
+ m_pBMPHeader = aHeader;
+ m_nHeaderLength = m_bBmp ? sizeof( aHeader ) / sizeof(sal_uInt8) : 0;
+
+}
+/*-- 01.11.2006 13:56:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+XInputStreamHelper::~XInputStreamHelper()
+{
+}
+/*-- 01.11.2006 13:56:21---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::sal_Int32 XInputStreamHelper::readBytes( uno::Sequence< ::sal_Int8 >& aData, ::sal_Int32 nBytesToRead )
+ throw (io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException)
+{
+ return readSomeBytes( aData, nBytesToRead );
+}
+/*-- 01.11.2006 13:56:21---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::sal_Int32 XInputStreamHelper::readSomeBytes( uno::Sequence< ::sal_Int8 >& aData, ::sal_Int32 nMaxBytesToRead )
+ throw (io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException)
+{
+ sal_Int32 nRet = 0;
+ if( nMaxBytesToRead > 0 )
+ {
+ if( nMaxBytesToRead > (m_nLength + m_nHeaderLength) - m_nPosition )
+ nRet = (m_nLength + m_nHeaderLength) - m_nPosition;
+ else
+ nRet = nMaxBytesToRead;
+ aData.realloc( nRet );
+ sal_Int8* pData = aData.getArray();
+ sal_Int32 nHeaderRead = 0;
+ if( m_nPosition < m_nHeaderLength)
+ {
+ //copy header content first
+ nHeaderRead = m_nHeaderLength - m_nPosition;
+ memcpy( pData, m_pBMPHeader + (m_nPosition ), nHeaderRead );
+ nRet -= nHeaderRead;
+ m_nPosition += nHeaderRead;
+ }
+ if( nRet )
+ {
+ memcpy( pData + nHeaderRead, m_pBuffer + (m_nPosition - m_nHeaderLength), nRet );
+ m_nPosition += nRet;
+ }
+ }
+ return nRet;
+}
+/*-- 01.11.2006 13:56:21---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void XInputStreamHelper::skipBytes( ::sal_Int32 nBytesToSkip ) throw (io::NotConnectedException, io::BufferSizeExceededException, io::IOException, uno::RuntimeException)
+{
+ if( nBytesToSkip < 0 || m_nPosition + nBytesToSkip > (m_nLength + m_nHeaderLength))
+ throw io::BufferSizeExceededException();
+ m_nPosition += nBytesToSkip;
+}
+/*-- 01.11.2006 13:56:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::sal_Int32 XInputStreamHelper::available( ) throw (io::NotConnectedException, io::IOException, uno::RuntimeException)
+{
+ return ( m_nLength + m_nHeaderLength ) - m_nPosition;
+}
+/*-- 01.11.2006 13:56:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void XInputStreamHelper::closeInput( ) throw (io::NotConnectedException, io::IOException, uno::RuntimeException)
+{
+}
+/*-- 02.11.2006 09:34:29---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+struct GraphicBorderLine
+{
+ sal_Int32 nLineWidth;
+// sal_Int32 nLineType;
+ sal_Int32 nLineColor;
+ sal_Int32 nLineDistance;
+ bool bHasShadow;
+
+ GraphicBorderLine() :
+ nLineWidth(0)
+// ,nLineType(0)
+ ,nLineColor(0)
+ ,nLineDistance(0)
+ ,bHasShadow(false)
+ {}
+
+};
+
+class GraphicImport_Impl
+{
+private:
+ sal_Int32 nXSize;
+ bool bXSizeValid;
+ sal_Int32 nYSize;
+ bool bYSizeValid;
+
+public:
+ GraphicImportType eGraphicImportType;
+ DomainMapper& rDomainMapper;
+
+ sal_Int32 nHoriScaling;
+ sal_Int32 nVertScaling;
+ sal_Int32 nLeftPosition;
+ sal_Int32 nTopPosition;
+ sal_Int32 nRightPosition;
+ sal_Int32 nBottomPosition;
+ sal_Int32 nLeftCrop;
+ sal_Int32 nTopCrop;
+ sal_Int32 nRightCrop;
+ sal_Int32 nBottomCrop;
+
+ bool bUseSimplePos;
+
+ sal_Int16 nHoriOrient;
+ sal_Int16 nHoriRelation;
+ bool bPageToggle;
+ sal_Int16 nVertOrient;
+ sal_Int16 nVertRelation;
+ sal_Int32 nWrap;
+ bool bOpaque;
+ bool bContour;
+ bool bContourOutside;
+ WrapPolygon::Pointer_t mpWrapPolygon;
+ bool bIgnoreWRK;
+
+ sal_Int32 nLeftMargin;
+ sal_Int32 nRightMargin;
+ sal_Int32 nTopMargin;
+ sal_Int32 nBottomMargin;
+
+ sal_Int32 nContrast;
+ sal_Int32 nBrightness;
+ double fGamma;
+
+ sal_Int32 nFillColor;
+
+ drawing::ColorMode eColorMode;
+
+ GraphicBorderLine aBorders[4];
+ sal_Int32 nCurrentBorderLine;
+
+ sal_Int32 nDffType;
+ bool bIsGraphic;
+ bool bIsBitmap;
+ bool bIsTiff;
+ sal_Int32 nBitsPerPixel;
+
+ bool bHoriFlip;
+ bool bVertFlip;
+
+ bool bSizeProtected;
+ bool bPositionProtected;
+
+ bool bInShapeOptionMode;
+ sal_Int32 nShapeOptionType;
+
+ ::rtl::OUString sName;
+ ::rtl::OUString sAlternativeText;
+
+ GraphicImport_Impl(GraphicImportType eImportType, DomainMapper& rDMapper) :
+ nXSize(0)
+ ,bXSizeValid(false)
+ ,nYSize(0)
+ ,bYSizeValid(false)
+ ,eGraphicImportType( eImportType )
+ ,rDomainMapper( rDMapper )
+ ,nHoriScaling(0)
+ ,nVertScaling(0)
+ ,nLeftPosition(0)
+ ,nTopPosition(0)
+ ,nRightPosition(0)
+ ,nBottomPosition(0)
+ ,nLeftCrop(0)
+ ,nTopCrop (0)
+ ,nRightCrop (0)
+ ,nBottomCrop(0)
+ ,bUseSimplePos(false)
+ ,nHoriOrient( text::HoriOrientation::NONE )
+ ,nHoriRelation( text::RelOrientation::FRAME )
+ ,bPageToggle( false )
+ ,nVertOrient( text::VertOrientation::NONE )
+ ,nVertRelation( text::RelOrientation::FRAME )
+ ,nWrap(0)
+ ,bOpaque( true )
+ ,bContour(false)
+ ,bContourOutside(true)
+ ,bIgnoreWRK(true)
+ ,nLeftMargin(319)
+ ,nRightMargin(319)
+ ,nTopMargin(0)
+ ,nBottomMargin(0)
+ ,nContrast(0)
+ ,nBrightness(0)
+ ,fGamma( -1.0 )
+ ,nFillColor( 0xffffffff )
+ ,eColorMode( drawing::ColorMode_STANDARD )
+ ,nCurrentBorderLine(BORDER_TOP)
+ ,nDffType( 0 )
+ ,bIsGraphic(false)
+ ,bIsBitmap(false)
+ ,bIsTiff(false)
+ ,nBitsPerPixel(0)
+ ,bHoriFlip(false)
+ ,bVertFlip(false)
+ ,bSizeProtected(false)
+ ,bPositionProtected(false)
+ ,bInShapeOptionMode(false)
+ {}
+
+ void setXSize(sal_Int32 _nXSize)
+ {
+ nXSize = _nXSize;
+ bXSizeValid = true;
+ }
+
+ sal_uInt32 getXSize() const
+ {
+ return nXSize;
+ }
+
+ bool isXSizeValid() const
+ {
+ return bXSizeValid;
+ }
+
+ void setYSize(sal_Int32 _nYSize)
+ {
+ nYSize = _nYSize;
+ bYSizeValid = true;
+ }
+
+ sal_uInt32 getYSize() const
+ {
+ return nYSize;
+ }
+
+ bool isYSizeValis () const
+ {
+ return bYSizeValid;
+ }
+};
+/*-- 01.11.2006 09:42:42---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+GraphicImport::GraphicImport(uno::Reference < uno::XComponentContext > xComponentContext,
+ uno::Reference< lang::XMultiServiceFactory > xTextFactory,
+ DomainMapper& rDMapper,
+ GraphicImportType eImportType )
+: LoggedProperties(dmapper_logger, "GraphicImport")
+, LoggedTable(dmapper_logger, "GraphicImport")
+, LoggedStream(dmapper_logger, "GraphicImport")
+, m_pImpl( new GraphicImport_Impl( eImportType, rDMapper ))
+, m_xComponentContext( xComponentContext )
+, m_xTextFactory( xTextFactory)
+{
+}
+/*-- 01.11.2006 09:42:42---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+GraphicImport::~GraphicImport()
+{
+ delete m_pImpl;
+}
+
+void GraphicImport::handleWrapTextValue(sal_uInt32 nVal)
+{
+ switch (nVal)
+ {
+ case NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_bothSides: // 90920;
+ m_pImpl->nWrap = text::WrapTextMode_PARALLEL;
+ break;
+ case NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_left: // 90921;
+ m_pImpl->nWrap = text::WrapTextMode_LEFT;
+ break;
+ case NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_right: // 90922;
+ m_pImpl->nWrap = text::WrapTextMode_RIGHT;
+ break;
+ case NS_ooxml::LN_Value_wordprocessingDrawing_ST_WrapText_largest: // 90923;
+ m_pImpl->nWrap = text::WrapTextMode_DYNAMIC;
+ break;
+ default:;
+ }
+}
+
+/*-- 01.11.2006 09:45:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_attribute(Id nName, Value & val)
+{
+ sal_Int32 nIntValue = val.getInt();
+ /* WRITERFILTERSTATUS: table: PICFattribute */
+ switch( nName )
+ {
+ case NS_rtf::LN_LCB: break;//byte count
+ case NS_rtf::LN_CBHEADER: break;//ignored
+ case NS_rtf::LN_MFP: //MetafilePict
+ case NS_rtf::LN_DffRecord: //dff record - expands to an sprm which expands to ...
+ case NS_rtf::LN_shpopt: //shape options
+ case NS_rtf::LN_shpfbse: //BLIP store entry
+ case NS_rtf::LN_BRCTOP: //top border
+ case NS_rtf::LN_BRCLEFT: //left border
+ case NS_rtf::LN_BRCBOTTOM: //bottom border
+ case NS_rtf::LN_BRCRIGHT: //right border
+ case NS_rtf::LN_shape: //shape
+ case NS_rtf::LN_blip: //the binary graphic data in a shape
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ {
+ switch(nName)
+ {
+ case NS_rtf::LN_BRCTOP: //top border
+ /* WRITERFILTERSTATUS: */
+ m_pImpl->nCurrentBorderLine = BORDER_TOP;
+ break;
+ case NS_rtf::LN_BRCLEFT: //left border
+ /* WRITERFILTERSTATUS: */
+ m_pImpl->nCurrentBorderLine = BORDER_LEFT;
+ break;
+ case NS_rtf::LN_BRCBOTTOM: //bottom border
+ /* WRITERFILTERSTATUS: */
+ m_pImpl->nCurrentBorderLine = BORDER_BOTTOM;
+ break;
+ case NS_rtf::LN_BRCRIGHT: //right border
+ /* WRITERFILTERSTATUS: */
+ m_pImpl->nCurrentBorderLine = BORDER_RIGHT;
+ break;
+ case NS_rtf::LN_shpopt:
+ /* WRITERFILTERSTATUS: */
+ m_pImpl->bInShapeOptionMode = true;
+ break;
+ default:;
+ }
+ writerfilter::Reference<Properties>::Pointer_t pProperties = val.getProperties();
+ if( pProperties.get())
+ {
+ pProperties->resolve(*this);
+ }
+ switch(nName)
+ {
+ case NS_rtf::LN_shpopt:
+ /* WRITERFILTERSTATUS: */
+ m_pImpl->bInShapeOptionMode = false;
+ break;
+ default:;
+ }
+ }
+ break;
+ case NS_rtf::LN_payload :
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ writerfilter::Reference<BinaryObj>::Pointer_t pPictureData = val.getBinary();
+ if( pPictureData.get())
+ pPictureData->resolve(*this);
+ }
+ break;
+ case NS_rtf::LN_BM_RCWINMF: //windows bitmap structure - if it's a bitmap
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ break;
+ case NS_rtf::LN_DXAGOAL: //x-size in twip
+ case NS_rtf::LN_DYAGOAL: //y-size in twip
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_MX:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nHoriScaling = nIntValue;
+ break;// hori scaling in 0.001%
+ case NS_rtf::LN_MY:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nVertScaling = nIntValue;
+ break;// vert scaling in 0.001%
+ case NS_rtf::LN_DXACROPLEFT:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nLeftCrop = ConversionHelper::convertTwipToMM100(nIntValue);
+ break;// left crop in twips
+ case NS_rtf::LN_DYACROPTOP:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nTopCrop = ConversionHelper::convertTwipToMM100(nIntValue);
+ break;// top crop in twips
+ case NS_rtf::LN_DXACROPRIGHT:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nRightCrop = ConversionHelper::convertTwipToMM100(nIntValue);
+ break;// right crop in twips
+ case NS_rtf::LN_DYACROPBOTTOM:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nBottomCrop = ConversionHelper::convertTwipToMM100(nIntValue);
+ break;// bottom crop in twips
+ case NS_rtf::LN_BRCL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;//border type - legacy -
+ case NS_rtf::LN_FFRAMEEMPTY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;// picture consists of a single frame
+ case NS_rtf::LN_FBITMAP:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ m_pImpl->bIsBitmap = nIntValue > 0 ? true : false;
+ break;//1 if it's a bitmap ???
+ case NS_rtf::LN_FDRAWHATCH:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;//1 if it's an active OLE object
+ case NS_rtf::LN_FERROR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;// 1 if picture is an error message
+ case NS_rtf::LN_BPP:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nBitsPerPixel = nIntValue;
+ break;//bits per pixel 0 - unknown, 1- mono, 4 - VGA
+
+ case NS_rtf::LN_DXAORIGIN: //horizontal offset of hand annotation origin
+ case NS_rtf::LN_DYAORIGIN: //vertical offset of hand annotation origin
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_CPROPS:break;// unknown - ignored
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ //metafilepict
+ case NS_rtf::LN_MM:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+// according to the documentation 99 or 98 are provided - but they are not!
+// m_pImpl->bIsBitmap = 99 == nIntValue ? true : false;
+// m_pImpl->bIsTiff = 98 == nIntValue ? true : false;
+
+ break; //mapmode
+ case NS_rtf::LN_XEXT:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->setXSize(nIntValue);
+ break; // x-size
+ case NS_rtf::LN_YEXT:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->setYSize(nIntValue);
+ break; // y-size
+ case NS_rtf::LN_HMF: break; //identifier - ignored
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+
+ //sprm 0xf004 and 0xf008, 0xf00b
+ case NS_rtf::LN_dfftype://
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ m_pImpl->nDffType = nIntValue;
+ break;
+ case NS_rtf::LN_dffinstance:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //todo: does this still work for PICF?
+ //in case of LN_dfftype == 0xf01f the instance contains the bitmap type:
+ if(m_pImpl->nDffType == 0xf01f)
+ switch( nIntValue )
+ {
+ case 0x216 : // Metafile header then compressed WMF
+
+ case 0x3D4 : // Metafile header then compressed EMF
+
+ case 0x542 : // Metafile hd. then compressed PICT
+
+ {
+
+// rBLIPStream.SeekRel( nSkip + 20 );
+// // read in size of metafile in EMUS
+// rBLIPStream >> aMtfSize100.Width() >> aMtfSize100.Height();
+// // scale to 1/100mm
+// aMtfSize100.Width() /= 360, aMtfSize100.Height() /= 360;
+// if ( pVisArea ) // seem that we currently are skipping the visarea position
+// *pVisArea = Rectangle( Point(), aMtfSize100 );
+// // skip rest of header
+// nSkip = 6;
+// bMtfBLIP = bZCodecCompression = TRUE;
+ }
+
+ break;
+
+ case 0x46A : break;// One byte tag then JPEG (= JFIF) data
+
+ case 0x6E0 : break;// One byte tag then PNG data
+
+ case 0x7A8 : m_pImpl->bIsBitmap = true;
+// nSkip += 1; // One byte tag then DIB data
+ break;
+
+ }
+ break;
+ case NS_rtf::LN_dffversion:// ignored
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+
+ //sprm 0xf008
+ case NS_rtf::LN_shptype:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shpid:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shpfGroup:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;// This shape is a group shape
+ case NS_rtf::LN_shpfChild:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;// Not a top-level shape
+ case NS_rtf::LN_shpfPatriarch:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;// This is the topmost group shape. Exactly one of these per drawing.
+ case NS_rtf::LN_shpfDeleted:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;// The shape has been deleted
+ case NS_rtf::LN_shpfOleShape:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;// The shape is an OLE object
+ case NS_rtf::LN_shpfHaveMaster:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;// Shape has a hspMaster property
+ case NS_rtf::LN_shpfFlipH: // Shape is flipped horizontally
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->bHoriFlip = nIntValue ? true : false;
+ break;
+ case NS_rtf::LN_shpfFlipV: // Shape is flipped vertically
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->bVertFlip = nIntValue ? true : false;
+ break;
+ case NS_rtf::LN_shpfConnector:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;// Connector type of shape
+ case NS_rtf::LN_shpfHaveAnchor:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;// Shape has an anchor of some kind
+ case NS_rtf::LN_shpfBackground:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;// Background shape
+ case NS_rtf::LN_shpfHaveSpt:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;// Shape has a shape type property
+ case NS_rtf::LN_shptypename:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;// shape type name
+ case NS_rtf::LN_shppid:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nShapeOptionType = nIntValue;
+ break; //type of shape option
+ case NS_rtf::LN_shpfBid:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ break; //ignored
+ case NS_rtf::LN_shpfComplex:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shpop:
+ /* WRITERFILTERSTATUS: done: 50, planned: 10, spent: 5 */
+ {
+ if(NS_dff::LN_shpwzDescription != sal::static_int_cast<Id>(m_pImpl->nShapeOptionType) )
+ ProcessShapeOptions( val );
+ }
+ break;
+ case NS_rtf::LN_shpname:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shpvalue:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ {
+ if( NS_dff::LN_shpwzDescription == sal::static_int_cast<Id>(m_pImpl->nShapeOptionType) )
+ ProcessShapeOptions( val );
+ }
+ break;
+
+ //BLIP store entry
+ case NS_rtf::LN_shpbtWin32:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shpbtMacOS:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shprgbUid:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shptag:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shpsize:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shpcRef:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shpfoDelay:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shpusage:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shpcbName:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shpunused2:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_shpunused3:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+
+ //border properties
+ case NS_rtf::LN_shpblipbname :
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+
+ case NS_rtf::LN_DPTLINEWIDTH: // 0x1759
+ /* WRITERFILTERSTATUS: done: 100, planned: 1, spent: 1 */
+ m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].nLineWidth = nIntValue;
+ break;
+ case NS_rtf::LN_BRCTYPE: // 0x175a
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //graphic borders don't support different line types
+ //m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].nLineType = nIntValue;
+ break;
+ case NS_rtf::LN_ICO: // 0x175b
+ /* WRITERFILTERSTATUS: done: 100, planned: 1, spent: 1 */
+ m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].nLineColor = ConversionHelper::ConvertColor( nIntValue );
+ break;
+ case NS_rtf::LN_DPTSPACE: // 0x175c
+ /* WRITERFILTERSTATUS: done: 100, planned: 1, spent: 1 */
+ m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].nLineDistance = nIntValue;
+ break;
+ case NS_rtf::LN_FSHADOW: // 0x175d
+ /* WRITERFILTERSTATUS: done: 0, planned: 1, spent: 0 */
+ m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].bHasShadow = nIntValue ? true : false;
+ break;
+ case NS_rtf::LN_FFRAME: // ignored
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNUSED2_15: // ignored
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ break;
+
+ case NS_rtf::LN_SPID:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_rtf::LN_XALEFT:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nLeftPosition = ConversionHelper::convertTwipToMM100(nIntValue);
+ break; //left position
+ case NS_rtf::LN_YATOP:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nTopPosition = ConversionHelper::convertTwipToMM100(nIntValue);
+ break; //top position
+ case NS_rtf::LN_XARIGHT:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nRightPosition = ConversionHelper::convertTwipToMM100(nIntValue);
+ break; //right position
+ case NS_rtf::LN_YABOTTOM:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nBottomPosition = ConversionHelper::convertTwipToMM100(nIntValue);
+ break;//bottom position
+ case NS_rtf::LN_FHDR:
+ case NS_rtf::LN_XAlign:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+/*
+ static const SwHoriOrient aHoriOriTab[ nCntXAlign ] =
+ {
+ HORI_NONE, // From left position
+ HORI_LEFT, // left
+ HORI_CENTER, // centered
+ HORI_RIGHT, // right
+ // --> OD 2004-12-06 #i36649#
+ // - inside -> HORI_LEFT and outside -> HORI_RIGHT
+ HORI_LEFT, // inside
+ HORI_RIGHT // outside
+*/
+ if( nIntValue < 6 && nIntValue > 0 )
+ {
+ static const sal_Int16 aHoriOrientTab[ 6 ] =
+ {
+ text::HoriOrientation::NONE,
+ text::HoriOrientation::LEFT,
+ text::HoriOrientation::CENTER,
+ text::HoriOrientation::RIGHT,
+ text::HoriOrientation::INSIDE,
+ text::HoriOrientation::OUTSIDE
+ };
+ m_pImpl->nHoriOrient = aHoriOrientTab[nIntValue];
+ m_pImpl->bPageToggle = nIntValue > 3;
+ }
+ break;
+ case NS_rtf::LN_YAlign:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+/*
+ static const SwVertOrient aVertOriTab[ nCntYAlign ] =
+ {
+ VERT_NONE, // From Top position
+ VERT_TOP, // top
+ VERT_CENTER, // centered
+ VERT_BOTTOM, // bottom
+ VERT_LINE_TOP, // inside (obscure)
+ VERT_LINE_BOTTOM // outside (obscure)
+ };
+ // CMC,OD 24.11.2003 #i22673# - to-line vertical alignment
+ static const SwVertOrient aToLineVertOriTab[ nCntYAlign ] =
+ {
+ VERT_NONE, // below
+ VERT_LINE_BOTTOM, // top
+ VERT_LINE_CENTER, // centered
+ VERT_LINE_TOP, // bottom
+ VERT_LINE_BOTTOM, // inside (obscure)
+ VERT_LINE_TOP // outside (obscure)
+ };
+ if ( eVertRel == REL_VERT_LINE ) //m_pImpl->nVertRelation == text::RelOrientation::TEXT_LINE
+ {
+ eVertOri = aToLineVertOriTab[ nYAlign ];
+ }
+ else
+ {
+ eVertOri = aVertOriTab[ nYAlign ];
+ }
+
+*/
+ if( nIntValue < 6 && nIntValue > 0)
+ {
+ static const sal_Int16 aVertOrientTab[ 6 ] =
+ {
+ text::VertOrientation::NONE, // From Top position
+ text::VertOrientation::TOP, // top
+ text::VertOrientation::CENTER, // centered
+ text::VertOrientation::BOTTOM, // bottom
+ text::VertOrientation::LINE_TOP, // inside (obscure)
+ text::VertOrientation::LINE_BOTTOM // outside (obscure)
+ };
+ static const sal_Int16 aToLineVertOrientTab[ 6 ] =
+ {
+ text::VertOrientation::NONE, // below
+ text::VertOrientation::LINE_BOTTOM, // top
+ text::VertOrientation::LINE_CENTER, // centered
+ text::VertOrientation::LINE_TOP, // bottom
+ text::VertOrientation::LINE_BOTTOM, // inside (obscure)
+ text::VertOrientation::LINE_TOP // outside (obscure)
+ };
+ m_pImpl->nVertOrient = m_pImpl->nVertRelation == text::RelOrientation::TEXT_LINE ?
+ aToLineVertOrientTab[nIntValue] : aVertOrientTab[nIntValue];
+ }
+ break;
+ case NS_rtf::LN_LayoutInTableCell: break; //currently unknown
+ case NS_rtf::LN_XRelTo:
+ case NS_rtf::LN_BX: //hori orient relation
+ switch( nIntValue )
+ {
+ case 0: m_pImpl->nHoriRelation = text::RelOrientation::PAGE_PRINT_AREA; break;
+ case 1: m_pImpl->nHoriRelation = text::RelOrientation::PAGE_FRAME; break;
+ case 2: m_pImpl->nHoriRelation = text::RelOrientation::FRAME; break;
+ //case :
+ default:m_pImpl->nHoriRelation = text::RelOrientation::CHAR;
+ }
+ break;
+ case NS_rtf::LN_YRelTo:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_BY: //vert orient relation
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ switch( nIntValue )
+ {
+ case 0: m_pImpl->nVertRelation = text::RelOrientation::PAGE_PRINT_AREA; break;
+ case 1: m_pImpl->nVertRelation = text::RelOrientation::PAGE_FRAME; break;
+ case 2: m_pImpl->nVertRelation = text::RelOrientation::FRAME; break;
+ //case :
+ default:m_pImpl->nVertRelation = text::RelOrientation::TEXT_LINE;
+ }
+
+ break;
+ case NS_rtf::LN_WR: //wrapping
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ switch( nIntValue )
+ {
+ case 0: //0 like 2, but doesn't require absolute object
+ m_pImpl->bIgnoreWRK = false;
+ case 2: //2 wrap around absolute object
+ m_pImpl->nWrap = text::WrapTextMode_PARALLEL;
+ break;
+ case 1: //1 no text next to shape
+ m_pImpl->nWrap = text::WrapTextMode_NONE;
+ break;
+ case 3: //3 wrap as if no object present
+ m_pImpl->nWrap = text::WrapTextMode_THROUGHT;
+ break;
+ case 4: //4 wrap tightly around object
+ m_pImpl->bIgnoreWRK = false;
+ case 5: //5 wrap tightly, but allow holes
+ m_pImpl->nWrap = text::WrapTextMode_PARALLEL;
+ m_pImpl->bContour = true;
+ break;
+ default:;
+ }
+ break;
+ case NS_rtf::LN_WRK:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ if( !m_pImpl->bIgnoreWRK )
+ switch( nIntValue )
+ {
+ case 0: //0 like 2, but doesn't require absolute object
+ case 2: //2 wrap around absolute object
+ m_pImpl->nWrap = text::WrapTextMode_PARALLEL;
+ break;
+ case 1: //1 no text next to shape
+ m_pImpl->nWrap = text::WrapTextMode_NONE;
+ break;
+ case 3: //3 wrap as if no object present
+ m_pImpl->nWrap = text::WrapTextMode_THROUGHT;
+ break;
+ case 4: //4 wrap tightly around object
+ case 5: //5 wrap tightly, but allow holes
+ m_pImpl->nWrap = text::WrapTextMode_PARALLEL;
+ m_pImpl->bContour = true;
+ break;
+ default:;
+ }
+ break;
+ case NS_rtf::LN_FRCASIMPLE:
+ case NS_rtf::LN_FBELOWTEXT:
+ case NS_rtf::LN_FANCHORLOCK:
+ case NS_rtf::LN_CTXBX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+// {
+// sal_Int32 nValue1 = val.getInt();
+// nValue1++;
+// }
+ break;
+ case NS_rtf::LN_shptxt:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //todo: text content
+ break;
+ /* case NS_rtf::LN_CH = 10421;
+ case NS_rtf::LN_UNUSED0_5 = 10422;
+ case NS_rtf::LN_FLT = 10423;
+ case NS_rtf::LN_shpLeft = 10424;
+ case NS_rtf::LN_shpTop = 10425;
+ break;*/
+ case NS_rtf::LN_dffheader: break;
+ case NS_ooxml::LN_CT_PositiveSize2D_cx:// 90407;
+ case NS_ooxml::LN_CT_PositiveSize2D_cy:// 90408;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ {
+ sal_Int32 nDim = ConversionHelper::convertEMUToMM100( nIntValue );
+ if( nName == NS_ooxml::LN_CT_PositiveSize2D_cx )
+ m_pImpl->setXSize(nDim);
+ else
+ m_pImpl->setYSize(nDim);
+ }
+ break;
+ case NS_ooxml::LN_CT_EffectExtent_l:// 90907;
+ case NS_ooxml::LN_CT_EffectExtent_t:// 90908;
+ case NS_ooxml::LN_CT_EffectExtent_r:// 90909;
+ case NS_ooxml::LN_CT_EffectExtent_b:// 90910;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ //todo: extends the wrapping size of the object, e.g. if shadow is added
+ break;
+ case NS_ooxml::LN_CT_NonVisualDrawingProps_id:// 90650;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //id of the object - ignored
+ break;
+ case NS_ooxml::LN_CT_NonVisualDrawingProps_name:// 90651;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //name of the object
+ m_pImpl->sName = val.getString();
+ break;
+ case NS_ooxml::LN_CT_NonVisualDrawingProps_descr:// 90652;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //alternative text
+ m_pImpl->sAlternativeText = val.getString();
+ break;
+ case NS_ooxml::LN_CT_GraphicalObjectFrameLocking_noChangeAspect://90644;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //disallow aspect ratio change - ignored
+ break;
+ case NS_ooxml::LN_CT_GraphicalObjectFrameLocking_noMove:// 90645;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->bPositionProtected = true;
+ break;
+ case NS_ooxml::LN_CT_GraphicalObjectFrameLocking_noResize: // 90646;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->bSizeProtected = true;
+ break;
+ case NS_ooxml::LN_CT_Anchor_distT: // 90983;
+ case NS_ooxml::LN_CT_Anchor_distB: // 90984;
+ case NS_ooxml::LN_CT_Anchor_distL: // 90985;
+ case NS_ooxml::LN_CT_Anchor_distR: // 90986;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ //redirect to shape option processing
+ switch( nName )
+ {
+ case NS_ooxml::LN_CT_Anchor_distT: // 90983;
+ /* WRITERFILTERSTATUS: */
+ m_pImpl->nShapeOptionType = NS_dff::LN_shpdyWrapDistTop;
+ break;
+ case NS_ooxml::LN_CT_Anchor_distB: // 90984;
+ /* WRITERFILTERSTATUS: */
+ m_pImpl->nShapeOptionType = NS_dff::LN_shpdyWrapDistBottom;
+ break;
+ case NS_ooxml::LN_CT_Anchor_distL: // 90985;
+ /* WRITERFILTERSTATUS: */
+ m_pImpl->nShapeOptionType = NS_dff::LN_shpdxWrapDistLeft;
+ break;
+ case NS_ooxml::LN_CT_Anchor_distR: // 90986;
+ /* WRITERFILTERSTATUS: */
+ m_pImpl->nShapeOptionType = NS_dff::LN_shpdxWrapDistRight;
+ break;
+ //m_pImpl->nShapeOptionType = NS_dff::LN_shpcropFromTop
+ default: ;
+ }
+ ProcessShapeOptions(val);
+ }
+ break;
+ case NS_ooxml::LN_CT_Anchor_simplePos_attr: // 90987;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->bUseSimplePos = nIntValue > 0;
+ break;
+ case NS_ooxml::LN_CT_Anchor_relativeHeight: // 90988;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ //z-order
+ break;
+ case NS_ooxml::LN_CT_Anchor_behindDoc: // 90989; - in background
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if( nIntValue > 0 )
+ m_pImpl->bOpaque = false;
+ break;
+ case NS_ooxml::LN_CT_Anchor_locked: // 90990; - ignored
+ case NS_ooxml::LN_CT_Anchor_layoutInCell: // 90991; - ignored
+ case NS_ooxml::LN_CT_Anchor_hidden: // 90992; - ignored
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_ooxml::LN_CT_Anchor_allowOverlap: // 90993;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //enable overlapping - ignored
+ break;
+ case NS_ooxml::LN_CT_Point2D_x: // 90405;
+ case NS_ooxml::LN_CT_Point2D_y: // 90406;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ if( m_pImpl->bUseSimplePos )
+ {
+ //todo: absolute positioning
+ NS_ooxml::LN_CT_Point2D_x == nName ? m_pImpl->nLeftPosition = ConversionHelper::convertTwipToMM100(nIntValue) :
+ m_pImpl->nTopPosition = ConversionHelper::convertTwipToMM100(nIntValue);
+
+ }
+ break;
+ case NS_ooxml::LN_CT_WrapTight_wrapText: // 90934;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->bContour = true;
+ m_pImpl->bContourOutside = true;
+
+ handleWrapTextValue(val.getInt());
+
+ break;
+ case NS_ooxml::LN_CT_WrapThrough_wrapText:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->bContour = true;
+ m_pImpl->bContourOutside = false;
+
+ handleWrapTextValue(val.getInt());
+
+ break;
+ case NS_ooxml::LN_CT_WrapSquare_wrapText: //90928;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+
+ handleWrapTextValue(val.getInt());
+ break;
+ case NS_ooxml::LN_shape:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ uno::Reference< drawing::XShape> xShape;
+ val.getAny( ) >>= xShape;
+
+ if ( xShape.is( ) )
+ {
+ // Is it a graphic image
+ bool bUseShape = true;
+ try
+ {
+ uno::Reference< beans::XPropertySet > xShapeProps
+ ( xShape, uno::UNO_QUERY_THROW );
+
+ rtl::OUString sUrl;
+ xShapeProps->getPropertyValue( rtl::OUString::createFromAscii( "GraphicURL" ) ) >>= sUrl;
+
+ ::com::sun::star::beans::PropertyValues aMediaProperties( 1 );
+ aMediaProperties[0].Name = rtl::OUString::createFromAscii( "URL" );
+ aMediaProperties[0].Value <<= sUrl;
+
+ m_xGraphicObject = createGraphicObject( aMediaProperties );
+
+ bUseShape = !m_xGraphicObject.is( );
+
+ if ( !bUseShape )
+ {
+ // Define the object size
+ uno::Reference< beans::XPropertySet > xGraphProps( m_xGraphicObject,
+ uno::UNO_QUERY );
+ awt::Size aSize = xShape->getSize( );
+ xGraphProps->setPropertyValue( rtl::OUString::createFromAscii( "Height" ),
+ uno::makeAny( aSize.Height ) );
+ xGraphProps->setPropertyValue( rtl::OUString::createFromAscii( "Width" ),
+ uno::makeAny( aSize.Width ) );
+ }
+ }
+ catch( const beans::UnknownPropertyException e )
+ {
+ // It isn't a graphic image
+ }
+
+ if ( bUseShape )
+ m_xShape = xShape;
+
+
+ if ( m_xShape.is( ) )
+ {
+ uno::Reference< beans::XPropertySet > xShapeProps
+ (m_xShape, uno::UNO_QUERY_THROW);
+
+
+ PropertyNameSupplier& rPropNameSupplier =
+ PropertyNameSupplier::GetPropertyNameSupplier();
+ xShapeProps->setPropertyValue
+ (rPropNameSupplier.GetName(PROP_ANCHOR_TYPE),
+ uno::makeAny
+ (text::TextContentAnchorType_AS_CHARACTER));
+ xShapeProps->setPropertyValue
+ (rPropNameSupplier.GetName(PROP_TEXT_RANGE),
+ uno::makeAny
+ (m_pImpl->rDomainMapper.GetCurrentTextRange()));
+
+ awt::Point aPoint(m_xShape->getPosition());
+ awt::Size aSize(m_xShape->getSize());
+
+ if (m_pImpl->isXSizeValid())
+ aSize.Width = m_pImpl->getXSize();
+ if (m_pImpl->isYSizeValis())
+ aSize.Height = m_pImpl->getYSize();
+
+ m_xShape->setSize(aSize);
+
+ m_pImpl->bIsGraphic = true;
+ }
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_Inline_distT:
+ case NS_ooxml::LN_CT_Inline_distB:
+ case NS_ooxml::LN_CT_Inline_distL:
+ case NS_ooxml::LN_CT_Inline_distR:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ //TODO: need to be handled
+ break;
+ case NS_ooxml::LN_CT_GraphicalObjectData_uri:
+ /* WRITERFILTERSTATUS: done: 50, planned: 0.5, spent: 0 */
+ val.getString();
+ //TODO: does it need to be handled?
+ break;
+ default:
+#ifdef DEBUG_DMAPPER_GRAPHIC_IMPORT
+ dmapper_logger->element("unhandled");
+#endif
+ ;
+ }
+}
+
+uno::Reference<text::XTextContent> GraphicImport::GetGraphicObject()
+{
+ uno::Reference<text::XTextContent> xResult;
+
+ if (m_xGraphicObject.is())
+ xResult = m_xGraphicObject;
+ else if (m_xShape.is())
+ {
+ xResult.set(m_xShape, uno::UNO_QUERY_THROW);
+ }
+
+ return xResult;
+}
+
+/*-- 22.11.2006 09:46:48---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::ProcessShapeOptions(Value& val)
+{
+ sal_Int32 nIntValue = val.getInt();
+ sal_Int32 nTwipValue = ConversionHelper::convertTwipToMM100(nIntValue);
+ /* WRITERFILTERSTATUS: table: ShapeOptionsAttribute */
+ switch( m_pImpl->nShapeOptionType )
+ {
+ case NS_dff::LN_shpcropFromTop /*256*/ :
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nTopCrop = nTwipValue;
+ break;// rtf:shpcropFromTop
+ case NS_dff::LN_shpcropFromBottom /*257*/ :
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nBottomCrop= nTwipValue;
+ break;// rtf:shpcropFromBottom
+ case NS_dff::LN_shpcropFromLeft /*258*/ :
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nLeftCrop = nTwipValue;
+ break;// rtf:shpcropFromLeft
+ case NS_dff::LN_shpcropFromRight/*259*/ :
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nRightCrop = nTwipValue;
+ break;// rtf:shpcropFromRight
+ case NS_dff::LN_shppib/*260*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break; // rtf:shppib
+ case NS_dff::LN_shppibName/*261*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break; // rtf:shppibName
+ case NS_dff::LN_shppibFlags/*262*/: // rtf:shppibFlags
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ /*
+ * // MSOBLIPFLAGS ñ flags for pictures
+ typedef enum
+ {
+ msoblipflagDefault = 0,
+ msoblipflagComment = 0, // Blip name is a comment
+ msoblipflagFile, // Blip name is a file name
+ msoblipflagURL, // Blip name is a full URL
+ msoblipflagType = 3, // Mask to extract type
+ // Or the following flags with any of the above.
+ msoblipflagDontSave = 4, // A "dont" is the depression in the metal
+ // body work of an automobile caused when a
+ // cyclist violently thrusts his or her nose
+ // at it, thus a DontSave is another name for
+ // a cycle lane.
+ msoblipflagDoNotSave = 4, // For those who prefer English
+ msoblipflagLinkToFile = 8,
+ };
+ *
+ * */
+ break;
+ case NS_dff::LN_shppictureContrast/*264*/: // rtf:shppictureContrast docu: "1<<16"
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ /*
+ 0x10000 is msoffice 50%
+ < 0x10000 is in units of 1/50th of 0x10000 per 1%
+ > 0x10000 is in units where
+ a msoffice x% is stored as 50/(100-x) * 0x10000
+
+ plus, a (ui) microsoft % ranges from 0 to 100, OOO
+ from -100 to 100, so also normalize into that range
+ */
+ if ( nIntValue > 0x10000 )
+ {
+ double fX = nIntValue;
+ fX /= 0x10000;
+ fX /= 51; // 50 + 1 to round
+ fX = 1/fX;
+ m_pImpl->nContrast = static_cast<sal_Int32>(fX);
+ m_pImpl->nContrast -= 100;
+ m_pImpl->nContrast = -m_pImpl->nContrast;
+ m_pImpl->nContrast = (m_pImpl->nContrast-50)*2;
+ }
+ else if ( nIntValue == 0x10000 )
+ m_pImpl->nContrast = 0;
+ else
+ {
+ m_pImpl->nContrast = nIntValue * 101; //100 + 1 to round
+ m_pImpl->nContrast /= 0x10000;
+ m_pImpl->nContrast -= 100;
+ }
+ break;
+ case NS_dff::LN_shppictureBrightness/*265*/: // rtf:shppictureBrightness
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->nBrightness = ( (sal_Int32) nIntValue / 327 );
+ break;
+ case NS_dff::LN_shppictureGamma/*266*/: // rtf:shppictureGamma
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ //todo check gamma value with _real_ document
+ m_pImpl->fGamma = double(nIntValue/655);
+ break;
+ case NS_dff::LN_shppictureId /*267*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break; // rtf:shppictureId
+ case NS_dff::LN_shppictureDblCrMod /*268*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break; // rtf:shppictureDblCrMod
+ case NS_dff::LN_shppictureFillCrMod /*269*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break; // rtf:shppictureFillCrMod
+ case NS_dff::LN_shppictureLineCrMod /*270*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break; // rtf:shppictureLineCrMod
+
+ case NS_dff::LN_shppictureActive/*319*/: // rtf:shppictureActive
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ switch( nIntValue & 0x06 )
+ {
+ case 0 : m_pImpl->eColorMode = drawing::ColorMode_STANDARD; break;
+ case 4 : m_pImpl->eColorMode = drawing::ColorMode_GREYS; break;
+ case 6 : m_pImpl->eColorMode = drawing::ColorMode_MONO; break;
+ default:;
+ }
+ break;
+ case NS_dff::LN_shpfillColor /*385*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ m_pImpl->nFillColor = (m_pImpl->nFillColor & 0xff000000) + ConversionHelper::ConvertColor( nIntValue );
+ break;
+ case NS_dff::LN_shpfillOpacity /*386*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ {
+ sal_Int32 nTrans = 0xff - ( nIntValue * 0xff ) / 0xffff;
+ m_pImpl->nFillColor = (nTrans << 0x18 ) + (m_pImpl->nFillColor & 0xffffff);
+ }
+ break;
+ case NS_dff::LN_shpfNoFillHitTest /*447*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break; // rtf:shpfNoFillHitTest
+ case NS_dff::LN_shplineColor /*448*/:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].nLineColor = ConversionHelper::ConvertColor( nIntValue );
+ break;
+ case NS_dff::LN_shplineWidth /*459*/:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ //1pt == 12700 units
+ m_pImpl->aBorders[m_pImpl->nCurrentBorderLine].nLineWidth = ConversionHelper::convertTwipToMM100(nIntValue / 635);
+ break;
+ case NS_dff::LN_shplineDashing /*462*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //graphic borders don't support different dashing
+ /*MSOLINEDASHING
+ msolineSolid, // Solid (continuous) pen
+ msolineDashSys, // PS_DASH system dash style
+ msolineDotSys, // PS_DOT system dash style
+ msolineDashDotSys, // PS_DASHDOT system dash style
+ msolineDashDotDotSys, // PS_DASHDOTDOT system dash style
+ msolineDotGEL, // square dot style
+ msolineDashGEL, // dash style
+ msolineLongDashGEL, // long dash style
+ msolineDashDotGEL, // dash short dash
+ msolineLongDashDotGEL, // long dash short dash
+ msolineLongDashDotDotGEL // long dash short dash short dash*/
+ //m_pImpl->aBorders[nCurrentBorderLine].nLineType = nIntValue;
+ break;
+ case NS_dff::LN_shpfNoLineDrawDash /*511*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break; // rtf:shpfNoLineDrawDash
+ case NS_dff::LN_shpwzDescription /*897*/: //alternative text
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ m_pImpl->sAlternativeText = val.getString();
+ break;
+// case NS_dff::LN_shppihlShape /*898*/:
+ case NS_dff::LN_shppWrapPolygonVertices/*899*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break; // rtf:shppWrapPolygonVertices
+ case NS_dff::LN_shpdxWrapDistLeft /*900*/: // contains a twip/635 value
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //todo: changes have to be applied depending on the orientation, see SwWW8ImplReader::AdjustLRWrapForWordMargins()
+ m_pImpl->nLeftMargin = nIntValue / 360;
+ break;
+ case NS_dff::LN_shpdyWrapDistTop /*901*/: // contains a twip/635 value
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //todo: changes have to be applied depending on the orientation, see SwWW8ImplReader::AdjustULWrapForWordMargins()
+ m_pImpl->nTopMargin = nIntValue / 360;
+ break;
+ case NS_dff::LN_shpdxWrapDistRight /*902*/:// contains a twip/635 value
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //todo: changes have to be applied depending on the orientation, see SwWW8ImplReader::AdjustLRWrapForWordMargins()
+ m_pImpl->nRightMargin = nIntValue / 360;
+ break;
+ case NS_dff::LN_shpdyWrapDistBottom /*903*/:// contains a twip/635 value
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //todo: changes have to be applied depending on the orientation, see SwWW8ImplReader::AdjustULWrapForWordMargins()
+ m_pImpl->nBottomMargin = nIntValue / 360;
+ break;
+ case NS_dff::LN_shpfPrint /*959*/:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break; // rtf:shpfPrint
+ default:
+ OSL_ENSURE( false, "shape option unsupported?");
+ }
+}
+/*-- 01.11.2006 09:45:02---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_sprm(Sprm & rSprm)
+{
+ sal_uInt32 nSprmId = rSprm.getId();
+ Value::Pointer_t pValue = rSprm.getValue();
+
+ /* WRITERFILTERSTATUS: table: PICFsprmdata */
+ switch(nSprmId)
+ {
+ case 0xf004: //dff record
+ case 0xf00a: //part of 0xf004 - shape properties
+ case 0xf00b: //part of 0xf004
+ case 0xf007:
+ case 0xf122: //udefprop
+ case NS_ooxml::LN_CT_Inline_extent: // 90911;
+ case NS_ooxml::LN_CT_Inline_effectExtent: // 90912;
+ case NS_ooxml::LN_CT_Inline_docPr: // 90913;
+ case NS_ooxml::LN_CT_Inline_cNvGraphicFramePr: // 90914;
+ case NS_ooxml::LN_CT_NonVisualGraphicFrameProperties_graphicFrameLocks:// 90657
+ case NS_ooxml::LN_CT_Inline_a_graphic:// 90915
+ case NS_ooxml::LN_CT_Anchor_simplePos_elem: // 90975;
+ case NS_ooxml::LN_CT_Anchor_extent: // 90978;
+ case NS_ooxml::LN_CT_Anchor_effectExtent: // 90979;
+ case NS_ooxml::LN_EG_WrapType_wrapSquare: // 90945;
+ case NS_ooxml::LN_EG_WrapType_wrapTight: // 90946;
+ case NS_ooxml::LN_EG_WrapType_wrapThrough:
+ case NS_ooxml::LN_CT_Anchor_docPr: // 90980;
+ case NS_ooxml::LN_CT_Anchor_cNvGraphicFramePr: // 90981;
+ case NS_ooxml::LN_CT_Anchor_a_graphic: // 90982;
+ case NS_ooxml::LN_CT_WrapPath_start: // 90924;
+ case NS_ooxml::LN_CT_WrapPath_lineTo: // 90925;
+ case NS_ooxml::LN_graphic_graphic:
+ case NS_ooxml::LN_pic_pic:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ pProperties->resolve(*this);
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_WrapTight_wrapPolygon:
+ case NS_ooxml::LN_CT_WrapThrough_wrapPolygon:
+ /* WRITERFILTERSTATUS: done: 100, planned: 4, spent: 2 */
+ {
+ WrapPolygonHandler aHandler;
+
+ resolveSprmProps(aHandler, rSprm);
+
+ m_pImpl->mpWrapPolygon = aHandler.getPolygon();
+ }
+ break;
+ case NS_ooxml::LN_CT_Anchor_positionH: // 90976;
+ {
+ // Use a special handler for the positionning
+ PositionHandlerPtr pHandler( new PositionHandler );
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get( ) )
+ {
+ pProperties->resolve( *pHandler );
+
+ m_pImpl->nHoriRelation = pHandler->m_nRelation;
+ m_pImpl->nHoriOrient = pHandler->m_nOrient;
+ m_pImpl->nLeftPosition = pHandler->m_nPosition;
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_Anchor_positionV: // 90977;
+ {
+ // Use a special handler for the positionning
+ PositionHandlerPtr pHandler( new PositionHandler );
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get( ) )
+ {
+ pProperties->resolve( *pHandler );
+
+ m_pImpl->nVertRelation = pHandler->m_nRelation;
+ m_pImpl->nVertOrient = pHandler->m_nOrient;
+ m_pImpl->nTopPosition = pHandler->m_nPosition;
+ }
+ }
+ break;
+ case 0x271b:
+ case 0x271c:
+ {
+ if( nSprmId != 0x271c || m_pImpl->nDffType == 0xf01f || m_pImpl->nDffType == 0xf01e )
+ {
+ writerfilter::Reference<BinaryObj>::Pointer_t pPictureData = rSprm.getBinary();
+ if( pPictureData.get())
+ pPictureData->resolve(*this);
+ }
+ }
+ break;
+ case NS_ooxml::LN_EG_WrapType_wrapNone: // 90944; - doesn't contain attributes
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ //depending on the behindDoc attribute text wraps through behind or in fron of the object
+ m_pImpl->nWrap = text::WrapTextMode_THROUGHT;
+ break;
+ case NS_ooxml::LN_EG_WrapType_wrapTopAndBottom: // 90948;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ m_pImpl->nWrap = text::WrapTextMode_NONE;
+ break;
+ case 0xf010:
+ case 0xf011:
+ //ignore - doesn't contain useful members
+ break;
+ case NS_ooxml::LN_CT_GraphicalObject_graphicData:// 90660;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ m_pImpl->bIsGraphic = true;
+
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ default:
+#if OSL_DEBUG_LEVEL > 0
+ ::rtl::OString sMessage( "GraphicImport::sprm() - Id: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nSprmId ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nSprmId ), 16 );
+ OSL_ENSURE( false, sMessage.getStr())
+#endif
+ ;
+ }
+}
+/*-- 01.11.2006 09:45:02---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t /*ref*/)
+{
+}
+/*-- 16.11.2006 16:14:32---------------------------------------------------
+ crop is stored as "fixed float" as 16.16 fraction value
+ related to width/or height
+ -----------------------------------------------------------------------*/
+void lcl_CalcCrop( sal_Int32& nCrop, sal_Int32 nRef )
+{
+ nCrop = ((nCrop >> 16 ) * nRef )
+ + (((nCrop & 0xffff) * nRef ) >> 16);
+}
+
+uno::Reference< text::XTextContent > GraphicImport::createGraphicObject( const beans::PropertyValues& aMediaProperties )
+{
+ uno::Reference< text::XTextContent > xGraphicObject;
+ try
+ {
+ uno::Reference< graphic::XGraphicProvider > xGraphicProvider(
+ m_xComponentContext->getServiceManager()->createInstanceWithContext(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.graphic.GraphicProvider")),
+ m_xComponentContext),
+ uno::UNO_QUERY_THROW );
+
+ uno::Reference< graphic::XGraphic > xGraphic = xGraphicProvider->queryGraphic( aMediaProperties );
+
+ if(xGraphic.is())
+ {
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ uno::Reference< beans::XPropertySet > xGraphicObjectProperties(
+ m_xTextFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.TextGraphicObject"))),
+ uno::UNO_QUERY_THROW);
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName(PROP_GRAPHIC), uno::makeAny( xGraphic ));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName(PROP_ANCHOR_TYPE),
+ uno::makeAny( m_pImpl->eGraphicImportType == IMPORT_AS_SHAPE || m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR ?
+ text::TextContentAnchorType_AT_CHARACTER :
+ text::TextContentAnchorType_AS_CHARACTER ));
+ xGraphicObject = uno::Reference< text::XTextContent >( xGraphicObjectProperties, uno::UNO_QUERY_THROW );
+
+ //shapes have only one border, PICF might have four
+ table::BorderLine aBorderLine;
+ for( sal_Int32 nBorder = 0; nBorder < 4; ++nBorder )
+ {
+ if( m_pImpl->eGraphicImportType == IMPORT_AS_GRAPHIC || !nBorder )
+ {
+ aBorderLine.Color = m_pImpl->aBorders[m_pImpl->eGraphicImportType == IMPORT_AS_SHAPE ? BORDER_TOP : static_cast<BorderPosition>(nBorder) ].nLineColor;
+ aBorderLine.InnerLineWidth = 0;
+ aBorderLine.OuterLineWidth = (sal_Int16)m_pImpl->aBorders[m_pImpl->eGraphicImportType == IMPORT_AS_SHAPE ? BORDER_TOP : static_cast<BorderPosition>(nBorder) ].nLineWidth;
+ aBorderLine.LineDistance = 0;
+ }
+ PropertyIds aBorderProps[4] =
+ {
+ PROP_LEFT_BORDER,
+ PROP_RIGHT_BORDER,
+ PROP_TOP_BORDER,
+ PROP_BOTTOM_BORDER
+ };
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( aBorderProps[nBorder]), uno::makeAny(aBorderLine));
+ }
+
+ // setting properties for all types
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_TITLE ),
+ uno::makeAny( m_pImpl->sAlternativeText ));
+ if( m_pImpl->bPositionProtected )
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_POSITION_PROTECTED ),
+ uno::makeAny(true));
+ if( m_pImpl->bSizeProtected )
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SIZE_PROTECTED ),
+ uno::makeAny(true));
+
+ if( m_pImpl->eGraphicImportType == IMPORT_AS_SHAPE || m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR )
+ {
+ sal_Int32 nWidth = m_pImpl->nRightPosition - m_pImpl->nLeftPosition;
+ if( m_pImpl->eGraphicImportType == IMPORT_AS_SHAPE )
+ {
+ sal_Int32 nHeight = m_pImpl->nBottomPosition - m_pImpl->nTopPosition;
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName(PROP_SIZE),
+ uno::makeAny( awt::Size( nWidth, nHeight )));
+ }
+ //adjust margins
+ if( (m_pImpl->nHoriOrient == text::HoriOrientation::LEFT &&
+ (m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA ||
+ m_pImpl->nHoriRelation == text::RelOrientation::FRAME) ) ||
+ (m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE &&
+ m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA ))
+ m_pImpl->nLeftMargin = 0;
+ if((m_pImpl->nHoriOrient == text::HoriOrientation::RIGHT &&
+ (m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA ||
+ m_pImpl->nHoriRelation == text::RelOrientation::FRAME) ) ||
+ (m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE &&
+ m_pImpl->nHoriRelation == text::RelOrientation::PAGE_PRINT_AREA ))
+ m_pImpl->nRightMargin = 0;
+ // adjust top/bottom margins
+ if( m_pImpl->nVertOrient == text::VertOrientation::TOP &&
+ ( m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA ||
+ m_pImpl->nVertRelation == text::RelOrientation::PAGE_FRAME))
+ m_pImpl->nTopMargin = 0;
+ if( m_pImpl->nVertOrient == text::VertOrientation::BOTTOM &&
+ ( m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA ||
+ m_pImpl->nVertRelation == text::RelOrientation::PAGE_FRAME))
+ m_pImpl->nBottomMargin = 0;
+ if( m_pImpl->nVertOrient == text::VertOrientation::BOTTOM &&
+ m_pImpl->nVertRelation == text::RelOrientation::PAGE_PRINT_AREA )
+ m_pImpl->nBottomMargin = 0;
+
+ //adjust alignment
+ if( m_pImpl->nHoriOrient == text::HoriOrientation::INSIDE &&
+ m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME )
+ {
+ // convert 'left to page' to 'from left -<width> to page text area'
+ m_pImpl->nHoriOrient = text::HoriOrientation::NONE;
+ m_pImpl->nHoriRelation = text::RelOrientation::PAGE_PRINT_AREA;
+ m_pImpl->nLeftPosition = - nWidth;
+ }
+ else if( m_pImpl->nHoriOrient == text::HoriOrientation::OUTSIDE &&
+ m_pImpl->nHoriRelation == text::RelOrientation::PAGE_FRAME )
+ {
+ // convert 'right to page' to 'from left 0 to right page border'
+ m_pImpl->nHoriOrient = text::HoriOrientation::NONE;
+ m_pImpl->nHoriRelation = text::RelOrientation::PAGE_RIGHT;
+ m_pImpl->nLeftPosition = 0;
+ }
+
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_ORIENT ),
+ uno::makeAny(m_pImpl->nHoriOrient));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_ORIENT_POSITION),
+ uno::makeAny(m_pImpl->nLeftPosition));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_ORIENT_RELATION ),
+ uno::makeAny(m_pImpl->nHoriRelation));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_PAGE_TOGGLE ),
+ uno::makeAny(m_pImpl->bPageToggle));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_VERT_ORIENT ),
+ uno::makeAny(m_pImpl->nVertOrient));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_VERT_ORIENT_POSITION),
+ uno::makeAny(m_pImpl->nTopPosition));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_VERT_ORIENT_RELATION ),
+ uno::makeAny(m_pImpl->nVertRelation));
+ if( !m_pImpl->bOpaque )
+ {
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_OPAQUE ),
+ uno::makeAny(m_pImpl->bOpaque));
+ }
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SURROUND ),
+ uno::makeAny(m_pImpl->nWrap));
+
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_SURROUND_CONTOUR ),
+ uno::makeAny(m_pImpl->bContour));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_OUTSIDE ),
+ uno::makeAny(m_pImpl->bContourOutside));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_LEFT_MARGIN ),
+ uno::makeAny(m_pImpl->nLeftMargin));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_RIGHT_MARGIN ),
+ uno::makeAny(m_pImpl->nRightMargin));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_TOP_MARGIN ),
+ uno::makeAny(m_pImpl->nTopMargin));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_BOTTOM_MARGIN ),
+ uno::makeAny(m_pImpl->nBottomMargin));
+
+ if( m_pImpl->eColorMode == drawing::ColorMode_STANDARD &&
+ m_pImpl->nContrast == -70 &&
+ m_pImpl->nBrightness == 70 )
+ {
+ // strange definition of WATERMARK!
+ m_pImpl->nContrast = 0;
+ m_pImpl->nBrightness = 0;
+ m_pImpl->eColorMode = drawing::ColorMode_WATERMARK;
+ }
+
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_ADJUST_CONTRAST ),
+ uno::makeAny((sal_Int16)m_pImpl->nContrast));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_ADJUST_LUMINANCE ),
+ uno::makeAny((sal_Int16)m_pImpl->nBrightness));
+ if(m_pImpl->eColorMode != drawing::ColorMode_STANDARD)
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GRAPHIC_COLOR_MODE ),
+ uno::makeAny(m_pImpl->eColorMode));
+ if(m_pImpl->fGamma > 0. )
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GAMMA ),
+ uno::makeAny(m_pImpl->fGamma ));
+ if(m_pImpl->bHoriFlip)
+ {
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_MIRRORED_ON_EVEN_PAGES ),
+ uno::makeAny( m_pImpl->bHoriFlip ));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_HORI_MIRRORED_ON_ODD_PAGES ),
+ uno::makeAny( m_pImpl->bHoriFlip ));
+ }
+
+ if( m_pImpl->bVertFlip )
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_VERT_MIRRORED ),
+ uno::makeAny( m_pImpl->bVertFlip ));
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_BACK_COLOR ),
+ uno::makeAny( m_pImpl->nFillColor ));
+
+ //there seems to be no way to detect the original size via _real_ API
+ uno::Reference< beans::XPropertySet > xGraphicProperties( xGraphic, uno::UNO_QUERY_THROW );
+ awt::Size aGraphicSize, aGraphicSizePixel;
+ xGraphicProperties->getPropertyValue(rPropNameSupplier.GetName( PROP_SIZE100th_M_M )) >>= aGraphicSize;
+ xGraphicProperties->getPropertyValue(rPropNameSupplier.GetName( PROP_SIZE_PIXEL )) >>= aGraphicSizePixel;
+
+ uno::Any aContourPolyPolygon;
+ if( aGraphicSize.Width && aGraphicSize.Height &&
+ m_pImpl->mpWrapPolygon.get() != NULL)
+ {
+ awt::Size aDstSize(m_pImpl->getXSize(), m_pImpl->getYSize());
+ WrapPolygon::Pointer_t pCorrected = m_pImpl->mpWrapPolygon->correctWordWrapPolygon(aGraphicSize, aDstSize);
+ aContourPolyPolygon <<= pCorrected->getPointSequenceSequence();
+ }
+
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_CONTOUR_POLY_POLYGON),
+ aContourPolyPolygon);
+
+ if( aGraphicSize.Width && aGraphicSize.Height )
+ {
+ //todo: i71651 graphic size is not provided by the GraphicDescriptor
+ lcl_CalcCrop( m_pImpl->nTopCrop, aGraphicSize.Height );
+ lcl_CalcCrop( m_pImpl->nBottomCrop, aGraphicSize.Height );
+ lcl_CalcCrop( m_pImpl->nLeftCrop, aGraphicSize.Width );
+ lcl_CalcCrop( m_pImpl->nRightCrop, aGraphicSize.Width );
+
+
+ xGraphicProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_GRAPHIC_CROP ),
+ uno::makeAny(text::GraphicCrop(m_pImpl->nTopCrop, m_pImpl->nBottomCrop, m_pImpl->nLeftCrop, m_pImpl->nRightCrop)));
+ }
+
+ }
+
+ if(m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_INLINE || m_pImpl->eGraphicImportType == IMPORT_AS_DETECTED_ANCHOR)
+ {
+ if( m_pImpl->getXSize() && m_pImpl->getYSize() )
+ xGraphicObjectProperties->setPropertyValue(rPropNameSupplier.GetName(PROP_SIZE),
+ uno::makeAny( awt::Size( m_pImpl->getXSize(), m_pImpl->getYSize() )));
+ try
+ {
+ if( m_pImpl->sName.getLength() )
+ {
+ uno::Reference< container::XNamed > xNamed( xGraphicObjectProperties, uno::UNO_QUERY_THROW );
+ xNamed->setName( m_pImpl->sName );
+ }
+ }
+ catch( const uno::Exception& )
+ {
+ }
+ }
+ }
+ }
+ catch( const uno::Exception& e )
+ {
+ clog << __FILE__ << ":" << __LINE__ << " failed. Message :" ;
+ clog << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
+ }
+ return xGraphicObject;
+}
+
+/*-- 01.11.2006 09:45:02---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::data(const sal_uInt8* buf, size_t len, writerfilter::Reference<Properties>::Pointer_t /*ref*/)
+{
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ ::com::sun::star::beans::PropertyValues aMediaProperties( 1 );
+ aMediaProperties[0].Name = rPropNameSupplier.GetName(PROP_INPUT_STREAM);
+
+ uno::Reference< io::XInputStream > xIStream = new XInputStreamHelper( buf, len, m_pImpl->bIsBitmap );
+ aMediaProperties[0].Value <<= xIStream;
+
+ m_xGraphicObject = createGraphicObject( aMediaProperties );
+}
+/*-- 01.11.2006 09:45:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_startSectionGroup()
+{
+}
+/*-- 01.11.2006 09:45:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_endSectionGroup()
+{
+}
+/*-- 01.11.2006 09:45:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_startParagraphGroup()
+{
+}
+/*-- 01.11.2006 09:45:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_endParagraphGroup()
+{
+}
+/*-- 01.11.2006 09:45:03---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_startCharacterGroup()
+{
+}
+/*-- 01.11.2006 09:45:04---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_endCharacterGroup()
+{
+}
+/*-- 01.11.2006 09:45:04---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_text(const sal_uInt8 * /*_data*/, size_t /*len*/)
+{
+}
+/*-- 01.11.2006 09:45:05---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_utext(const sal_uInt8 * /*_data*/, size_t /*len*/)
+{
+}
+/*-- 01.11.2006 09:45:05---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_props(writerfilter::Reference<Properties>::Pointer_t /*ref*/)
+{
+}
+/*-- 01.11.2006 09:45:06---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_table(Id /*name*/, writerfilter::Reference<Table>::Pointer_t /*ref*/)
+{
+}
+/*-- 01.11.2006 09:45:07---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_substream(Id /*name*/, ::writerfilter::Reference<Stream>::Pointer_t /*ref*/)
+{
+}
+/*-- 01.11.2006 09:45:07---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void GraphicImport::lcl_info(const string & /*info*/)
+{
+}
+
+void GraphicImport::lcl_startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > /*xShape*/ )
+{
+}
+
+void GraphicImport::lcl_endShape( )
+{
+}
+
+/*-- 09.08.2007 10:17:00---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool GraphicImport::IsGraphic() const
+{
+ return m_pImpl->bIsGraphic;
+}
+
+}
+}
diff --git a/writerfilter/source/dmapper/GraphicImport.hxx b/writerfilter/source/dmapper/GraphicImport.hxx
new file mode 100644
index 000000000000..87e99ce975b6
--- /dev/null
+++ b/writerfilter/source/dmapper/GraphicImport.hxx
@@ -0,0 +1,132 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_GRAPHICIMPORT_HXX
+#define INCLUDED_GRAPHICIMPORT_HXX
+
+//#ifndef INCLUDED_WRITERFILTERDLLAPI_H
+//#include <WriterFilterDllApi.hxx>
+//#endif
+#include <resourcemodel/LoggedResources.hxx>
+//#include <com/sun/star/lang/XComponent.hpp>
+namespace com{ namespace sun { namespace star {
+ namespace uno{
+ class XComponentContext;
+ }
+ namespace lang
+ {
+ class XMultiServiceFactory;
+ }
+ namespace text
+ {
+ class XTextContent;
+ }
+ namespace drawing
+ {
+ class XShape;
+ }
+ namespace beans
+ {
+ class PropertyValue;
+ typedef ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > PropertyValues;
+ }
+}}}
+
+namespace writerfilter {
+namespace dmapper
+{
+class GraphicImport_Impl;
+class DomainMapper;
+
+enum GraphicImportType
+{
+ IMPORT_AS_GRAPHIC,
+ IMPORT_AS_SHAPE,
+ IMPORT_AS_DETECTED_INLINE,
+ IMPORT_AS_DETECTED_ANCHOR
+};
+
+class WRITERFILTER_DLLPRIVATE GraphicImport : public LoggedProperties, public LoggedTable
+ ,public BinaryObj, public LoggedStream
+{
+ GraphicImport_Impl* m_pImpl;
+ ::com::sun::star::uno::Reference < ::com::sun::star::uno::XComponentContext > m_xComponentContext;
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > m_xTextFactory;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > m_xGraphicObject;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape> m_xShape;
+ void ProcessShapeOptions(Value & val);
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > createGraphicObject(
+ const ::com::sun::star::beans::PropertyValues& aMediaProperties );
+
+public:
+ explicit GraphicImport(::com::sun::star::uno::Reference < ::com::sun::star::uno::XComponentContext > xComponentContext,
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xTextFactory,
+ DomainMapper& rDomainMapper,
+ GraphicImportType eGraphicImportType);
+ virtual ~GraphicImport();
+
+ // BinaryObj
+ virtual void data(const sal_uInt8* buf, size_t len, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextContent > GetGraphicObject();
+ bool IsGraphic() const;
+
+ private:
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+ // Table
+ virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ // Stream
+ virtual void lcl_startSectionGroup();
+ virtual void lcl_endSectionGroup();
+ virtual void lcl_startParagraphGroup();
+ virtual void lcl_endParagraphGroup();
+ virtual void lcl_startCharacterGroup();
+ virtual void lcl_endCharacterGroup();
+ virtual void lcl_text(const sal_uInt8 * data, size_t len);
+ virtual void lcl_utext(const sal_uInt8 * data, size_t len);
+ virtual void lcl_props(writerfilter::Reference<Properties>::Pointer_t ref);
+ virtual void lcl_table(Id name,
+ writerfilter::Reference<Table>::Pointer_t ref);
+ virtual void lcl_substream(Id name,
+ ::writerfilter::Reference<Stream>::Pointer_t ref);
+ virtual void lcl_info(const string & info);
+ virtual void lcl_startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+ virtual void lcl_endShape( );
+
+ void handleWrapTextValue(sal_uInt32 nVal);
+};
+
+typedef boost::shared_ptr< GraphicImport > GraphicImportPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/MeasureHandler.cxx b/writerfilter/source/dmapper/MeasureHandler.cxx
new file mode 100644
index 000000000000..e34a6896ea0d
--- /dev/null
+++ b/writerfilter/source/dmapper/MeasureHandler.cxx
@@ -0,0 +1,134 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <MeasureHandler.hxx>
+#include <PropertyMap.hxx>
+#include <doctok/resourceids.hxx>
+#include <ConversionHelper.hxx>
+#include <ooxml/resourceids.hxx>
+#include <com/sun/star/text/SizeType.hpp>
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+MeasureHandler::MeasureHandler() :
+LoggedProperties(dmapper_logger, "MeasureHandler"),
+m_nMeasureValue( 0 ),
+m_nUnit( -1 ),
+m_nRowHeightSizeType( text::SizeType::MIN )
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+MeasureHandler::~MeasureHandler()
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void MeasureHandler::lcl_attribute(Id rName, Value & rVal)
+{
+ sal_Int32 nIntValue = rVal.getInt();
+ (void)rName;
+ /* WRITERFILTERSTATUS: table: MeasureHandler_attributedata */
+ switch( rName )
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_unit:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TblWidth_type:// = 90668;
+ //can be: NS_ooxml::LN_Value_ST_TblWidth_nil, NS_ooxml::LN_Value_ST_TblWidth_pct,
+ // NS_ooxml::LN_Value_ST_TblWidth_dxa, NS_ooxml::LN_Value_ST_TblWidth_auto;
+ m_nUnit = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Height_hRule: // 90666;
+ {
+ ::rtl::OUString sHeightType = rVal.getString();
+ if( sHeightType.equalsAscii( "exact" ) )
+ m_nRowHeightSizeType = text::SizeType::FIX;
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_trleft:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_preferredWidth:
+ case NS_ooxml::LN_CT_TblWidth_w:// = 90667;
+ m_nMeasureValue = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Height_val: // 90665 -- a string value
+ {
+ m_nUnit = NS_ooxml::LN_Value_ST_TblWidth_dxa;
+ ::rtl::OUString sHeight = rVal.getString();
+ m_nMeasureValue = sHeight.toInt32();
+ }
+ break;
+ default:
+ OSL_ENSURE( false, "unknown attribute");
+ }
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void MeasureHandler::lcl_sprm(Sprm & rSprm)
+{
+ (void)rSprm;
+}
+/*-- 24.04.2007 09:09:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int32 MeasureHandler::getMeasureValue() const
+{
+ sal_Int32 nRet = 0;
+ if( m_nMeasureValue != 0 && m_nUnit >= 0 )
+ {
+ // TODO m_nUnit 3 - twip, other values unknown :-(
+ if( m_nUnit == 3 || sal::static_int_cast<Id>(m_nUnit) == NS_ooxml::LN_Value_ST_TblWidth_dxa)
+ nRet = ConversionHelper::convertTwipToMM100( m_nMeasureValue );
+ //todo: handle additional width types:
+ //NS_ooxml::LN_Value_ST_TblWidth_nil, NS_ooxml::LN_Value_ST_TblWidth_pct,
+ //NS_ooxml::LN_Value_ST_TblWidth_dxa, NS_ooxml::LN_Value_ST_TblWidth_auto;
+ }
+ return nRet;
+}
+/*-- 18.06.2007 10:24:26---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool MeasureHandler::isAutoWidth() const
+{
+ return sal::static_int_cast<Id>(m_nUnit) == NS_ooxml::LN_Value_ST_TblWidth_auto;
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/MeasureHandler.hxx b/writerfilter/source/dmapper/MeasureHandler.hxx
new file mode 100644
index 000000000000..25a38a4862f3
--- /dev/null
+++ b/writerfilter/source/dmapper/MeasureHandler.hxx
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_MEASUREHANDLER_HXX
+#define INCLUDED_MEASUREHANDLER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+#include <boost/shared_ptr.hpp>
+
+namespace writerfilter {
+namespace dmapper
+{
+class PropertyMap;
+/** Handler for sprms that contain a measure and a unit
+ - Left indent of tables
+ - Preferred width of tables
+ */
+class WRITERFILTER_DLLPRIVATE MeasureHandler : public LoggedProperties
+{
+ sal_Int32 m_nMeasureValue;
+ sal_Int32 m_nUnit;
+ sal_Int16 m_nRowHeightSizeType; //table row height type
+
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+public:
+ MeasureHandler();
+ virtual ~MeasureHandler();
+
+ sal_Int32 getMeasureValue() const;
+ //at least tables can have automatic width
+ bool isAutoWidth() const;
+
+ sal_Int16 GetRowHeightSizeType() const { return m_nRowHeightSizeType;}
+};
+typedef boost::shared_ptr
+ < MeasureHandler > MeasureHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/ModelEventListener.cxx b/writerfilter/source/dmapper/ModelEventListener.cxx
new file mode 100644
index 000000000000..853b835d7d98
--- /dev/null
+++ b/writerfilter/source/dmapper/ModelEventListener.cxx
@@ -0,0 +1,96 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <ModelEventListener.hxx>
+#include <com/sun/star/document/XEventBroadcaster.hpp>
+#include <com/sun/star/text/XDocumentIndex.hpp>
+#include <com/sun/star/text/XDocumentIndexesSupplier.hpp>
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+
+
+/*-- 22.11.2007 08:40:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ModelEventListener::ModelEventListener()
+{
+}
+/*-- 22.11.2007 08:40:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ModelEventListener::~ModelEventListener()
+{
+}
+/*-- 22.11.2007 08:40:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void ModelEventListener::notifyEvent( const document::EventObject& rEvent ) throw (uno::RuntimeException)
+{
+ if( rEvent.EventName.equalsAscii("OnFocus"))
+ {
+ try
+ {
+ uno::Reference< text::XDocumentIndexesSupplier> xIndexesSupplier( rEvent.Source, uno::UNO_QUERY );
+ //remove listener
+ uno::Reference<document::XEventBroadcaster>(rEvent.Source, uno::UNO_QUERY )->removeEventListener(
+ uno::Reference<document::XEventListener>(this));
+
+ uno::Reference< container::XIndexAccess > xIndexes = xIndexesSupplier->getDocumentIndexes();
+
+ sal_Int32 nIndexes = xIndexes->getCount();
+ for( sal_Int32 nIndex = 0; nIndex < nIndexes; ++nIndex)
+ {
+ uno::Reference< text::XDocumentIndex> xIndex( xIndexes->getByIndex( nIndex ), uno::UNO_QUERY );
+ xIndex->update();
+ }
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "exception while updating indexes" );
+ }
+ }
+}
+/*-- 22.11.2007 08:40:22---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void ModelEventListener::disposing( const lang::EventObject& rEvent ) throw (uno::RuntimeException)
+{
+ try
+ {
+ uno::Reference<document::XEventBroadcaster>(rEvent.Source, uno::UNO_QUERY )->removeEventListener(
+ uno::Reference<document::XEventListener>(this));
+ }
+ catch( const uno::Exception& )
+ {
+ }
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/ModelEventListener.hxx b/writerfilter/source/dmapper/ModelEventListener.hxx
new file mode 100644
index 000000000000..3486dc70947d
--- /dev/null
+++ b/writerfilter/source/dmapper/ModelEventListener.hxx
@@ -0,0 +1,51 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_MODELEVENTLISTENER_HXX
+#define INCLUDED_MODELEVENTLISTENER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <com/sun/star/document/XEventListener.hpp>
+#include <cppuhelper/implbase1.hxx>
+
+namespace writerfilter {
+namespace dmapper{
+
+
+class WRITERFILTER_DLLPRIVATE ModelEventListener :
+ public cppu::WeakImplHelper1< ::com::sun::star::document::XEventListener >
+{
+public:
+ ModelEventListener();
+ ~ModelEventListener();
+
+ virtual void SAL_CALL notifyEvent( const ::com::sun::star::document::EventObject& Event ) throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException);
+
+};
+}//namespace writerfilter
+}//namespace dmapper
+#endif //
diff --git a/writerfilter/source/dmapper/NumberingManager.cxx b/writerfilter/source/dmapper/NumberingManager.cxx
new file mode 100644
index 000000000000..9e66e1a467c3
--- /dev/null
+++ b/writerfilter/source/dmapper/NumberingManager.cxx
@@ -0,0 +1,1047 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "ConversionHelper.hxx"
+#include "NumberingManager.hxx"
+#include "StyleSheetTable.hxx"
+#include "PropertyIds.hxx"
+
+#include <doctok/resourceids.hxx>
+#include <doctok/sprmids.hxx>
+#include <ooxml/resourceids.hxx>
+
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
+#include <com/sun/star/style/NumberingType.hpp>
+#include <com/sun/star/text/HoriOrientation.hpp>
+#include <com/sun/star/text/PositionAndSpaceMode.hpp>
+#include <com/sun/star/text/XChapterNumberingSupplier.hpp>
+
+#if DEBUG
+#include <stdio.h>
+#endif
+
+#include "dmapperLoggers.hxx"
+
+using namespace rtl;
+using namespace com::sun::star;
+
+#define MAKE_PROPVAL(NameId, Value) \
+ beans::PropertyValue(aPropNameSupplier.GetName(NameId), 0, uno::makeAny(Value), beans::PropertyState_DIRECT_VALUE )
+
+#define OUSTR_TO_C( x ) OUStringToOString( x, RTL_TEXTENCODING_UTF8 ).getStr( )
+
+#define NUMBERING_MAX_LEVELS 10
+
+
+namespace writerfilter {
+namespace dmapper {
+
+//--------------------------------------------------- Utility functions
+
+void lcl_printProperties( uno::Sequence< beans::PropertyValue > aProps )
+{
+ sal_Int32 nLen = aProps.getLength( );
+ for ( sal_Int32 i = 0; i < nLen; i++ )
+ {
+ uno::Any aValue = aProps[i].Value;
+ sal_Int32 nValue = 0;
+ OUString sValue;
+
+ if ( !( aValue >>= sValue ) && ( aValue >>= nValue ) )
+ sValue = OUString::valueOf( nValue );
+
+#if DEBUG
+ fprintf( stderr, "Property %s: %s\n",
+ OUSTR_TO_C( aProps[i].Name ),
+ OUSTR_TO_C( sValue ) );
+#endif
+ }
+}
+
+sal_Int32 lcl_findProperty( uno::Sequence< beans::PropertyValue > aProps, OUString sName )
+{
+ sal_Int32 i = 0;
+ sal_Int32 nLen = aProps.getLength( );
+ sal_Int32 nPos = -1;
+
+ while ( nPos == -1 && i < nLen )
+ {
+ if ( aProps[i].Name.equals( sName ) )
+ nPos = i;
+ else
+ i++;
+ }
+
+ return nPos;
+}
+
+void lcl_mergeProperties( uno::Sequence< beans::PropertyValue >& aSrc,
+ uno::Sequence< beans::PropertyValue >& aDst )
+{
+ for ( sal_Int32 i = 0, nSrcLen = aSrc.getLength( ); i < nSrcLen; i++ )
+ {
+ // Look for the same property in aDst
+ sal_Int32 nPos = lcl_findProperty( aDst, aSrc[i].Name );
+ if ( nPos >= 0 )
+ {
+ // Replace the property value by the one in aSrc
+ aDst[nPos] = aSrc[i];
+ }
+ else
+ {
+ // Simply add the new value
+ aDst.realloc( aDst.getLength( ) + 1 );
+ aDst[ aDst.getLength( ) - 1 ] = aSrc[i];
+ }
+ }
+}
+
+//-------------------------------------------- ListLevel implementation
+void ListLevel::SetValue( Id nId, sal_Int32 nValue )
+{
+ switch( nId )
+ {
+ case NS_rtf::LN_ISTARTAT:
+ m_nIStartAt = nValue;
+ break;
+ case NS_rtf::LN_NFC:
+ m_nNFC = nValue;
+ break;
+ case NS_rtf::LN_JC:
+ m_nJC = nValue;
+ break;
+ case NS_rtf::LN_FLEGAL:
+ m_nFLegal = nValue;
+ break;
+ case NS_rtf::LN_FNORESTART:
+ m_nFNoRestart = nValue;
+ break;
+ case NS_rtf::LN_FIDENTSAV:
+ m_nFPrev = nValue;
+ break;
+ case NS_rtf::LN_FCONVERTED:
+ m_nFPrevSpace = nValue;
+ break;
+#if 0
+ case NS_rtf::LN_FWORD6:
+ m_nFWord6 = nValue;
+ break;
+#endif
+ case NS_rtf::LN_IXCHFOLLOW:
+ m_nXChFollow = nValue;
+ break;
+ case NS_ooxml::LN_CT_TabStop_pos:
+ m_nTabstop = nValue;
+ break;
+ default:
+ OSL_ENSURE( false, "this line should never be reached");
+ }
+}
+
+sal_Int16 ListLevel::GetParentNumbering( OUString sText, sal_Int16 nLevel,
+ OUString& rPrefix, OUString& rSuffix )
+{
+ sal_Int16 nParentNumbering = nLevel;
+
+ //now parse the text to find %n from %1 to %nLevel+1
+ //everything before the first % and the last %x is prefix and suffix
+ OUString sLevelText( sText );
+ sal_Int32 nCurrentIndex = 0;
+ sal_Int32 nFound = sLevelText.indexOf( '%', nCurrentIndex );
+ if( nFound > 0 )
+ {
+ rPrefix = sLevelText.copy( 0, nFound );
+ sLevelText = sLevelText.copy( nFound );
+ }
+ sal_Int32 nMinLevel = nLevel;
+ //now the text should either be empty or start with %
+ nFound = sLevelText.getLength( ) > 1 ? 0 : -1;
+ while( nFound >= 0 )
+ {
+ if( sLevelText.getLength() > 1 )
+ {
+ sal_Unicode cLevel = sLevelText.getStr()[1];
+ if( cLevel >= '1' && cLevel <= '9' )
+ {
+ if( cLevel - '1' < nMinLevel )
+ nMinLevel = cLevel - '1';
+ //remove first char - next char is removed later
+ sLevelText = sLevelText.copy( 1 );
+ }
+ }
+ //remove old '%' or number
+ sLevelText = sLevelText.copy( 1 );
+ nCurrentIndex = 0;
+ nFound = sLevelText.indexOf( '%', nCurrentIndex );
+ //remove the text before the next %
+ if(nFound > 0)
+ sLevelText = sLevelText.copy( nFound -1 );
+ }
+ if( nMinLevel < nLevel )
+ {
+ nParentNumbering = sal_Int16( nLevel - nMinLevel + 1);
+ }
+
+ rSuffix = sLevelText;
+
+ return nParentNumbering;
+}
+
+uno::Sequence< beans::PropertyValue > ListLevel::GetProperties( )
+{
+ uno::Sequence< beans::PropertyValue > aLevelProps = GetLevelProperties( );
+ if ( m_pParaStyle.get( ) )
+ {
+ // Merge with the paragraph properties
+ uno::Sequence< beans::PropertyValue > aParaProps = GetParaProperties( );
+ lcl_mergeProperties( aParaProps, aLevelProps );
+ }
+ return aLevelProps;
+}
+
+uno::Sequence< beans::PropertyValue > ListLevel::GetCharStyleProperties( )
+{
+ PropertyValueVector_t rProperties;
+ PropertyNameSupplier& aPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ _PropertyMap::const_iterator aMapIter = begin();
+ _PropertyMap::const_iterator aEndIter = end();
+ for( ; aMapIter != aEndIter; ++aMapIter )
+ {
+ switch( aMapIter->first.eId )
+ {
+ case PROP_ADJUST:
+ case PROP_INDENT_AT:
+ case PROP_FIRST_LINE_INDENT:
+ case PROP_FIRST_LINE_OFFSET:
+ case PROP_LEFT_MARGIN:
+ case PROP_CHAR_FONT_NAME:
+ // Do nothing: handled in the GetPropertyValues method
+ break;
+ default:
+ {
+ rProperties.push_back(
+ beans::PropertyValue(
+ aPropNameSupplier.GetName( aMapIter->first.eId ), 0,
+ aMapIter->second, beans::PropertyState_DIRECT_VALUE ));
+ }
+ }
+ }
+
+ uno::Sequence< beans::PropertyValue > aRet( rProperties.size() );
+ beans::PropertyValue* pValues = aRet.getArray();
+ PropertyValueVector_t::const_iterator aIt = rProperties.begin();
+ PropertyValueVector_t::const_iterator aEndIt = rProperties.end();
+ for(sal_uInt32 nIndex = 0; aIt != aEndIt; ++aIt,++nIndex)
+ {
+ pValues[nIndex] = *aIt;
+ }
+ return aRet;
+}
+
+uno::Sequence< beans::PropertyValue > ListLevel::GetLevelProperties( )
+{
+ const sal_Int16 aWWToUnoAdjust[] =
+ {
+ text::HoriOrientation::LEFT,
+ text::HoriOrientation::CENTER,
+ text::HoriOrientation::RIGHT,
+ };
+
+ PropertyNameSupplier& aPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ PropertyValueVector_t aNumberingProperties;
+
+ if( m_nIStartAt >= 0)
+ aNumberingProperties.push_back( MAKE_PROPVAL(PROP_START_WITH, (sal_Int16)m_nIStartAt) );
+
+ sal_Int16 nNumberFormat = ConversionHelper::ConvertNumberingType(m_nNFC);
+ if( m_nNFC >= 0)
+ aNumberingProperties.push_back( MAKE_PROPVAL(PROP_NUMBERING_TYPE, nNumberFormat ));
+
+ if( m_nJC >= 0 && m_nJC <= sal::static_int_cast<sal_Int32>(sizeof(aWWToUnoAdjust) / sizeof(sal_Int16)) )
+ aNumberingProperties.push_back( MAKE_PROPVAL(PROP_ADJUST, aWWToUnoAdjust[m_nJC]));
+
+ // todo: this is not the bullet char
+ if( nNumberFormat == style::NumberingType::CHAR_SPECIAL && m_sBulletChar.getLength() )
+ aNumberingProperties.push_back( MAKE_PROPVAL(PROP_BULLET_CHAR, m_sBulletChar.copy(0,1)));
+
+ aNumberingProperties.push_back( MAKE_PROPVAL( PROP_LISTTAB_STOP_POSITION, m_nTabstop ) );
+
+ //TODO: handling of nFLegal?
+ //TODO: nFNoRestart lower levels do not restart when higher levels are incremented, like:
+ //1.
+ //1.1
+ //2.2
+ //2.3
+ //3.4
+ //
+
+ if( m_nFWord6 > 0) //Word 6 compatibility
+ {
+ if( m_nFPrev == 1)
+ aNumberingProperties.push_back( MAKE_PROPVAL( PROP_PARENT_NUMBERING, (sal_Int16) NUMBERING_MAX_LEVELS ));
+ //TODO: prefixing space nFPrevSpace; - has not been used in WW8 filter
+ }
+
+// TODO: sRGBXchNums; array of inherited numbers
+
+// TODO: nXChFollow; following character 0 - tab, 1 - space, 2 - nothing
+
+ _PropertyMap::const_iterator aMapIter = begin();
+ _PropertyMap::const_iterator aEndIter = end();
+ for( ; aMapIter != aEndIter; ++aMapIter )
+ {
+ switch( aMapIter->first.eId )
+ {
+ case PROP_ADJUST:
+ case PROP_INDENT_AT:
+ case PROP_FIRST_LINE_INDENT:
+ case PROP_FIRST_LINE_OFFSET:
+ case PROP_LEFT_MARGIN:
+ aNumberingProperties.push_back(
+ beans::PropertyValue( aPropNameSupplier.GetName( aMapIter->first.eId ), 0, aMapIter->second, beans::PropertyState_DIRECT_VALUE ));
+ break;
+ case PROP_CHAR_FONT_NAME:
+ aNumberingProperties.push_back(
+ beans::PropertyValue( aPropNameSupplier.GetName( PROP_BULLET_FONT_NAME ), 0, aMapIter->second, beans::PropertyState_DIRECT_VALUE ));
+ break;
+ default:
+ {
+ // Handled in GetCharStyleProperties method
+ }
+
+ }
+ }
+
+ uno::Sequence< beans::PropertyValue > aRet(aNumberingProperties.size());
+ beans::PropertyValue* pValues = aRet.getArray();
+ PropertyValueVector_t::const_iterator aIt = aNumberingProperties.begin();
+ PropertyValueVector_t::const_iterator aEndIt = aNumberingProperties.end();
+ for(sal_uInt32 nIndex = 0; aIt != aEndIt; ++aIt,++nIndex)
+ {
+ pValues[nIndex] = *aIt;
+ }
+ return aRet;
+}
+
+uno::Sequence< beans::PropertyValue > ListLevel::GetParaProperties( )
+{
+ PropertyNameSupplier& aPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ uno::Sequence< beans::PropertyValue > aParaProps = m_pParaStyle->pProperties->GetPropertyValues( );
+ uno::Sequence< beans::PropertyValue > aProps;
+
+ // ParaFirstLineIndent -> FirstLineIndent
+ // ParaLeftMargin -> IndentAt
+
+ OUString sParaIndent = aPropNameSupplier.GetName(
+ PROP_PARA_FIRST_LINE_INDENT );
+ OUString sFirstLineIndent = aPropNameSupplier.GetName(
+ PROP_FIRST_LINE_INDENT );
+ OUString sParaLeftMargin = aPropNameSupplier.GetName(
+ PROP_PARA_LEFT_MARGIN );
+ OUString sIndentAt = aPropNameSupplier.GetName(
+ PROP_INDENT_AT );
+
+ sal_Int32 nLen = aParaProps.getLength( );
+ for ( sal_Int32 i = 0; i < nLen; i++ )
+ {
+ if ( aParaProps[i].Name.equals( sParaIndent ) )
+ {
+ aProps.realloc( aProps.getLength() + 1 );
+ aProps[aProps.getLength( ) - 1] = aParaProps[i];
+ aProps[aProps.getLength( ) - 1].Name = sFirstLineIndent;
+ }
+ else if ( aParaProps[i].Name.equals( sParaLeftMargin ) )
+ {
+ aProps.realloc( aProps.getLength() + 1 );
+ aProps[aProps.getLength( ) - 1] = aParaProps[i];
+ aProps[aProps.getLength( ) - 1].Name = sIndentAt;
+ }
+
+ }
+
+ return aProps;
+}
+
+//--------------------------------------- AbstractListDef implementation
+
+AbstractListDef::AbstractListDef( ) :
+ m_nTPLC( -1 )
+ ,m_nSimpleList( -1 )
+ ,m_nRestart( -1 )
+ ,m_nUnsigned( -1 )
+ ,m_nId( -1 )
+{
+}
+
+AbstractListDef::~AbstractListDef( )
+{
+}
+
+void AbstractListDef::SetValue( sal_uInt32 nSprmId, sal_Int32 nValue )
+{
+ switch( nSprmId )
+ {
+ case NS_rtf::LN_TPLC:
+ m_nTPLC = nValue;
+ break;
+ case NS_rtf::LN_FSIMPLELIST:
+ m_nSimpleList = nValue;
+ break;
+ case NS_rtf::LN_fAutoNum:
+ m_nRestart = nValue;
+ break;
+ case NS_rtf::LN_fHybrid:
+ m_nUnsigned = nValue;
+ break;
+ default:
+ OSL_ENSURE( false, "this line should never be reached");
+ }
+}
+
+ListLevel::Pointer AbstractListDef::GetLevel( sal_uInt16 nLvl )
+{
+ ListLevel::Pointer pLevel;
+ if ( m_aLevels.size( ) > nLvl )
+ pLevel = m_aLevels[ nLvl ];
+ return pLevel;
+}
+
+void AbstractListDef::AddLevel( )
+{
+ ListLevel::Pointer pLevel( new ListLevel );
+ m_pCurrentLevel = pLevel;
+ m_aLevels.push_back( pLevel );
+}
+
+uno::Sequence< uno::Sequence< beans::PropertyValue > > AbstractListDef::GetPropertyValues( )
+{
+ uno::Sequence< uno::Sequence< beans::PropertyValue > > result( sal_Int32( m_aLevels.size( ) ) );
+ uno::Sequence< beans::PropertyValue >* aResult = result.getArray( );
+
+ int nLevels = m_aLevels.size( );
+ for ( int i = 0; i < nLevels; i++ )
+ {
+ aResult[i] = m_aLevels[i]->GetProperties( );
+ }
+
+ return result;
+}
+
+//---------------------------------------------- ListDef implementation
+
+ListDef::ListDef( ) : AbstractListDef( )
+{
+}
+
+ListDef::~ListDef( )
+{
+}
+
+OUString ListDef::GetStyleName( sal_Int32 nId )
+{
+ OUString sStyleName( OUString::createFromAscii( "WWNum" ) );
+ sStyleName += OUString::valueOf( nId );
+
+ return sStyleName;
+}
+
+uno::Sequence< uno::Sequence< beans::PropertyValue > > ListDef::GetPropertyValues( )
+{
+ // [1] Call the same method on the abstract list
+ uno::Sequence< uno::Sequence< beans::PropertyValue > > aAbstract = m_pAbstractDef->GetPropertyValues( );
+
+ // [2] Call the upper class method
+ uno::Sequence< uno::Sequence< beans::PropertyValue > > aThis = AbstractListDef::GetPropertyValues( );
+
+ // Merge the results of [2] in [1]
+ sal_Int32 nThisCount = aThis.getLength( );
+ for ( sal_Int32 i = 0; i < nThisCount; i++ )
+ {
+ uno::Sequence< beans::PropertyValue > level = aThis[i];
+ if ( level.getLength( ) == 0 )
+ {
+ // If the the element contains something, merge it
+ lcl_mergeProperties( level, aAbstract[i] );
+ }
+ }
+
+ return aAbstract;
+}
+
+uno::Reference< container::XNameContainer > lcl_getUnoNumberingStyles(
+ uno::Reference< lang::XMultiServiceFactory > xFactory )
+{
+ uno::Reference< container::XNameContainer > xStyles;
+
+ try
+ {
+ uno::Reference< style::XStyleFamiliesSupplier > xFamilies( xFactory, uno::UNO_QUERY_THROW );
+ uno::Any oFamily = xFamilies->getStyleFamilies( )->getByName( OUString::createFromAscii( "NumberingStyles" ) );
+
+ oFamily >>= xStyles;
+ }
+ catch ( const uno::Exception )
+ {
+ }
+
+ return xStyles;
+}
+
+void ListDef::CreateNumberingRules( DomainMapper& rDMapper,
+ uno::Reference< lang::XMultiServiceFactory> xFactory )
+{
+ // Get the UNO Numbering styles
+ uno::Reference< container::XNameContainer > xStyles = lcl_getUnoNumberingStyles( xFactory );
+
+ // Do the whole thing
+ if( !m_xNumRules.is() && xFactory.is() && xStyles.is( ) )
+ {
+ try
+ {
+ // Create the numbering style
+ uno::Reference< beans::XPropertySet > xStyle (
+ xFactory->createInstance(
+ OUString::createFromAscii("com.sun.star.style.NumberingStyle")),
+ uno::UNO_QUERY_THROW );
+
+ rtl::OUString sStyleName = GetStyleName( GetId( ) );
+
+ xStyles->insertByName( sStyleName, makeAny( xStyle ) );
+
+ uno::Any oStyle = xStyles->getByName( sStyleName );
+ xStyle.set( oStyle, uno::UNO_QUERY_THROW );
+
+ PropertyNameSupplier& aPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ // Get the default OOo Numbering style rules
+ uno::Any aRules = xStyle->getPropertyValue( aPropNameSupplier.GetName( PROP_NUMBERING_RULES ) );
+ aRules >>= m_xNumRules;
+
+ uno::Sequence< uno::Sequence< beans::PropertyValue > > aProps = GetPropertyValues( );
+
+ sal_Int32 nAbstLevels = m_pAbstractDef->Size( );
+ sal_Int16 nLevel = 0;
+ while ( nLevel < nAbstLevels )
+ {
+ ListLevel::Pointer pAbsLevel = m_pAbstractDef->GetLevel( nLevel );
+ ListLevel::Pointer pLevel = GetLevel( nLevel );
+
+ // Get the merged level properties
+ uno::Sequence< beans::PropertyValue > aLvlProps = aProps[sal_Int32( nLevel )];
+
+ lcl_printProperties( aLvlProps );
+
+ // Get the char style
+ uno::Sequence< beans::PropertyValue > aAbsCharStyleProps = pAbsLevel->GetCharStyleProperties( );
+ uno::Sequence< beans::PropertyValue >& rAbsCharStyleProps = aAbsCharStyleProps;
+ if ( pLevel.get( ) )
+ {
+ uno::Sequence< beans::PropertyValue > aCharStyleProps =
+ pLevel->GetCharStyleProperties( );
+ uno::Sequence< beans::PropertyValue >& rCharStyleProps = aCharStyleProps;
+ lcl_mergeProperties( rAbsCharStyleProps, rCharStyleProps );
+ }
+
+ if( aAbsCharStyleProps.getLength() )
+ {
+ // Change the sequence into a vector
+ PropertyValueVector_t aStyleProps;
+ for ( sal_Int32 i = 0, nLen = aAbsCharStyleProps.getLength() ; i < nLen; i++ )
+ {
+ aStyleProps.push_back( aAbsCharStyleProps[i] );
+ }
+
+ //create (or find) a character style containing the character
+ // attributes of the symbol and apply it to the numbering level
+ OUString sStyle = rDMapper.getOrCreateCharStyle( aStyleProps );
+ aLvlProps.realloc( aLvlProps.getLength() + 1);
+ aLvlProps[aLvlProps.getLength() - 1].Name = aPropNameSupplier.GetName( PROP_CHAR_STYLE_NAME );
+ aLvlProps[aLvlProps.getLength() - 1].Value <<= sStyle;
+ }
+
+ // Get the prefix / suffix / Parent numbering
+ // and add them to the level properties
+ OUString sText = pAbsLevel->GetBulletChar( );
+ if ( pLevel.get( ) )
+ sText = pLevel->GetBulletChar( );
+
+ OUString sPrefix;
+ OUString sSuffix;
+ OUString& rPrefix = sPrefix;
+ OUString& rSuffix = sSuffix;
+ sal_Int16 nParentNum = ListLevel::GetParentNumbering(
+ sText, nLevel, rPrefix, rSuffix );
+
+ aLvlProps.realloc( aLvlProps.getLength( ) + 4 );
+ aLvlProps[ aLvlProps.getLength( ) - 4 ] = MAKE_PROPVAL( PROP_PREFIX, rPrefix );
+ aLvlProps[ aLvlProps.getLength( ) - 3 ] = MAKE_PROPVAL( PROP_SUFFIX, rSuffix );
+ aLvlProps[ aLvlProps.getLength( ) - 2 ] = MAKE_PROPVAL( PROP_PARENT_NUMBERING, nParentNum );
+
+ aLvlProps[ aLvlProps.getLength( ) - 1 ] = MAKE_PROPVAL( PROP_POSITION_AND_SPACE_MODE,
+ sal_Int16( text::PositionAndSpaceMode::LABEL_ALIGNMENT ) );
+ // Replace the numbering rules for the level
+ m_xNumRules->replaceByIndex( nLevel, uno::makeAny( aLvlProps ) );
+
+ // Handle the outline level here
+ StyleSheetEntryPtr pParaStyle = pAbsLevel->GetParaStyle( );
+ if ( pParaStyle.get( ) )
+ {
+ uno::Reference< text::XChapterNumberingSupplier > xOutlines (
+ xFactory, uno::UNO_QUERY_THROW );
+ uno::Reference< container::XIndexReplace > xOutlineRules =
+ xOutlines->getChapterNumberingRules( );
+
+ aLvlProps.realloc( aLvlProps.getLength() + 1 );
+ aLvlProps[aLvlProps.getLength( ) - 1] = MAKE_PROPVAL( PROP_HEADING_STYLE_NAME, pParaStyle->sConvertedStyleName );
+
+ xOutlineRules->replaceByIndex( nLevel, uno::makeAny( aLvlProps ) );
+ }
+
+ nLevel++;
+ }
+
+ // Create the numbering style for these rules
+ OUString sNumRulesName = aPropNameSupplier.GetName( PROP_NUMBERING_RULES );
+ xStyle->setPropertyValue( sNumRulesName, uno::makeAny( m_xNumRules ) );
+ }
+ catch( const uno::Exception& rEx)
+ {
+ OSL_ENSURE( false, "ListTable::CreateNumberingRules");
+ }
+ }
+
+}
+
+//------------------------------------- NumberingManager implementation
+
+
+ListsManager::ListsManager(DomainMapper& rDMapper,
+ const uno::Reference< lang::XMultiServiceFactory > xFactory) :
+LoggedProperties(dmapper_logger, "ListsManager"),
+LoggedTable(dmapper_logger, "ListsManager"),
+m_rDMapper( rDMapper ),
+m_xFactory( xFactory )
+{
+}
+
+ListsManager::~ListsManager( )
+{
+}
+
+void ListsManager::lcl_attribute( Id nName, Value& rVal )
+{
+ OSL_ENSURE( m_pCurrentDefinition.get(), "current entry has to be set here");
+ if(!m_pCurrentDefinition.get())
+ return ;
+ int nIntValue = rVal.getInt();
+
+ ListLevel::Pointer pCurrentLvl = m_pCurrentDefinition->GetCurrentLevel( );
+
+
+ /* WRITERFILTERSTATUS: table: ListTable_attributedata */
+ switch(nName)
+ {
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_RGBXCHNUMS:
+ if(pCurrentLvl.get())
+ pCurrentLvl->AddRGBXchNums( rVal.getString( ) );
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_LevelText_val:
+ {
+ //this strings contains the definition of the level
+ //the level number is marked as %n
+ //these numbers can be mixed randomly toghether with seperators pre- and suffixes
+ //the Writer supports only a number of upper levels to show, separators is always a dot
+ //and each level can have a prefix and a suffix
+ if(pCurrentLvl.get())
+ pCurrentLvl->SetBulletChar( rVal.getString() );
+ }
+ break;
+// case NS_rtf::LN_ISTD: break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_ISTARTAT:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_NFC:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_JC:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FLEGAL:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FNORESTART:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FIDENTSAV:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FCONVERTED:
+#if 0
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FWORD6:
+#endif
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_IXCHFOLLOW:
+ if ( pCurrentLvl.get( ) )
+ pCurrentLvl->SetValue( nName, sal_Int32( nIntValue ) );
+ break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_RGISTD:
+ m_pCurrentDefinition->AddRGISTD( rVal.getString() );
+ break;
+ case NS_ooxml::LN_CT_Num_numId:
+ m_pCurrentDefinition->SetId( rVal.getString().toInt32( ) );
+ break;
+ case NS_rtf::LN_LSID:
+ m_pCurrentDefinition->SetId( nIntValue );
+ break;
+ case NS_rtf::LN_TPLC:
+ case NS_rtf::LN_FSIMPLELIST:
+ case NS_rtf::LN_fAutoNum:
+ case NS_rtf::LN_fHybrid:
+ m_pCurrentDefinition->SetValue( nName, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_NumLvl_ilvl:
+ case NS_rtf::LN_LISTLEVEL:
+ {
+ //add a new level to the level vector and make it the current one
+ m_pCurrentDefinition->AddLevel();
+
+ writerfilter::Reference<Properties>::Pointer_t pProperties;
+ if((pProperties = rVal.getProperties()).get())
+ pProperties->resolve(*this);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_AbstractNum_abstractNumId:
+ {
+ // This one corresponds to the AbstractNum Id definition
+ // The reference to the abstract num is in the sprm method
+ sal_Int32 nVal = rVal.getString().toInt32();
+ m_pCurrentDefinition->SetId( nVal );
+ }
+ break;
+ case NS_ooxml::LN_CT_Ind_left:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pCurrentLvl->Insert(
+ PROP_INDENT_AT, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Ind_hanging:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pCurrentLvl->Insert(
+ PROP_FIRST_LINE_INDENT, true, uno::makeAny( - ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Ind_firstLine:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ pCurrentLvl->Insert(
+ PROP_FIRST_LINE_INDENT, true, uno::makeAny( ConversionHelper::convertTwipToMM100( nIntValue ) ));
+ break;
+ case NS_ooxml::LN_CT_Lvl_ilvl: //overrides previous level - unsupported
+ case NS_ooxml::LN_CT_Lvl_tplc: //template code - unsupported
+ case NS_ooxml::LN_CT_Lvl_tentative: //marks level as unused in the document - unsupported
+ break;
+ case NS_ooxml::LN_CT_TabStop_pos:
+ {
+ //no paragraph attributes in ListTable char style sheets
+ if ( pCurrentLvl.get( ) )
+ pCurrentLvl->SetValue( nName,
+ ConversionHelper::convertTwipToMM100( nIntValue ) );
+ }
+ break;
+ case NS_ooxml::LN_CT_TabStop_val:
+ {
+ // TODO Do something of that
+ }
+ break;
+ default:
+ {
+#if OSL_DEBUG_LEVEL > 0
+ ::rtl::OString sMessage( "ListTable::attribute() - Id: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nName ), 16 );
+ sMessage += ::rtl::OString(" value: ");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 10 );
+ sMessage += ::rtl::OString(" / 0x");
+ sMessage += ::rtl::OString::valueOf( sal_Int32( nIntValue ), 16 );
+ OSL_ENSURE( false, sMessage.getStr()); //
+#endif
+ }
+ }
+}
+
+void ListsManager::lcl_sprm( Sprm& rSprm )
+{
+ //fill the attributes of the style sheet
+ sal_uInt32 nSprmId = rSprm.getId();
+ if( m_pCurrentDefinition.get() ||
+ nSprmId == NS_ooxml::LN_CT_Numbering_abstractNum ||
+ nSprmId == NS_ooxml::LN_CT_Numbering_num )
+ {
+ sal_Int32 nIntValue = rSprm.getValue()->getInt();
+ /* WRITERFILTERSTATUS: table: ListTable_sprm */
+ switch( nSprmId )
+ {
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Numbering_abstractNum:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ {
+ //create a new Abstract list entry
+ OSL_ENSURE( !m_pCurrentDefinition.get(), "current entry has to be NULL here");
+ m_pCurrentDefinition.reset( new AbstractListDef );
+ pProperties->resolve( *this );
+ //append it to the table
+ m_aAbstractLists.push_back( m_pCurrentDefinition );
+ m_pCurrentDefinition = AbstractListDef::Pointer();
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Numbering_num:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ {
+ // Create a new list entry
+ OSL_ENSURE( !m_pCurrentDefinition.get(), "current entry has to be NULL here");
+ ListDef::Pointer listDef( new ListDef );
+ m_pCurrentDefinition = listDef;
+ pProperties->resolve( *this );
+ //append it to the table
+ m_aLists.push_back( listDef );
+
+ m_pCurrentDefinition = AbstractListDef::Pointer();
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_Num_abstractNumId:
+ {
+ sal_Int32 nAbstractNumId = rSprm.getValue()->getInt();
+ ListDef* pListDef = dynamic_cast< ListDef* >( m_pCurrentDefinition.get( ) );
+ if ( pListDef != NULL )
+ {
+ // The current def should be a ListDef
+ pListDef->SetAbstractDefinition(
+ GetAbstractList( nAbstractNumId ) );
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_AbstractNum_multiLevelType:
+ break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_TPLC:
+ m_pCurrentDefinition->SetValue( nSprmId, nIntValue );
+ break;
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_AbstractNum_lvl:
+ {
+ m_pCurrentDefinition->AddLevel();
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_RGBXCHNUMS: break;
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_ISTARTAT:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_NFC:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_JC:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FLEGAL:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FNORESTART:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FIDENTSAV:
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FCONVERTED:
+#if 0
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_FWORD6:
+#endif
+ /* WRITERFILTERSTATUS: done: 75, planned: 0, spent: 0 */
+ case NS_rtf::LN_IXCHFOLLOW:
+ m_pCurrentDefinition->GetCurrentLevel( )->SetValue( nSprmId, nIntValue );
+ break;
+ case NS_ooxml::LN_CT_Lvl_lvlText:
+ case NS_ooxml::LN_CT_Lvl_rPr : //contains LN_EG_RPrBase_rFonts
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ case NS_ooxml::LN_CT_NumLvl_lvl:
+ {
+ // overwrite level
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ case NS_ooxml::LN_CT_Lvl_lvlJc:
+ {
+ static sal_Int16 aWWAlignments[ ] =
+ {
+ text::HoriOrientation::LEFT,
+ text::HoriOrientation::CENTER,
+ text::HoriOrientation::RIGHT
+ };
+ m_pCurrentDefinition->GetCurrentLevel( )->Insert(
+ PROP_ADJUST, true, uno::makeAny( aWWAlignments[ nIntValue ] ) );
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ }
+ break;
+ case NS_ooxml::LN_CT_Lvl_pPr:
+ case NS_ooxml::LN_CT_PPrBase_ind:
+ {
+ //todo: how to handle paragraph properties within numbering levels (except LeftIndent and FirstLineIndent)?
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ case NS_ooxml::LN_CT_PPrBase_tabs:
+ case NS_ooxml::LN_CT_Tabs_tab:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if(pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ case NS_ooxml::LN_CT_Lvl_suff:
+ //todo: currently unsupported suffix
+ //can be: "none", "space", "tab"
+ break;
+ case NS_ooxml::LN_CT_Lvl_pStyle:
+ {
+ OUString sStyleName = rSprm.getValue( )->getString( );
+ ListLevel::Pointer pLevel = m_pCurrentDefinition->GetCurrentLevel( );
+ StyleSheetTablePtr pStylesTable = m_rDMapper.GetStyleSheetTable( );
+ const StyleSheetEntryPtr pStyle = pStylesTable->FindStyleSheetByISTD( sStyleName );
+ pLevel->SetParaStyle( pStyle );
+ }
+ break;
+ case NS_ooxml::LN_EG_RPrBase_rFonts: //contains font properties
+ case NS_ooxml::LN_EG_RPrBase_color:
+ case NS_ooxml::LN_EG_RPrBase_u:
+ case NS_sprm::LN_CHps: // sprmCHps
+ case NS_ooxml::LN_EG_RPrBase_lang:
+ case NS_ooxml::LN_EG_RPrBase_eastAsianLayout:
+ //no break!
+ default:
+ if( m_pCurrentDefinition->GetCurrentLevel( ).get())
+ {
+ m_rDMapper.PushListProperties( m_pCurrentDefinition->GetCurrentLevel( ) );
+ m_rDMapper.sprm( rSprm );
+ m_rDMapper.PopListProperties();
+ }
+ }
+ }
+}
+
+void ListsManager::lcl_entry( int /* pos */,
+ writerfilter::Reference<Properties>::Pointer_t ref )
+{
+ if( m_rDMapper.IsOOXMLImport() )
+ {
+ ref->resolve(*this);
+ }
+ else
+ {
+ if ( m_bIsLFOImport )
+ {
+ // Create ListDef's
+ OSL_ENSURE( !m_pCurrentDefinition.get(), "current entry has to be NULL here");
+ ListDef::Pointer pList( new ListDef() );
+ m_pCurrentDefinition = pList;
+ ref->resolve(*this);
+ //append it to the table
+ m_aLists.push_back( pList );
+ m_pCurrentDefinition = AbstractListDef::Pointer();
+ }
+ else
+ {
+ // Create AbstractListDef's
+ OSL_ENSURE( !m_pCurrentDefinition.get(), "current entry has to be NULL here");
+ m_pCurrentDefinition.reset( new AbstractListDef( ) );
+ ref->resolve(*this);
+ //append it to the table
+ m_aAbstractLists.push_back( m_pCurrentDefinition );
+ m_pCurrentDefinition = AbstractListDef::Pointer();
+ }
+ }
+}
+
+AbstractListDef::Pointer ListsManager::GetAbstractList( sal_Int32 nId )
+{
+ AbstractListDef::Pointer pAbstractList;
+
+ int nLen = m_aAbstractLists.size( );
+ int i = 0;
+ while ( !pAbstractList.get( ) && i < nLen )
+ {
+ if ( m_aAbstractLists[i]->GetId( ) == nId )
+ pAbstractList = m_aAbstractLists[i];
+ i++;
+ }
+
+ return pAbstractList;
+}
+
+ListDef::Pointer ListsManager::GetList( sal_Int32 nId )
+{
+ ListDef::Pointer pList;
+
+ int nLen = m_aLists.size( );
+ int i = 0;
+ while ( !pList.get( ) && i < nLen )
+ {
+ if ( m_aLists[i]->GetId( ) == nId )
+ pList = m_aLists[i];
+ i++;
+ }
+
+ return pList;
+}
+
+void ListsManager::CreateNumberingRules( )
+{
+ // Loop over the definitions
+ std::vector< ListDef::Pointer >::iterator listIt = m_aLists.begin( );
+ for ( ; listIt != m_aLists.end( ); listIt++ )
+ {
+ (*listIt)->CreateNumberingRules( m_rDMapper, m_xFactory );
+ }
+}
+
+} }
diff --git a/writerfilter/source/dmapper/NumberingManager.hxx b/writerfilter/source/dmapper/NumberingManager.hxx
new file mode 100644
index 000000000000..3285bc85f416
--- /dev/null
+++ b/writerfilter/source/dmapper/NumberingManager.hxx
@@ -0,0 +1,252 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_NUMBERINGMANAGER_HXX
+#define INCLUDED_NUMBERINGMANAGER_HXX
+
+#include "PropertyMap.hxx"
+
+#include <WriterFilterDllApi.hxx>
+#include <dmapper/DomainMapper.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+
+#include <com/sun/star/container/XIndexReplace.hpp>
+
+namespace writerfilter {
+namespace dmapper {
+
+class DomainMapper;
+class StyleSheetEntry;
+
+
+/** Class representing the numbering level properties.
+ */
+class ListLevel : public PropertyMap
+{
+ sal_Int32 m_nIStartAt; //LN_ISTARTAT
+ sal_Int32 m_nNFC; //LN_NFC
+ sal_Int32 m_nJC; //LN_JC
+ sal_Int32 m_nFLegal; //LN_FLEGAL
+ sal_Int32 m_nFNoRestart; //LN_FNORESTART
+ sal_Int32 m_nFPrev; //LN_FPREV
+ sal_Int32 m_nFPrevSpace; //LN_FPREVSPACE
+ sal_Int32 m_nFWord6; //LN_FWORD6
+ ::rtl::OUString m_sRGBXchNums; //LN_RGBXCHNUMS
+ sal_Int32 m_nXChFollow; //LN_IXCHFOLLOW
+ ::rtl::OUString m_sBulletChar;
+ sal_Int32 m_nTabstop;
+ boost::shared_ptr< StyleSheetEntry > m_pParaStyle;
+
+public:
+
+ typedef boost::shared_ptr< ListLevel > Pointer;
+
+ ListLevel() :
+ m_nIStartAt(-1)
+ ,m_nNFC(-1)
+ ,m_nJC(-1)
+ ,m_nFLegal(-1)
+ ,m_nFNoRestart(-1)
+ ,m_nFPrev(-1)
+ ,m_nFPrevSpace(-1)
+ ,m_nFWord6(-1)
+ ,m_nXChFollow(-1)
+ ,m_nTabstop( 0 )
+ {}
+
+ ~ListLevel( ){ }
+
+ // Setters for the import
+ void SetValue( Id nId, sal_Int32 nValue );
+ void SetBulletChar( rtl::OUString sValue ) { m_sBulletChar = sValue; };
+ void SetParaStyle( boost::shared_ptr< StyleSheetEntry > pStyle )
+ {
+ m_pParaStyle = pStyle;
+ };
+ void AddRGBXchNums( rtl::OUString sValue ) { m_sRGBXchNums += sValue; };
+
+ // Getters
+ rtl::OUString GetBulletChar( ) { return m_sBulletChar; };
+ boost::shared_ptr< StyleSheetEntry > GetParaStyle( ) { return m_pParaStyle; };
+
+ // UNO mapping functions
+
+ // rPrefix and rSuffix are out parameters
+ static sal_Int16 GetParentNumbering( rtl::OUString sText, sal_Int16 nLevel,
+ rtl::OUString& rPrefix, rtl::OUString& rSuffix );
+
+ com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >
+ GetProperties( );
+
+ com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue>
+ GetCharStyleProperties( );
+private:
+
+ com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >
+ GetLevelProperties( );
+
+ com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >
+ GetParaProperties( );
+};
+
+class AbstractListDef
+{
+private:
+ sal_Int32 m_nTPLC; //LN_TPLC
+ ::rtl::OUString m_sRGISTD; //LN_RGISTD
+ sal_Int32 m_nSimpleList; //LN_FSIMPLELIST
+ sal_Int32 m_nRestart; //LN_FRESTARTHDN
+ sal_Int32 m_nUnsigned; //LN_UNSIGNED26_2
+
+ // The ID member reflects either the abstractNumId or the numId
+ // depending on the use of the class
+ sal_Int32 m_nId;
+
+ // Properties of each level. This can also reflect the overridden
+ // levels of a numbering.
+ ::std::vector< ListLevel::Pointer > m_aLevels;
+
+ // Only used during the numberings import
+ ListLevel::Pointer m_pCurrentLevel;
+
+public:
+ typedef boost::shared_ptr< AbstractListDef > Pointer;
+
+ AbstractListDef( );
+ ~AbstractListDef( );
+
+ // Setters using during the import
+ void SetId( sal_Int32 nId ) { m_nId = nId; };
+ void SetValue( sal_uInt32 nSprmId, sal_Int32 nValue );
+ void AddRGISTD( rtl::OUString sValue ) { m_sRGISTD += sValue; };
+
+ // Accessors
+ sal_Int32 GetId( ) { return m_nId; };
+
+ sal_Int16 Size( ) { return sal_Int16( m_aLevels.size( ) ); };
+ ListLevel::Pointer GetLevel( sal_uInt16 nLvl );
+ void AddLevel( );
+
+ ListLevel::Pointer GetCurrentLevel( ) { return m_pCurrentLevel; };
+
+ virtual com::sun::star::uno::Sequence<
+ com::sun::star::uno::Sequence<
+ com::sun::star::beans::PropertyValue > > GetPropertyValues( );
+};
+
+class ListDef : public AbstractListDef
+{
+private:
+ // Pointer to the abstract numbering
+ AbstractListDef::Pointer m_pAbstractDef;
+
+ // Cache for the UNO numbering rules
+ uno::Reference< container::XIndexReplace > m_xNumRules;
+
+public:
+ typedef boost::shared_ptr< ListDef > Pointer;
+
+ ListDef( );
+ ~ListDef( );
+
+ // Accessors
+ void SetAbstractDefinition( AbstractListDef::Pointer pAbstract ) { m_pAbstractDef = pAbstract; };
+ AbstractListDef::Pointer GetAbstractDefinition( ) { return m_pAbstractDef; };
+
+ // Mapping functions
+ static rtl::OUString GetStyleName( sal_Int32 nId );
+
+ com::sun::star::uno::Sequence<
+ com::sun::star::uno::Sequence<
+ com::sun::star::beans::PropertyValue > > GetPropertyValues( );
+
+ void CreateNumberingRules(
+ DomainMapper& rDMapper,
+ com::sun::star::uno::Reference<
+ com::sun::star::lang::XMultiServiceFactory> xFactory );
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::container::XIndexReplace >
+ GetNumberingRules( ) { return m_xNumRules; };
+
+};
+
+/** This class provides access to the defined numbering styles.
+ */
+class ListsManager :
+ public LoggedProperties,
+ public LoggedTable
+{
+private:
+
+ DomainMapper& m_rDMapper;
+ com::sun::star::uno::Reference<
+ com::sun::star::lang::XMultiServiceFactory > m_xFactory;
+
+ // The numbering entries
+ std::vector< AbstractListDef::Pointer > m_aAbstractLists;
+ std::vector< ListDef::Pointer > m_aLists;
+
+
+ // These members are used for import only
+ AbstractListDef::Pointer m_pCurrentDefinition;
+ bool m_bIsLFOImport;
+
+ AbstractListDef::Pointer GetAbstractList( sal_Int32 nId );
+
+ // Properties
+ virtual void lcl_attribute( Id nName, Value & rVal );
+ virtual void lcl_sprm(Sprm & sprm);
+
+ // Table
+ virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+public:
+
+ ListsManager(
+ DomainMapper& rDMapper,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xFactory);
+ virtual ~ListsManager();
+
+ typedef boost::shared_ptr< ListsManager > Pointer;
+
+ // Config methods
+ void SetLFOImport( bool bLFOImport ) { m_bIsLFOImport = bLFOImport; };
+
+ // Numberings accessors
+ AbstractListDef::Pointer GetCurrentDef( ) { return m_pCurrentDefinition; };
+
+ sal_uInt32 Size() const
+ { return sal_uInt32( m_aLists.size( ) ); };
+ ListDef::Pointer GetList( sal_Int32 nId );
+
+ // Mapping methods
+ void CreateNumberingRules( );
+};
+
+} }
+
+#endif
+
diff --git a/writerfilter/source/dmapper/OLEHandler.cxx b/writerfilter/source/dmapper/OLEHandler.cxx
new file mode 100644
index 000000000000..89ee01ecb9a0
--- /dev/null
+++ b/writerfilter/source/dmapper/OLEHandler.cxx
@@ -0,0 +1,249 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <OLEHandler.hxx>
+#include <PropertyMap.hxx>
+#include "GraphicHelpers.hxx"
+
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/container/XNameAccess.hpp>
+#include <com/sun/star/document/XEmbeddedObjectResolver.hpp>
+#include <com/sun/star/document/XStorageBasedDocument.hpp>
+#include <com/sun/star/drawing/XShape.hpp>
+#include <com/sun/star/embed/XEmbeddedObject.hpp>
+#include <com/sun/star/embed/XEmbedObjectCreator.hpp>
+#include <com/sun/star/graphic/XGraphic.hpp>
+#include <com/sun/star/io/XStream.hpp>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+/*-- 23.04.2008 10:46:14---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OLEHandler::OLEHandler() :
+LoggedProperties(dmapper_logger, "OLEHandler"),
+m_nDxaOrig(0),
+m_nDyaOrig(0),
+m_nWrapMode(0)
+{
+}
+/*-- 23.04.2008 10:46:14---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OLEHandler::~OLEHandler()
+{
+}
+/*-- 23.04.2008 10:46:14---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void OLEHandler::lcl_attribute(Id rName, Value & rVal)
+{
+ rtl::OUString sStringValue = rVal.getString();
+ (void)rName;
+ /* WRITERFILTERSTATUS: table: OLEHandler_attributedata */
+ switch( rName )
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_OLEObject_Type:
+ m_sObjectType = sStringValue;
+ break;
+ case NS_ooxml::LN_CT_OLEObject_ProgID:
+ m_sProgId = sStringValue;
+ break;
+ case NS_ooxml::LN_CT_OLEObject_ShapeID:
+ m_sShapeId = sStringValue;
+ break;
+ case NS_ooxml::LN_CT_OLEObject_DrawAspect:
+ m_sDrawAspect = sStringValue;
+ break;
+ case NS_ooxml::LN_CT_OLEObject_ObjectID:
+ m_sObjectId = sStringValue;
+ break;
+ case NS_ooxml::LN_CT_OLEObject_r_id:
+ m_sr_id = sStringValue;
+ break;
+ case NS_ooxml::LN_inputstream:
+ rVal.getAny() >>= m_xInputStream;
+ break;
+ case NS_ooxml::LN_CT_Object_dxaOrig:
+ m_nDxaOrig = rVal.getInt();
+ break;
+ case NS_ooxml::LN_CT_Object_dyaOrig:
+ m_nDyaOrig = rVal.getInt();
+ break;
+ case NS_ooxml::LN_shape:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0.5, spent: 0 */
+ {
+ uno::Reference< drawing::XShape > xTempShape;
+ rVal.getAny() >>= xTempShape;
+ if( xTempShape.is() )
+ {
+ m_xShape.set( xTempShape );
+
+ try
+ {
+ m_aShapeSize = xTempShape->getSize();
+ m_aShapePosition = xTempShape->getPosition();
+
+ uno::Reference< beans::XPropertySet > xShapeProps( xTempShape, uno::UNO_QUERY_THROW );
+ PropertyNameSupplier& rNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ xShapeProps->getPropertyValue( rNameSupplier.GetName( PROP_BITMAP ) ) >>= m_xReplacement;
+
+ xShapeProps->setPropertyValue(
+ rNameSupplier.GetName( PROP_SURROUND ),
+ uno::makeAny( m_nWrapMode ) );
+ }
+ catch( const uno::Exception& e )
+ {
+#if DEBUG
+ clog << "Exception in OLE Handler: ";
+ clog << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
+#endif
+ }
+ }
+ }
+ break;
+ default:
+ OSL_ENSURE( false, "unknown attribute");
+ }
+}
+/*-- 23.04.2008 10:46:14---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void OLEHandler::lcl_sprm(Sprm & rSprm)
+{
+ sal_uInt32 nSprmId = rSprm.getId();
+ switch( nSprmId )
+ {
+ case NS_ooxml::LN_OLEObject_OLEObject:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ pProperties->resolve(*this);
+ }
+ }
+ break;
+ case NS_ooxml::LN_wrap_wrap:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if ( pProperties.get( ) )
+ {
+ WrapHandlerPtr pHandler( new WrapHandler );
+ pProperties->resolve( *pHandler );
+
+ m_nWrapMode = pHandler->getWrapMode( );
+
+ try
+ {
+ uno::Reference< beans::XPropertySet > xShapeProps( m_xShape, uno::UNO_QUERY_THROW );
+ PropertyNameSupplier& rNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ xShapeProps->setPropertyValue(
+ rNameSupplier.GetName( PROP_SURROUND ),
+ uno::makeAny( m_nWrapMode ) );
+ }
+ catch( const uno::Exception& e )
+ {
+#if DEBUG
+ clog << "Exception in OLE Handler: ";
+ clog << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
+#endif
+ }
+ }
+ }
+ break;
+ default:
+ {
+ OSL_ENSURE( false, "unknown attribute");
+ }
+ }
+}
+/*-- 23.04.2008 11:15:19---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString OLEHandler::copyOLEOStream( uno::Reference< text::XTextDocument > xTextDocument )
+{
+ ::rtl::OUString sRet;
+ if( !m_xInputStream.is( ) )
+ return sRet;
+ try
+ {
+ uno::Reference < lang::XMultiServiceFactory > xFactory(xTextDocument, uno::UNO_QUERY_THROW);
+ uno::Reference< document::XEmbeddedObjectResolver > xEmbeddedResolver(
+ xFactory->createInstance(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.document.ImportEmbeddedObjectResolver" ))), uno::UNO_QUERY_THROW );
+ //hack to work with the ImportEmbeddedObjectResolver
+ static sal_Int32 nObjectCount = 100;
+ uno::Reference< container::XNameAccess > xNA( xEmbeddedResolver, uno::UNO_QUERY_THROW );
+ ::rtl::OUString aURL(RTL_CONSTASCII_USTRINGPARAM("Obj" ));
+ aURL += ::rtl::OUString::valueOf( nObjectCount++ );
+ uno::Reference < io::XOutputStream > xOLEStream;
+ if( (xNA->getByName( aURL ) >>= xOLEStream) && xOLEStream.is() )
+ {
+ const sal_Int32 nReadRequest = 0x1000;
+ uno::Sequence< sal_Int8 > aData;
+
+ while( true )
+ {
+ sal_Int32 nRead = m_xInputStream->readBytes( aData, nReadRequest );
+ xOLEStream->writeBytes( aData );
+ if( nRead < nReadRequest )
+ {
+ xOLEStream->closeOutput();
+ break;
+ }
+ }
+
+ static const ::rtl::OUString sProtocol = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("vnd.sun.star.EmbeddedObject:" ));
+ ::rtl::OUString aPersistName( xEmbeddedResolver->resolveEmbeddedObjectURL( aURL ) );
+ sRet = aPersistName.copy( sProtocol.getLength() );
+
+ }
+ uno::Reference< lang::XComponent > xComp( xEmbeddedResolver, uno::UNO_QUERY_THROW );
+ xComp->dispose();
+ }
+ catch( const uno::Exception& rEx)
+ {
+ (void)rEx;
+ OSL_ENSURE(false, "exception in OLEHandler::createOLEObject");
+ }
+ return sRet;
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/OLEHandler.hxx b/writerfilter/source/dmapper/OLEHandler.hxx
new file mode 100644
index 000000000000..cddbac5475bc
--- /dev/null
+++ b/writerfilter/source/dmapper/OLEHandler.hxx
@@ -0,0 +1,108 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OLEHANDLER_HXX
+#define INCLUDED_OLEHANDLER_HXX
+
+#ifndef INCLUDED_WRITERFILTERDLLAPI_H
+#include <WriterFilterDllApi.hxx>
+#endif
+#include <resourcemodel/LoggedResources.hxx>
+#include <boost/shared_ptr.hpp>
+#include <com/sun/star/awt/Size.hpp>
+#include <com/sun/star/awt/Point.hpp>
+
+#include <com/sun/star/drawing/XShape.hpp>
+
+namespace com{ namespace sun{ namespace star{
+ namespace embed{
+ class XEmbeddedObject;
+ }
+ namespace graphic{
+ class XGraphic;
+ }
+ namespace io{
+ class XInputStream;
+ }
+ namespace text{
+ class XTextDocument;
+ }
+ namespace uno{
+ class XComponentContext;
+ }
+}}}
+namespace writerfilter {
+namespace dmapper
+{
+//class PropertyMap;
+/** Handler for OLE objects
+ */
+class WRITERFILTER_DLLPRIVATE OLEHandler : public LoggedProperties
+{
+ ::rtl::OUString m_sObjectType;
+ ::rtl::OUString m_sProgId;
+ ::rtl::OUString m_sShapeId;
+ ::rtl::OUString m_sDrawAspect;
+ ::rtl::OUString m_sObjectId;
+ ::rtl::OUString m_sr_id;
+
+ sal_Int32 m_nDxaOrig;
+ sal_Int32 m_nDyaOrig;
+ sal_Int32 m_nWrapMode;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > m_xShape;
+
+ ::com::sun::star::awt::Size m_aShapeSize;
+ ::com::sun::star::awt::Point m_aShapePosition;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic > m_xReplacement;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream > m_xInputStream;
+
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+public:
+ OLEHandler();
+ virtual ~OLEHandler();
+
+ inline ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > getShape( ) { return m_xShape; };
+
+ inline bool isOLEObject( ) { return m_xInputStream.is( ); };
+
+ ::rtl::OUString copyOLEOStream( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextDocument > xTextDocument );
+
+ ::com::sun::star::awt::Size getSize() const { return m_aShapeSize;}
+ ::com::sun::star::awt::Point getPosition() const { return m_aShapePosition;}
+ ::com::sun::star::uno::Reference< ::com::sun::star::graphic::XGraphic >
+ getReplacement() const { return m_xReplacement; }
+
+};
+typedef boost::shared_ptr< OLEHandler > OLEHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/PageBordersHandler.cxx b/writerfilter/source/dmapper/PageBordersHandler.cxx
new file mode 100644
index 000000000000..21798d684b5d
--- /dev/null
+++ b/writerfilter/source/dmapper/PageBordersHandler.cxx
@@ -0,0 +1,124 @@
+#include "PageBordersHandler.hxx"
+
+#include <ooxml/resourceids.hxx>
+
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+namespace dmapper {
+
+_PgBorder::_PgBorder( ) :
+ m_nDistance( 0 ),
+ m_ePos( BORDER_RIGHT )
+{
+}
+
+_PgBorder::~_PgBorder( )
+{
+}
+
+PageBordersHandler::PageBordersHandler( ) :
+LoggedProperties(dmapper_logger, "PageBordersHandler"),
+m_nDisplay( 0 ),
+m_nOffset( 0 )
+{
+}
+
+PageBordersHandler::~PageBordersHandler( )
+{
+}
+
+void PageBordersHandler::lcl_attribute( Id eName, Value& rVal )
+{
+ int nIntValue = rVal.getInt( );
+ switch ( eName )
+ {
+ case NS_ooxml::LN_CT_PageBorders_display:
+ {
+ switch ( nIntValue )
+ {
+ default:
+ case NS_ooxml::LN_Value_wordprocessingml_ST_PageBorderDisplay_allPages:
+ m_nDisplay = 0;
+ break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_PageBorderDisplay_firstPage:
+ m_nDisplay = 1;
+ break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_PageBorderDisplay_notFirstPage:
+ m_nDisplay = 2;
+ break;
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_PageBorders_offsetFrom:
+ {
+ switch ( nIntValue )
+ {
+ default:
+ case NS_ooxml::LN_Value_wordprocessingml_ST_PageBorderOffset_page:
+ m_nOffset = 1;
+ break;
+ case NS_ooxml::LN_Value_wordprocessingml_ST_PageBorderOffset_text:
+ m_nOffset = 0;
+ break;
+ }
+ }
+ break;
+ default:;
+ }
+}
+
+void PageBordersHandler::lcl_sprm( Sprm& rSprm )
+{
+ switch ( rSprm.getId( ) )
+ {
+ case NS_ooxml::LN_CT_PageBorders_top:
+ case NS_ooxml::LN_CT_PageBorders_left:
+ case NS_ooxml::LN_CT_PageBorders_bottom:
+ case NS_ooxml::LN_CT_PageBorders_right:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ BorderHandlerPtr pBorderHandler( new BorderHandler( true ) );
+ pProperties->resolve(*pBorderHandler);
+ BorderPosition ePos = BorderPosition( 0 );
+ switch( rSprm.getId( ) )
+ {
+ case NS_ooxml::LN_CT_PageBorders_top:
+ ePos = BORDER_TOP;
+ break;
+ case NS_ooxml::LN_CT_PageBorders_left:
+ ePos = BORDER_LEFT;
+ break;
+ case NS_ooxml::LN_CT_PageBorders_bottom:
+ ePos = BORDER_BOTTOM;
+ break;
+ case NS_ooxml::LN_CT_PageBorders_right:
+ ePos = BORDER_RIGHT;
+ break;
+ default:;
+ }
+
+ _PgBorder aPgBorder;
+ aPgBorder.m_rLine = pBorderHandler->getBorderLine( );
+ aPgBorder.m_nDistance = pBorderHandler->getLineDistance( );
+ aPgBorder.m_ePos = ePos;
+ m_aBorders.push_back( aPgBorder );
+ }
+ }
+ break;
+ default:;
+ }
+}
+
+void PageBordersHandler::SetBorders( SectionPropertyMap* pSectContext )
+{
+ for ( int i = 0, length = m_aBorders.size( ); i < length; i++ )
+ {
+ _PgBorder aBorder = m_aBorders[i];
+ pSectContext->SetBorder( aBorder.m_ePos, aBorder.m_nDistance, aBorder.m_rLine );
+ }
+}
+
+} }
diff --git a/writerfilter/source/dmapper/PageBordersHandler.hxx b/writerfilter/source/dmapper/PageBordersHandler.hxx
new file mode 100644
index 000000000000..621f239b3038
--- /dev/null
+++ b/writerfilter/source/dmapper/PageBordersHandler.hxx
@@ -0,0 +1,57 @@
+#ifndef INCLUDED_PAGEBORDERSHANDLER_HXX
+#define INCLUDED_PAGEBORDERSHANDLER_HXX
+
+#include "BorderHandler.hxx"
+#include "PropertyMap.hxx"
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+#include <boost/shared_ptr.hpp>
+
+#include <com/sun/star/table/BorderLine.hpp>
+
+#include <vector>
+
+
+namespace writerfilter {
+namespace dmapper {
+
+class _PgBorder
+{
+public:
+ com::sun::star::table::BorderLine m_rLine;
+ sal_Int32 m_nDistance;
+ BorderPosition m_ePos;
+
+ _PgBorder( );
+ ~_PgBorder( );
+};
+
+class WRITERFILTER_DLLPRIVATE PageBordersHandler : public LoggedProperties
+{
+private:
+
+ // See implementation of SectionPropertyMap::ApplyBorderToPageStyles
+ sal_Int32 m_nDisplay;
+ sal_Int32 m_nOffset;
+ vector<_PgBorder> m_aBorders;
+
+ // Properties
+ virtual void lcl_attribute( Id eName, Value& rVal );
+ virtual void lcl_sprm( Sprm& rSprm );
+
+public:
+ PageBordersHandler( );
+ ~PageBordersHandler( );
+
+ inline sal_Int32 GetDisplayOffset( )
+ {
+ return ( m_nOffset << 5 ) + m_nDisplay;
+ };
+ void SetBorders( SectionPropertyMap* pSectContext );
+};
+typedef boost::shared_ptr< PageBordersHandler > PageBordersHandlerPtr;
+
+} }
+
+#endif
diff --git a/writerfilter/source/dmapper/PropertyIds.cxx b/writerfilter/source/dmapper/PropertyIds.cxx
new file mode 100644
index 000000000000..abb2ca46a9c9
--- /dev/null
+++ b/writerfilter/source/dmapper/PropertyIds.cxx
@@ -0,0 +1,349 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <PropertyIds.hxx>
+#include <rtl/ustring.hxx>
+#include <map>
+
+namespace writerfilter {
+namespace dmapper{
+
+typedef ::std::map< PropertyIds, ::rtl::OUString> PropertyNameMap_t;
+
+struct PropertyNameSupplier_Impl
+{
+ PropertyNameMap_t aNameMap;
+};
+
+/*-- 14.06.2006 11:01:31---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyNameSupplier::PropertyNameSupplier() :
+ m_pImpl(new PropertyNameSupplier_Impl)
+{
+}
+/*-- 14.06.2006 11:01:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyNameSupplier::~PropertyNameSupplier()
+{
+ delete m_pImpl;
+}
+/*-- 14.06.2006 11:01:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const rtl::OUString& PropertyNameSupplier::GetName( PropertyIds eId ) const
+{
+ PropertyNameMap_t::iterator aIt = m_pImpl->aNameMap.find(eId);
+ if(aIt == m_pImpl->aNameMap.end())
+ {
+ ::rtl::OUString sName;
+ switch(eId)
+ {
+ case PROP_CHAR_WEIGHT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharWeight")); break;
+ case PROP_CHAR_POSTURE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharPosture")); break;
+ case PROP_CHAR_STRIKEOUT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharStrikeout")); break;
+ case PROP_CHAR_CONTOURED: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharContoured")); break;
+ case PROP_CHAR_SHADOWED: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharShadowed")); break;
+ case PROP_CHAR_CASE_MAP: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharCaseMap")); break;
+ case PROP_CHAR_COLOR: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharColor")); break;
+ case PROP_CHAR_RELIEF: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharRelief")); break;
+ case PROP_CHAR_UNDERLINE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharUnderline")); break;
+ case PROP_CHAR_UNDERLINE_COLOR: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharUnderlineColor")); break;
+ case PROP_CHAR_UNDERLINE_HAS_COLOR: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharUnderlineHasColor")); break;
+ case PROP_CHAR_WORD_MODE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharWordMode")); break;
+ case PROP_CHAR_ESCAPEMENT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharEscapement")); break;
+ case PROP_CHAR_ESCAPEMENT_HEIGHT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharEscapementHeight")); break;
+ case PROP_CHAR_HEIGHT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharHeight")); break;
+ case PROP_CHAR_HEIGHT_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharHeightComplex")); break;
+ case PROP_CHAR_LOCALE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharLocale")); break;
+ case PROP_CHAR_LOCALE_ASIAN: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharLocaleAsian")); break;
+ case PROP_CHAR_LOCALE_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharLocaleComplex")); break;
+ case PROP_CHAR_WEIGHT_COMPLEX : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharWeightComplex")); break;
+ case PROP_CHAR_POSTURE_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharPostureComplex")); break;
+ case PROP_CHAR_CHAR_KERNING: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharKerning")); break;
+ case PROP_CHAR_AUTO_KERNING: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharAutoKerning")); break;
+ case PROP_CHAR_SCALE_WIDTH: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharScaleWidth")); break;
+ case PROP_CHAR_STYLE_NAME: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharStyleName")); break;
+ case PROP_CHAR_FONT_NAME: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontName")); break;
+ case PROP_CHAR_FONT_STYLE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontStyle")); break;
+ case PROP_CHAR_FONT_FAMILY: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontFamily")); break;
+ case PROP_CHAR_FONT_CHAR_SET: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontCharSet")); break;
+ case PROP_CHAR_FONT_PITCH: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontPitch")); break;
+ case PROP_CHAR_FONT_NAME_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontNameAsian")); break;
+ case PROP_CHAR_HEIGHT_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharHeightAsian")); break;
+ case PROP_CHAR_FONT_STYLE_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontStyleAsian")); break;
+ case PROP_CHAR_FONT_FAMILY_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontFamilyAsian")); break;
+ case PROP_CHAR_FONT_CHAR_SET_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontCharSetAsian")); break;
+ case PROP_CHAR_FONT_PITCH_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontPitchAsian")); break;
+ case PROP_CHAR_FONT_NAME_COMPLEX : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontNameComplex")); break;
+ case PROP_CHAR_FONT_STYLE_COMPLEX : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontStyleComplex")); break;
+ case PROP_CHAR_FONT_FAMILY_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontFamilyComplex")); break;
+ case PROP_CHAR_FONT_CHAR_SET_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontCharSetComplex")); break;
+ case PROP_CHAR_FONT_PITCH_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFontPitchComplex")); break;
+ case PROP_CHAR_HIDDEN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharHidden")); break;
+ case PROP_CHAR_WEIGHT_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharWeightAsian")); break;
+ case PROP_CHAR_POSTURE_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharPostureAsian")); break;
+ case PROP_CHAR_BACK_COLOR: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharBackColor")); break;
+ case PROP_CHAR_EMPHASIS: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharEmphasis")); break;
+ case PROP_CHAR_COMBINE_IS_ON: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharCombineIsOn")); break;
+ case PROP_CHAR_COMBINE_PREFIX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharCombinePrefix")); break;
+ case PROP_CHAR_COMBINE_SUFFIX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharCombineSuffix")); break;
+ case PROP_CHAR_ROTATION: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharRotation")); break;
+ case PROP_CHAR_ROTATION_IS_FIT_TO_LINE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharRotationIsFitToLine")); break;
+ case PROP_CHAR_FLASH: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharFlash")); break;
+// case PROP_CHAR_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Char")); break;
+// case PROP_CHAR_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Char")); break;
+// case PROP_CHAR_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Char")); break;
+
+ case PROP_PARA_STYLE_NAME: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaStyleName")); break;
+ case PROP_PARA_ADJUST: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaAdjust")); break;
+ case PROP_PARA_LAST_LINE_ADJUST: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaLastLineAdjust")); break;
+ case PROP_PARA_RIGHT_MARGIN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaRightMargin")); break;
+ case PROP_PARA_LEFT_MARGIN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaLeftMargin")); break;
+ case PROP_PARA_FIRST_LINE_INDENT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaFirstLineIndent")); break;
+ case PROP_PARA_KEEP_TOGETHER: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaKeepTogether")); break;
+ case PROP_PARA_TOP_MARGIN: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaTopMargin")); break;
+ case PROP_PARA_BOTTOM_MARGIN: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaBottomMargin")); break;
+ case PROP_PARA_IS_HYPHENATION: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaIsHyphenation")); break;
+ case PROP_PARA_LINE_NUMBER_COUNT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaLineNumberCount")); break;
+ case PROP_PARA_IS_HANGING_PUNCTUATION: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaIsHangingPunctuation")); break;
+ case PROP_PARA_LINE_SPACING: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaLineSpacing")); break;
+ case PROP_PARA_TAB_STOPS: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaTabStops")); break;
+ case PROP_PARA_WIDOWS: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaWidows")); break;
+ case PROP_PARA_ORPHANS: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaOrphans")); break;
+ case PROP_PARA_LINE_NUMBER_START_VALUE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaLineNumberStartValue")); break;
+// case PROP_PARA_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Para")); break;
+// case PROP_PARA_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Para")); break;
+// case PROP_PARA_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Para")); break;
+// case PROP_PARA_: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Para")); break;
+ case PROP_NUMBERING_LEVEL: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberingLevel")); break;
+ case PROP_NUMBERING_RULES: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberingRules")); break;
+ case PROP_NUMBERING_TYPE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberingType")); break;
+ case PROP_START_WITH: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("StartWith")); break;
+ case PROP_ADJUST: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Adjust")); break;
+ case PROP_PARENT_NUMBERING: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParentNumbering")); break;
+ case PROP_RIGHT_MARGIN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RightMargin")); break;
+ case PROP_LEFT_MARGIN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LeftMargin")); break;
+ case PROP_TOP_MARGIN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TopMargin")); break;
+ case PROP_BOTTOM_MARGIN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BottomMargin")); break;
+ case PROP_FIRST_LINE_OFFSET: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FirstLineOffset")); break;
+ case PROP_LEFT_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LeftBorder"));break;
+ case PROP_RIGHT_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RightBorder"));break;
+ case PROP_TOP_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TopBorder"));break;
+ case PROP_BOTTOM_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BottomBorder"));break;
+ case PROP_TABLE_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TableBorder"));break;
+ case PROP_LEFT_BORDER_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LeftBorderDistance")); break;
+ case PROP_RIGHT_BORDER_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RightBorderDistance")); break;
+ case PROP_TOP_BORDER_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TopBorderDistance"));break;
+ case PROP_BOTTOM_BORDER_DISTANCE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BottomBorderDistance")); break;
+ case PROP_CURRENT_PRESENTATION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CurrentPresentation")); break;
+ case PROP_IS_FIXED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsFixed")); break;
+ case PROP_SUB_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SubType")); break;
+ case PROP_FILE_FORMAT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FileFormat")); break;
+ case PROP_HYPER_LINK_U_R_L : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HyperLinkURL")); break;
+ case PROP_NUMBER_FORMAT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberFormat")); break;
+ case PROP_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Name")); break;
+ case PROP_IS_INPUT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsInput")); break;
+ case PROP_HINT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Hint")); break;
+ case PROP_FULL_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FullName")); break;
+ case PROP_KEYWORDS : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Keywords")); break;
+ case PROP_DESCRIPTION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Description")); break;
+ case PROP_MACRO_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MacroName")); break;
+ case PROP_SUBJECT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Subject")); break;
+ case PROP_USER_DATA_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("UserDataType")); break;
+ case PROP_TITLE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Title")); break;
+ case PROP_CONTENT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Content")); break;
+ case PROP_DATA_COLUMN_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DataColumnName")); break;
+ case PROP_INPUT_STREAM : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("InputStream")); break;
+ case PROP_GRAPHIC : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Graphic")); break;
+ case PROP_ANCHOR_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AnchorType")); break;
+ case PROP_SIZE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Size")); break;
+ case PROP_HORI_ORIENT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HoriOrient")); break;
+ case PROP_HORI_ORIENT_POSITION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HoriOrientPosition")); break;
+ case PROP_HORI_ORIENT_RELATION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HoriOrientRelation")); break;
+ case PROP_VERT_ORIENT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VertOrient")); break;
+ case PROP_VERT_ORIENT_POSITION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VertOrientPosition")); break;
+ case PROP_VERT_ORIENT_RELATION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VertOrientRelation")); break;
+ case PROP_GRAPHIC_CROP : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GraphicCrop")); break;
+ case PROP_SIZE100th_M_M : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Size100thMM")); break;
+ case PROP_SIZE_PIXEL : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SizePixel")); break;
+ case PROP_SURROUND : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Surround")); break;
+ case PROP_SURROUND_CONTOUR : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SurroundContour")); break;
+ case PROP_ADJUST_CONTRAST : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AdjustContrast")); break;
+ case PROP_ADJUST_LUMINANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AdjustLuminance")); break;
+ case PROP_GRAPHIC_COLOR_MODE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GraphicColorMode")); break;
+ case PROP_GAMMA : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Gamma")); break;
+ case PROP_HORI_MIRRORED_ON_EVEN_PAGES: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HoriMirroredOnEvenPages")); break;
+ case PROP_HORI_MIRRORED_ON_ODD_PAGES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HoriMirroredOnOddPages")); break;
+ case PROP_VERT_MIRRORED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VertMirrored")); break;
+ case PROP_CONTOUR_OUTSIDE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ContourOutside")); break;
+ case PROP_CONTOUR_POLY_POLYGON : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ContourPolyPolygon")); break;
+ case PROP_PAGE_TOGGLE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PageToggle")); break;
+ case PROP_BACK_COLOR : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BackColor")); break;
+ case PROP_ALTERNATIVE_TEXT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AlternativeText")); break;
+ case PROP_HEADER_TEXT_LEFT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderTextLeft")); break;
+ case PROP_HEADER_TEXT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderText")); break;
+ case PROP_HEADER_IS_SHARED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderIsShared")); break;
+ case PROP_HEADER_IS_ON : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderIsOn")); break;
+ case PROP_FOOTER_TEXT_LEFT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterTextLeft")); break;
+ case PROP_FOOTER_TEXT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterText")); break;
+ case PROP_FOOTER_IS_SHARED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterIsShared")); break;
+ case PROP_FOOTER_IS_ON : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterIsOn")); break;
+ case PROP_WIDTH : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Width")); break;
+ case PROP_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Height")); break;
+ case PROP_SEPARATOR_LINE_IS_ON : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SeparatorLineIsOn")); break;
+ case PROP_TEXT_COLUMNS : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TextColumns")); break;
+ case PROP_AUTOMATIC_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AutomaticDistance")); break;
+ case PROP_IS_LANDSCAPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsLandscape")); break;
+ case PROP_PRINTER_PAPER_TRAY_INDEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PrinterPaperTrayIndex")); break;
+ case PROP_FIRST_PAGE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("First Page")); break;
+ case PROP_DEFAULT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Default")); break;
+ case PROP_PAGE_DESC_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PageDescName")); break;
+ case PROP_PAGE_NUMBER_OFFSET: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PageNumberOffset")); break;
+ case PROP_BREAK_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BreakType")); break;
+ case PROP_FOOTER_IS_DYNAMIC_HEIGHT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterIsDynamicHeight")); break;
+ case PROP_FOOTER_DYNAMIC_SPACING: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterDynamicSpacing")); break;
+ case PROP_FOOTER_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterHeight")); break;
+ case PROP_FOOTER_BODY_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FooterBodyDistance")); break;
+ case PROP_HEADER_IS_DYNAMIC_HEIGHT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderIsDynamicHeight")); break;
+ case PROP_HEADER_DYNAMIC_SPACING: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderDynamicSpacing")); break;
+ case PROP_HEADER_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderHeight")); break;
+ case PROP_HEADER_BODY_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderBodyDistance")); break;
+ case PROP_WRITING_MODE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("WritingMode")); break;
+ case PROP_GRID_MODE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GridMode")); break;
+ case PROP_GRID_DISPLAY : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GridDisplay")); break;
+ case PROP_GRID_PRINT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GridPrint")); break;
+ case PROP_ADD_EXTERNAL_LEADING : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AddExternalLeading")); break;
+ case PROP_GRID_LINES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GridLines")); break;
+ case PROP_GRID_BASE_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GridBaseHeight")); break;
+ case PROP_GRID_RUBY_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GridRubyHeight")); break;
+ case PROP_IS_ON : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsOn")); break;
+ case PROP_RESTART_AT_EACH_PAGE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RestartAtEachPage")); break;
+ case PROP_COUNT_EMPTY_LINES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CountEmptyLines")); break;
+ case PROP_COUNT_LINES_IN_FRAMES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CountLinesInFrames")); break;
+ case PROP_INTERVAL : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Interval")); break;
+ case PROP_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Distance")); break;
+ case PROP_NUMBER_POSITION : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberPosition")); break;
+ case PROP_LEVEL : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Level")); break;
+ case PROP_LEVEL_PARAGRAPH_STYLES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LevelParagraphStyles")); break;
+ case PROP_LEVEL_FORMAT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("LevelFormat")); break;
+ case PROP_TOKEN_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TokenType")); break;
+ case PROP_TOKEN_HYPERLINK_START : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TokenHyperlinkStart")); break;
+ case PROP_TOKEN_HYPERLINK_END : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TokenHyperlinkEnd")); break;
+ case PROP_TOKEN_CHAPTER_INFO : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TokenChapterInfo")); break;
+ case PROP_CHAPTER_FORMAT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ChapterFormat")); break;
+ case PROP_TOKEN_TEXT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TokenText")); break;
+ case PROP_TEXT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Text")); break;
+ case PROP_CREATE_FROM_OUTLINE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CreateFromOutline")); break;
+ case PROP_CREATE_FROM_MARKS : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CreateFromMarks")); break;
+ case PROP_STANDARD : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Standard")); break;
+ case PROP_IS_SPLIT_ALLOWED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsSplitAllowed")); break;
+ case META_PROP_VERTICAL_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VerticalBorder")); break;
+ case META_PROP_HORIZONTAL_BORDER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HorizontalBorder")); break;
+ case PROP_HEADER_ROW_COUNT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HeaderRowCount")); break;
+ case PROP_IS_AUTO_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsAutoHeight")); break;
+ case PROP_SIZE_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SizeType")); break;
+ case PROP_TABLE_COLUMN_SEPARATORS: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TableColumnSeparators")); break;
+ case META_PROP_TABLE_STYLE_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TableStyleName")); break;
+ case PROP_REDLINE_AUTHOR : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RedlineAuthor")); break;
+ case PROP_REDLINE_DATE_TIME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RedlineDateTime")); break;
+ case PROP_REDLINE_COMMENT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RedlineComment")); break;
+ case PROP_REDLINE_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RedlineType")); break;
+ case PROP_REDLINE_SUCCESSOR_DATA: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RedlineSuccessorData")); break;
+ case PROP_REDLINE_IDENTIFIER : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RedlineIdentifier")); break;
+ case PROP_SIZE_PROTECTED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SizeProtected")); break;
+ case PROP_POSITION_PROTECTED : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PositionProtected")); break;
+ case PROP_OPAQUE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Opaque")); break;
+ case PROP_VERTICAL_MERGE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("VerticalMerge")); break;
+ case PROP_BULLET_CHAR : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BulletChar")); break;
+ case PROP_BULLET_FONT_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BulletFontName")); break;
+ case PROP_PARA_BACK_COLOR : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParaBackColor")); break;
+ case PROP_TABS_RELATIVE_TO_INDENT: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TabsRelativeToIndent")); break;
+ case PROP_PREFIX : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Prefix")); break;
+ case PROP_SUFFIX : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Suffix")); break;
+ case PROP_CREATE_FROM_LEVEL_PARAGRAPH_STYLES: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CreateFromLevelParagraphStyles")); break;
+ case PROP_DROP_CAP_FORMAT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DropCapFormat")); break;
+ case PROP_REFERENCE_FIELD_PART : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ReferenceFieldPart")); break;
+ case PROP_SOURCE_NAME: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SourceName")); break;
+ case PROP_REFERENCE_FIELD_SOURCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ReferenceFieldSource")); break;
+ case PROP_WIDTH_TYPE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("WidthType")); break;
+ case PROP_TEXT_RANGE: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TextRange")); break;
+ case PROP_SERVICE_CHAR_STYLE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.CharacterStyle")); break;
+ case PROP_SERVICE_PARA_STYLE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.ParagraphStyle")); break;
+ case PROP_CHARACTER_STYLES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharacterStyles")); break;
+ case PROP_PARAGRAPH_STYLES : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ParagraphStyles")); break;
+ case PROP_TABLE_BORDER_DISTANCES: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TableBorderDistances")); break;
+ case META_PROP_CELL_MAR_TOP : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MetaPropCellMarTop")); break;
+ case META_PROP_CELL_MAR_BOTTOM : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MetaPropCellMarBottom")); break;
+ case META_PROP_CELL_MAR_LEFT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MetaPropCellMarLeft")); break;
+ case META_PROP_CELL_MAR_RIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("MetaPropCellMarRight")); break;
+ case PROP_START_AT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("StartAt")); break;
+ case PROP_ADD_PARA_TABLE_SPACING : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("AddParaTableSpacing")); break;
+ case PROP_CHAR_PROP_HEIGHT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharPropHeight")); break;
+ case PROP_CHAR_PROP_HEIGHT_ASIAN : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharPropHeightAsian")); break;
+ case PROP_CHAR_PROP_HEIGHT_COMPLEX: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharPropHeightComplex")); break;
+ case PROP_FORMAT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Format")); break;
+ case PROP_INSERT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Insert")); break;
+ case PROP_DELETE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Delete")); break;
+ case PROP_STREAM_NAME: sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("StreamName")); break;
+ case PROP_BITMAP : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Bitmap")); break;
+ case PROP_IS_DATE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IsDate")); break;
+ case PROP_TAB_STOP_DISTANCE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TabStopDistance")); break;
+ case PROP_CNF_STYLE : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CnfStyle")); break;
+ case PROP_INDENT_AT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("IndentAt")); break;
+ case PROP_FIRST_LINE_INDENT : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FirstLineIndent")); break;
+ case PROP_NUMBERING_STYLE_NAME : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NumberingStyleName")); break;
+ case PROP_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;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+// case : sName = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("")); break;
+ }
+ ::std::pair<PropertyNameMap_t::iterator,bool> aInsertIt =
+ m_pImpl->aNameMap.insert( PropertyNameMap_t::value_type( eId, sName ));
+ if(aInsertIt.second)
+ aIt = aInsertIt.first;
+ }
+ return aIt->second;
+}
+PropertyNameSupplier& PropertyNameSupplier::GetPropertyNameSupplier()
+{
+ static PropertyNameSupplier aNameSupplier;
+ return aNameSupplier;
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/PropertyIds.hxx b/writerfilter/source/dmapper/PropertyIds.hxx
new file mode 100644
index 000000000000..33107e7356d3
--- /dev/null
+++ b/writerfilter/source/dmapper/PropertyIds.hxx
@@ -0,0 +1,303 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_DMAPPER_PROPERTYIDS_HXX
+#define INCLUDED_DMAPPER_PROPERTYIDS_HXX
+
+namespace rtl{ class OUString;}
+
+namespace writerfilter {
+namespace dmapper{
+enum PropertyIds
+ {
+ PROP_ID_START = 1
+ ,META_PROP_CELL_MAR_BOTTOM = PROP_ID_START
+ ,META_PROP_CELL_MAR_LEFT
+ ,META_PROP_CELL_MAR_RIGHT
+ ,META_PROP_CELL_MAR_TOP
+ ,META_PROP_HORIZONTAL_BORDER
+ ,META_PROP_TABLE_STYLE_NAME
+ ,META_PROP_VERTICAL_BORDER
+ ,PROP_ADD_EXTERNAL_LEADING
+ ,PROP_ADD_PARA_TABLE_SPACING
+ ,PROP_ADJUST
+ ,PROP_ADJUST_CONTRAST
+ ,PROP_ADJUST_LUMINANCE
+ ,PROP_ALTERNATIVE_TEXT
+ ,PROP_ANCHOR_TYPE
+ ,PROP_AUTOMATIC_DISTANCE
+ ,PROP_BACK_COLOR
+ ,PROP_BITMAP
+ ,PROP_BOTTOM_BORDER
+ ,PROP_BOTTOM_BORDER_DISTANCE
+ ,PROP_BOTTOM_MARGIN
+ ,PROP_BREAK_TYPE
+ ,PROP_BULLET_CHAR
+ ,PROP_BULLET_FONT_NAME
+ ,PROP_CHAPTER_FORMAT
+ ,PROP_CHARACTER_STYLES
+ ,PROP_CHAR_AUTO_KERNING
+ ,PROP_CHAR_BACK_COLOR
+ ,PROP_CHAR_CASE_MAP
+ ,PROP_CHAR_CHAR_KERNING
+ ,PROP_CHAR_COLOR
+ ,PROP_CHAR_COMBINE_IS_ON
+ ,PROP_CHAR_COMBINE_PREFIX
+ ,PROP_CHAR_COMBINE_SUFFIX
+ ,PROP_CHAR_CONTOURED
+ ,PROP_CHAR_EMPHASIS
+ ,PROP_CHAR_ESCAPEMENT
+ ,PROP_CHAR_ESCAPEMENT_HEIGHT
+ ,PROP_CHAR_FLASH
+ ,PROP_CHAR_FONT_CHAR_SET
+ ,PROP_CHAR_FONT_CHAR_SET_ASIAN
+ ,PROP_CHAR_FONT_CHAR_SET_COMPLEX
+ ,PROP_CHAR_FONT_FAMILY
+ ,PROP_CHAR_FONT_FAMILY_ASIAN
+ ,PROP_CHAR_FONT_FAMILY_COMPLEX
+ ,PROP_CHAR_FONT_NAME
+ ,PROP_CHAR_FONT_NAME_ASIAN
+ ,PROP_CHAR_FONT_NAME_COMPLEX
+ ,PROP_CHAR_FONT_PITCH
+ ,PROP_CHAR_FONT_PITCH_ASIAN
+ ,PROP_CHAR_FONT_PITCH_COMPLEX
+ ,PROP_CHAR_FONT_STYLE
+ ,PROP_CHAR_FONT_STYLE_ASIAN
+ ,PROP_CHAR_FONT_STYLE_COMPLEX
+ ,PROP_CHAR_HEIGHT
+ ,PROP_CHAR_HEIGHT_ASIAN
+ ,PROP_CHAR_HEIGHT_COMPLEX
+ ,PROP_CHAR_HIDDEN
+ ,PROP_CHAR_LOCALE
+ ,PROP_CHAR_LOCALE_ASIAN
+ ,PROP_CHAR_LOCALE_COMPLEX
+ ,PROP_CHAR_POSTURE
+ ,PROP_CHAR_POSTURE_ASIAN
+ ,PROP_CHAR_POSTURE_COMPLEX
+ ,PROP_CHAR_PROP_HEIGHT
+ ,PROP_CHAR_PROP_HEIGHT_ASIAN
+ ,PROP_CHAR_PROP_HEIGHT_COMPLEX
+ ,PROP_CHAR_RELIEF
+ ,PROP_CHAR_ROTATION
+ ,PROP_CHAR_ROTATION_IS_FIT_TO_LINE
+ ,PROP_CHAR_SCALE_WIDTH
+ ,PROP_CHAR_SHADOWED
+ ,PROP_CHAR_STRIKEOUT
+ ,PROP_CHAR_STYLE_NAME
+ ,PROP_CHAR_UNDERLINE
+ ,PROP_CHAR_UNDERLINE_COLOR
+ ,PROP_CHAR_UNDERLINE_HAS_COLOR
+ ,PROP_CHAR_WEIGHT
+ ,PROP_CHAR_WEIGHT_ASIAN
+ ,PROP_CHAR_WEIGHT_COMPLEX
+ ,PROP_CHAR_WORD_MODE
+ ,PROP_CNF_STYLE
+ ,PROP_CONTENT
+ ,PROP_CONTOUR_OUTSIDE
+ ,PROP_CONTOUR_POLY_POLYGON
+ ,PROP_COUNT_EMPTY_LINES
+ ,PROP_COUNT_LINES_IN_FRAMES
+ ,PROP_CREATE_FROM_LEVEL_PARAGRAPH_STYLES
+ ,PROP_CREATE_FROM_MARKS
+ ,PROP_CREATE_FROM_OUTLINE
+ ,PROP_CURRENT_PRESENTATION
+ ,PROP_DATA_COLUMN_NAME
+ ,PROP_DEFAULT
+ ,PROP_DELETE
+ ,PROP_DESCRIPTION
+ ,PROP_DISTANCE
+ ,PROP_DROP_CAP_FORMAT
+ ,PROP_FILE_FORMAT
+ ,PROP_FIRST_LINE_INDENT
+ ,PROP_FIRST_LINE_OFFSET
+ ,PROP_FIRST_PAGE
+ ,PROP_FOOTER_BODY_DISTANCE
+ ,PROP_FOOTER_DYNAMIC_SPACING
+ ,PROP_FOOTER_HEIGHT
+ ,PROP_FOOTER_IS_DYNAMIC_HEIGHT
+ ,PROP_FOOTER_IS_ON
+ ,PROP_FOOTER_IS_SHARED
+ ,PROP_FOOTER_TEXT
+ ,PROP_FOOTER_TEXT_LEFT
+ ,PROP_FORMAT
+ ,PROP_FULL_NAME
+ ,PROP_GAMMA
+ ,PROP_GRAPHIC
+ ,PROP_GRAPHIC_COLOR_MODE
+ ,PROP_GRAPHIC_CROP
+ ,PROP_GRID_BASE_HEIGHT
+ ,PROP_GRID_DISPLAY
+ ,PROP_GRID_LINES
+ ,PROP_GRID_MODE
+ ,PROP_GRID_PRINT
+ ,PROP_GRID_RUBY_HEIGHT
+ ,PROP_HEADER_BODY_DISTANCE
+ ,PROP_HEADER_DYNAMIC_SPACING
+ ,PROP_HEADER_HEIGHT
+ ,PROP_HEADER_IS_DYNAMIC_HEIGHT
+ ,PROP_HEADER_IS_ON
+ ,PROP_HEADER_IS_SHARED
+ ,PROP_HEADER_ROW_COUNT
+ ,PROP_HEADER_TEXT
+ ,PROP_HEADER_TEXT_LEFT
+ ,PROP_HEADING_STYLE_NAME
+ ,PROP_HEIGHT
+ ,PROP_HELP
+ ,PROP_HINT
+ ,PROP_HORI_MIRRORED_ON_EVEN_PAGES
+ ,PROP_HORI_MIRRORED_ON_ODD_PAGES
+ ,PROP_HORI_ORIENT
+ ,PROP_HORI_ORIENT_POSITION
+ ,PROP_HORI_ORIENT_RELATION
+ ,PROP_HYPER_LINK_U_R_L
+ ,PROP_INDENT_AT
+ ,PROP_INPUT_STREAM
+ ,PROP_INSERT
+ ,PROP_INTERVAL
+ ,PROP_IS_AUTO_HEIGHT
+ ,PROP_IS_DATE
+ ,PROP_IS_FIXED
+ ,PROP_IS_INPUT
+ ,PROP_IS_LANDSCAPE
+ ,PROP_IS_ON
+ ,PROP_IS_SPLIT_ALLOWED
+ ,PROP_KEYWORDS
+ ,PROP_LEFT_BORDER
+ ,PROP_LEFT_BORDER_DISTANCE
+ ,PROP_LEFT_MARGIN
+ ,PROP_LEVEL
+ ,PROP_LEVEL_FORMAT
+ ,PROP_LEVEL_PARAGRAPH_STYLES
+ ,PROP_LISTTAB_STOP_POSITION
+ ,PROP_MACRO_NAME
+ ,PROP_NAME
+ ,PROP_NUMBERING_LEVEL
+ ,PROP_NUMBERING_RULES
+ ,PROP_NUMBERING_STYLE_NAME
+ ,PROP_NUMBERING_TYPE
+ ,PROP_NUMBER_FORMAT
+ ,PROP_NUMBER_POSITION
+ ,PROP_OPAQUE
+ ,PROP_OUTLINE_LEVEL
+ ,PROP_PAGE_DESC_NAME
+ ,PROP_PAGE_NUMBER_OFFSET
+ ,PROP_PAGE_TOGGLE
+ ,PROP_PARAGRAPH_STYLES
+ ,PROP_PARA_ADJUST
+ ,PROP_PARA_BACK_COLOR
+ ,PROP_PARA_BOTTOM_MARGIN
+ ,PROP_PARA_FIRST_LINE_INDENT
+ ,PROP_PARA_IS_HANGING_PUNCTUATION
+ ,PROP_PARA_IS_HYPHENATION
+ ,PROP_PARA_KEEP_TOGETHER
+ ,PROP_PARA_LAST_LINE_ADJUST
+ ,PROP_PARA_LEFT_MARGIN
+ ,PROP_PARA_LINE_NUMBER_COUNT
+ ,PROP_PARA_LINE_NUMBER_START_VALUE
+ ,PROP_PARA_LINE_SPACING
+ ,PROP_PARA_ORPHANS
+ ,PROP_PARA_RIGHT_MARGIN
+ ,PROP_PARA_SPLIT
+ ,PROP_PARA_STYLE_NAME
+ ,PROP_PARA_TAB_STOPS
+ ,PROP_PARA_TOP_MARGIN
+ ,PROP_PARA_WIDOWS
+ ,PROP_PARENT_NUMBERING
+ ,PROP_POSITION_AND_SPACE_MODE
+ ,PROP_POSITION_PROTECTED
+ ,PROP_PREFIX
+ ,PROP_PRINTER_PAPER_TRAY_INDEX
+ ,PROP_REDLINE_AUTHOR
+ ,PROP_REDLINE_COMMENT
+ ,PROP_REDLINE_DATE_TIME
+ ,PROP_REDLINE_IDENTIFIER
+ ,PROP_REDLINE_SUCCESSOR_DATA
+ ,PROP_REDLINE_TYPE
+ ,PROP_REFERENCE_FIELD_PART
+ ,PROP_REFERENCE_FIELD_SOURCE
+ ,PROP_RESTART_AT_EACH_PAGE
+ ,PROP_RIGHT_BORDER
+ ,PROP_RIGHT_BORDER_DISTANCE
+ ,PROP_RIGHT_MARGIN
+ ,PROP_SEPARATOR_LINE_IS_ON
+ ,PROP_SERVICE_CHAR_STYLE
+ ,PROP_SERVICE_PARA_STYLE
+ ,PROP_SIZE
+ ,PROP_SIZE100th_M_M
+ ,PROP_SIZE_PIXEL
+ ,PROP_SIZE_PROTECTED
+ ,PROP_SIZE_TYPE
+ ,PROP_SOURCE_NAME
+ ,PROP_STANDARD
+ ,PROP_START_AT
+ ,PROP_START_WITH
+ ,PROP_STREAM_NAME
+ ,PROP_SUBJECT
+ ,PROP_SUB_TYPE
+ ,PROP_SUFFIX
+ ,PROP_SURROUND
+ ,PROP_SURROUND_CONTOUR
+ ,PROP_TABLE_BORDER
+ ,PROP_TABLE_BORDER_DISTANCES
+ ,PROP_TABLE_COLUMN_SEPARATORS
+ ,PROP_TABS_RELATIVE_TO_INDENT
+ ,PROP_TAB_STOP_DISTANCE
+ ,PROP_TEXT
+ ,PROP_TEXT_COLUMNS
+ ,PROP_TEXT_RANGE
+ ,PROP_TITLE
+ ,PROP_TOKEN_CHAPTER_INFO
+ ,PROP_TOKEN_HYPERLINK_END
+ ,PROP_TOKEN_HYPERLINK_START
+ ,PROP_TOKEN_TEXT
+ ,PROP_TOKEN_TYPE
+ ,PROP_TOP_BORDER
+ ,PROP_TOP_BORDER_DISTANCE
+ ,PROP_TOP_MARGIN
+ ,PROP_USER_DATA_TYPE
+ ,PROP_VERTICAL_MERGE
+ ,PROP_VERT_MIRRORED
+ ,PROP_VERT_ORIENT
+ ,PROP_VERT_ORIENT_POSITION
+ ,PROP_VERT_ORIENT_RELATION
+ ,PROP_WIDTH
+ ,PROP_WIDTH_TYPE
+ ,PROP_WRITING_MODE
+ };
+struct PropertyNameSupplier_Impl;
+class PropertyNameSupplier
+{
+ PropertyNameSupplier_Impl* m_pImpl;
+public:
+ PropertyNameSupplier();
+ ~PropertyNameSupplier();
+ const rtl::OUString& GetName( PropertyIds eId ) const;
+
+ static PropertyNameSupplier& GetPropertyNameSupplier();
+};
+} //namespace dmapper
+} // namespace writerfilter
+#endif
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
new file mode 100644
index 000000000000..f8dcb0592cee
--- /dev/null
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -0,0 +1,1269 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <PropertyMap.hxx>
+#include <ooxml/resourceids.hxx>
+#include <DomainMapper_Impl.hxx>
+#include <ConversionHelper.hxx>
+#include <i18npool/paper.hxx>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <com/sun/star/container/XEnumeration.hpp>
+#include <com/sun/star/container/XEnumerationAccess.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/style/BreakType.hpp>
+#include <com/sun/star/text/RelOrientation.hpp>
+#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"
+
+using namespace ::com::sun::star;
+
+namespace writerfilter {
+namespace dmapper{
+
+/*-- 21.06.2006 09:30:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyMap::PropertyMap() :
+ m_cFootnoteSymbol( 0 ),
+ m_nFootnoteFontId( -1 )
+{
+}
+/*-- 21.06.2006 09:30:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyMap::~PropertyMap()
+{
+}
+/*-- 20.06.2006 10:23:55---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Sequence< beans::PropertyValue > PropertyMap::GetPropertyValues()
+{
+ if(!m_aValues.getLength() && size())
+ {
+ m_aValues.realloc( size() );
+ ::com::sun::star::beans::PropertyValue* pValues = m_aValues.getArray();
+ //style names have to be the first elements within the property sequence
+ //otherwise they will overwrite 'hard' attributes
+ sal_Int32 nValue = 0;
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ PropertyMap::iterator aParaStyleIter = find(PropertyDefinition( PROP_PARA_STYLE_NAME, false ) );
+ if( aParaStyleIter != end())
+ {
+ pValues[nValue].Name = rPropNameSupplier.GetName( aParaStyleIter->first.eId );
+ pValues[nValue].Value = aParaStyleIter->second;
+ ++nValue;
+ }
+
+ PropertyMap::iterator aCharStyleIter = find(PropertyDefinition( PROP_CHAR_STYLE_NAME, false ));
+ if( aCharStyleIter != end())
+ {
+ pValues[nValue].Name = rPropNameSupplier.GetName( aCharStyleIter->first.eId );
+ pValues[nValue].Value = aCharStyleIter->second;
+ ++nValue;
+ }
+ PropertyMap::iterator aNumRuleIter = find(PropertyDefinition( PROP_NUMBERING_RULES, false ) );
+ if( aNumRuleIter != end())
+ {
+ pValues[nValue].Name = rPropNameSupplier.GetName( aNumRuleIter->first.eId );
+ pValues[nValue].Value = aNumRuleIter->second;
+ ++nValue;
+ }
+ PropertyMap::iterator aMapIter = begin();
+ for( ; nValue < m_aValues.getLength(); ++aMapIter )
+ {
+ if( aMapIter != aParaStyleIter && aMapIter != aCharStyleIter && aMapIter != aNumRuleIter )
+ {
+ pValues[nValue].Name = rPropNameSupplier.GetName( aMapIter->first.eId );
+ pValues[nValue].Value = aMapIter->second;
+ ++nValue;
+ }
+ }
+ }
+ return m_aValues;
+}
+
+void lcl_AnyToTag(XMLTag::Pointer_t pTag, const uno::Any & rAny)
+{
+ try {
+ sal_Int32 aInt = 0;
+ rAny >>= aInt;
+ pTag->addAttr("value", aInt);
+
+ sal_uInt32 auInt = 0;
+ rAny >>= auInt;
+ pTag->addAttr("unsignedValue", auInt);
+
+ float aFloat = 0.0f;
+ rAny >>= aFloat;
+ pTag->addAttr("floatValue", aFloat);
+
+ ::rtl::OUString aStr;
+ rAny >>= aStr;
+ pTag->addAttr("stringValue", aStr);
+ }
+ catch (...) {
+ }
+}
+
+void PropertyMap::Insert( PropertyIds eId, bool bIsTextProperty, const uno::Any& rAny, bool bOverwrite )
+{
+#ifdef DEBUG_DMAPPER_PROPERTY_MAP
+ const ::rtl::OUString& rInsert = PropertyNameSupplier::
+ GetPropertyNameSupplier().GetName(eId);
+
+ XMLTag::Pointer_t pTag(new XMLTag("propertyMap.insert"));
+ pTag->addAttr("name", rInsert);
+ lcl_AnyToTag(pTag, rAny);
+
+ dmapper_logger->addTag(pTag);
+#endif
+
+ PropertyMap::iterator aElement = find(PropertyDefinition( eId, bIsTextProperty ) );
+ if( aElement != end())
+ {
+ if(!bOverwrite)
+ return;
+ erase( aElement );
+ }
+ _PropertyMap::insert( PropertyMap::value_type
+ (PropertyDefinition( eId, bIsTextProperty),
+ rAny ));
+ Invalidate();
+}
+
+XMLTag::Pointer_t PropertyMap::toTag() const
+{
+ XMLTag::Pointer_t pResult(new XMLTag("PropertyMap"));
+
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ PropertyMap::const_iterator aMapIter = begin();
+ while (aMapIter != end())
+ {
+ XMLTag::Pointer_t pTag(new XMLTag("property"));
+
+ pTag->addAttr("name", rPropNameSupplier.GetName( aMapIter->first.eId ));
+
+ switch (aMapIter->first.eId)
+ {
+ case PROP_TABLE_COLUMN_SEPARATORS:
+ pTag->addTag(lcl_TableColumnSeparatorsToTag(aMapIter->second));
+ break;
+ default:
+ {
+ try {
+ sal_Int32 aInt = 0;
+ aMapIter->second >>= aInt;
+ pTag->addAttr("value", aInt);
+
+ sal_uInt32 auInt = 0;
+ aMapIter->second >>= auInt;
+ pTag->addAttr("unsignedValue", auInt);
+
+ float aFloat = 0.0;
+ aMapIter->second >>= aFloat;
+ pTag->addAttr("floatValue", aFloat);
+
+ ::rtl::OUString aStr;
+ aMapIter->second >>= auInt;
+ pTag->addAttr("stringValue", aStr);
+ }
+ catch (...) {
+ }
+ }
+ break;
+ }
+
+ pResult->addTag(pTag);
+
+ ++aMapIter;
+ }
+
+ return pResult;
+}
+
+/*-- 13.12.2006 10:46:42---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+template<class T>
+ struct removeExistingElements : public ::std::unary_function<T, void>
+{
+ PropertyMap& rMap;
+
+ removeExistingElements(PropertyMap& _rMap ) : rMap(_rMap) {}
+ void operator() (T x)
+ {
+ PropertyMap::iterator aElement = rMap.find(x.first);
+ if( aElement != rMap.end())
+ rMap.erase( aElement );
+ }
+};
+/*-- 13.12.2006 10:46:42---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void PropertyMap::insert( const PropertyMapPtr pMap, bool bOverwrite )
+{
+ if( pMap.get() )
+ {
+ if( bOverwrite )
+ ::std::for_each( pMap->begin(), pMap->end(), removeExistingElements<PropertyMap::value_type>(*this) );
+ _PropertyMap::insert(pMap->begin(), pMap->end());
+ insertTableProperties(pMap.get());
+
+ Invalidate();
+ }
+}
+/*-- 06.06.2007 15:49:09---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const uno::Reference< text::XFootnote>& PropertyMap::GetFootnote() const
+{
+ return m_xFootnote;
+}
+/*-- 18.02.2008 11:23:28---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void PropertyMap::insertTableProperties( const PropertyMap* )
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->element("PropertyMap.insertTableProperties");
+#endif
+}
+/*-- 24.07.2006 08:29:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SectionPropertyMap::SectionPropertyMap(bool bIsFirstSection) :
+ m_bIsFirstSection( bIsFirstSection )
+ ,m_nBorderParams( 0 )
+ ,m_bTitlePage( false )
+ ,m_nColumnCount( 0 )
+ ,m_nColumnDistance( 1249 )
+ ,m_bSeparatorLineIsOn( false )
+ ,m_bEvenlySpaced( false )
+ ,m_bIsLandscape( false )
+ ,m_bPageNoRestart( false )
+ ,m_nPageNumber( -1 )
+ ,m_nBreakType( -1 )
+ ,m_nPaperBin( -1 )
+ ,m_nFirstPaperBin( -1 )
+ ,m_nLeftMargin( 3175 ) //page left margin, default 0x708 (1800) twip -> 3175 1/100 mm
+ ,m_nRightMargin( 3175 )//page right margin, default 0x708 (1800) twip -> 3175 1/100 mm
+ ,m_nTopMargin( 2540 )
+ ,m_nBottomMargin( 2540 )
+ ,m_nHeaderTop( 1270 ) //720 twip
+ ,m_nHeaderBottom( 1270 )//720 twip
+ ,m_nDzaGutter( 0 )
+ ,m_bGutterRTL( false )
+ ,m_bSFBiDi( false )
+ ,m_nGridType(0)
+ ,m_nGridLinePitch( 1 )
+ ,m_nDxtCharSpace( 0 )
+ ,m_nLnnMod( 0 )
+ ,m_nLnc( 0 )
+ ,m_ndxaLnn( 0 )
+ ,m_nLnnMin( 0 )
+{
+ static sal_Int32 nNumber = 0;
+ nSectionNumber = nNumber++;
+ memset(&m_pBorderLines, 0x00, sizeof(m_pBorderLines));
+ for( sal_Int32 nBorder = 0; nBorder < 4; ++nBorder )
+ m_nBorderDistances[ nBorder ] = -1;
+ //todo: set defaults in ApplyPropertiesToPageStyles
+ //initialize defaults
+ PaperInfo aLetter(PAPER_LETTER);
+ //page height, 1/100mm
+ Insert( PROP_HEIGHT, false, uno::makeAny( (sal_Int32) aLetter.getHeight() ) );
+ //page width, 1/100mm
+ Insert( PROP_WIDTH, false, uno::makeAny( (sal_Int32) aLetter.getWidth() ) );
+ //page left margin, default 0x708 (1800) twip -> 3175 1/100 mm
+ Insert( PROP_LEFT_MARGIN, false, uno::makeAny( (sal_Int32) 3175 ) );
+ //page right margin, default 0x708 (1800) twip -> 3175 1/100 mm
+ Insert( PROP_RIGHT_MARGIN, false, uno::makeAny( (sal_Int32) 3175 ) );
+ //page top margin, default 0x5a0 (1440) twip -> 2540 1/100 mm
+ Insert( PROP_TOP_MARGIN, false, uno::makeAny( (sal_Int32)2540 ) );
+ //page bottom margin, default 0x5a0 (1440) twip -> 2540 1/100 mm
+ Insert( PROP_BOTTOM_MARGIN, false, uno::makeAny( (sal_Int32) 2540 ) );
+ uno::Any aFalse( ::uno::makeAny( false ) );
+ Insert( PROP_GRID_DISPLAY, false, aFalse);
+ Insert( PROP_GRID_PRINT, false, aFalse);
+ Insert( PROP_GRID_MODE, false, uno::makeAny(text::TextGridMode::NONE));
+
+
+ if( m_bIsFirstSection )
+ {
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ m_sFirstPageStyleName = rPropNameSupplier.GetName( PROP_FIRST_PAGE );
+ m_sFollowPageStyleName = rPropNameSupplier.GetName( PROP_STANDARD );
+ }
+}
+/*-- 24.07.2006 08:29:02---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SectionPropertyMap::~SectionPropertyMap()
+{
+ for( sal_Int16 ePos = BORDER_LEFT; ePos <= BORDER_BOTTOM; ++ePos)
+ delete m_pBorderLines[ePos];
+}
+/*-- 24.07.2006 08:31:07---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const ::rtl::OUString& SectionPropertyMap::GetPageStyleName( bool bFirst )
+{
+ return bFirst ? m_sFirstPageStyleName : m_sFollowPageStyleName;
+}
+/*-- 24.07.2006 08:31:07---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::SetPageStyleName( bool bFirst, const ::rtl::OUString& rName)
+{
+ if( bFirst )
+ m_sFirstPageStyleName = rName;
+ else
+ m_sFollowPageStyleName = rName;
+}
+/*-- 24.07.2006 09:41:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString lcl_FindUnusedPageStyleName(const uno::Sequence< ::rtl::OUString >& rPageStyleNames)
+{
+ static const sal_Char cDefaultStyle[] = "Converted";
+ //find the hightest number x in each style with the name "cDefaultStyle+x" and
+ //return an incremented name
+ sal_Int32 nMaxIndex = 0;
+ const sal_Int32 nDefaultLength = sizeof(cDefaultStyle)/sizeof(sal_Char) - 1;
+ const ::rtl::OUString sDefaultStyle( cDefaultStyle, nDefaultLength, RTL_TEXTENCODING_ASCII_US );
+
+ const ::rtl::OUString* pStyleNames = rPageStyleNames.getConstArray();
+ for( sal_Int32 nStyle = 0; nStyle < rPageStyleNames.getLength(); ++nStyle)
+ {
+ if( pStyleNames[nStyle].getLength() > nDefaultLength &&
+ !rtl_ustr_compare_WithLength( sDefaultStyle, nDefaultLength, pStyleNames[nStyle], nDefaultLength))
+ {
+ sal_Int32 nIndex = pStyleNames[nStyle].copy( nDefaultLength ).toInt32();
+ if( nIndex > nMaxIndex)
+ nMaxIndex = nIndex;
+ }
+ }
+ ::rtl::OUString sRet( sDefaultStyle );
+ sRet += rtl::OUString::valueOf( nMaxIndex + 1);
+ return sRet;
+}
+
+/*-- 28.07.2006 13:00:43---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< beans::XPropertySet > SectionPropertyMap::GetPageStyle(
+ const uno::Reference< container::XNameContainer >& xPageStyles,
+ const uno::Reference < lang::XMultiServiceFactory >& xTextFactory,
+ bool bFirst )
+{
+ uno::Reference< beans::XPropertySet > xRet;
+ try
+ {
+ if( bFirst )
+ {
+ if( !m_sFirstPageStyleName.getLength() )
+ {
+ uno::Sequence< ::rtl::OUString > aPageStyleNames = xPageStyles->getElementNames();
+ m_sFirstPageStyleName = lcl_FindUnusedPageStyleName(aPageStyleNames);
+ m_aFirstPageStyle = uno::Reference< beans::XPropertySet > (
+ xTextFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.PageStyle") )),
+ uno::UNO_QUERY);
+ xPageStyles->insertByName( m_sFirstPageStyleName, uno::makeAny(m_aFirstPageStyle) );
+ }
+ else if( !m_aFirstPageStyle.is() )
+ {
+ xPageStyles->getByName(m_sFirstPageStyleName) >>= m_aFirstPageStyle;
+ }
+ xRet = m_aFirstPageStyle;
+ }
+ else
+ {
+ if( !m_sFollowPageStyleName.getLength() )
+ {
+ uno::Sequence< ::rtl::OUString > aPageStyleNames = xPageStyles->getElementNames();
+ m_sFollowPageStyleName = lcl_FindUnusedPageStyleName(aPageStyleNames);
+ m_aFollowPageStyle = uno::Reference< beans::XPropertySet > (
+ xTextFactory->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.style.PageStyle") )),
+ uno::UNO_QUERY);
+ xPageStyles->insertByName( m_sFollowPageStyleName, uno::makeAny(m_aFollowPageStyle) );
+ }
+ else if(!m_aFollowPageStyle.is() )
+ {
+ xPageStyles->getByName(m_sFollowPageStyleName) >>= m_aFollowPageStyle;
+ }
+ xRet = m_aFollowPageStyle;
+ }
+
+ }
+ catch( const uno::Exception& )
+ {
+ }
+
+ return xRet;
+}
+/*-- 28.07.2006 10:56:26---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::SetBorder( BorderPosition ePos, sal_Int32 nLineDistance, const table::BorderLine& rBorderLine )
+{
+ delete m_pBorderLines[ePos];
+ m_pBorderLines[ePos] = new table::BorderLine( rBorderLine );
+ m_nBorderDistances[ePos] = nLineDistance;
+}
+/*-- 28.07.2006 10:56:27---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::ApplyBorderToPageStyles(
+ const uno::Reference< container::XNameContainer >& xPageStyles,
+ const uno::Reference < lang::XMultiServiceFactory >& xTextFactory,
+ sal_Int32 nValue )
+{
+ /*
+ page border applies to:
+ nIntValue & 0x07 ->
+ 0 all pages in this section
+ 1 first page in this section
+ 2 all pages in this section but first
+ 3 whole document (all sections)
+ nIntValue & 0x18 -> page border depth 0 - in front 1- in back
+ nIntValue & 0xe0 ->
+ page border offset from:
+ 0 offset from text
+ 1 offset from edge of page
+ */
+ uno::Reference< beans::XPropertySet > xFirst;
+ uno::Reference< beans::XPropertySet > xSecond;
+ sal_Int32 nOffsetFrom = (nValue & 0x00E0) >> 5;
+ //sal_Int32 bPageDepth = (nValue & 0x0018) >> 3; //unused infromation: 0 - in front 1 - in back
+ //todo: negative spacing (from ww8par6.cxx)
+ switch( nValue & 0x07)
+ {
+ case 0: /*all styles*/
+ if ( m_sFollowPageStyleName.getLength( ) > 0 )
+ xFirst = GetPageStyle( xPageStyles, xTextFactory, false );
+ if ( m_sFirstPageStyleName.getLength( ) > 0 )
+ xSecond = GetPageStyle( xPageStyles, xTextFactory, true );
+ break;
+ case 1: /*first page*/
+ if ( m_sFirstPageStyleName.getLength( ) > 0 )
+ xFirst = GetPageStyle( xPageStyles, xTextFactory, true );
+ break;
+ case 2: /*left and right*/
+ if ( m_sFollowPageStyleName.getLength( ) > 0 )
+ xFirst = GetPageStyle( xPageStyles, xTextFactory, false );
+ break;
+ case 3: //whole document?
+ //todo: how to apply a border to the whole document - find all sections or access all page styles?
+ default:
+ return;
+ }
+ //has to be sorted like enum BorderPosition: l-r-t-b
+ static const PropertyIds aBorderIds[4] =
+ {
+ PROP_LEFT_BORDER,
+ PROP_RIGHT_BORDER,
+ PROP_TOP_BORDER,
+ PROP_BOTTOM_BORDER
+ };
+ static const PropertyIds aBorderDistanceIds[4] =
+ {
+ PROP_LEFT_BORDER_DISTANCE,
+ PROP_RIGHT_BORDER_DISTANCE,
+ PROP_TOP_BORDER_DISTANCE,
+ PROP_BOTTOM_BORDER_DISTANCE
+ };
+ static const PropertyIds aMarginIds[4] =
+ {
+ PROP_LEFT_MARGIN,
+ PROP_RIGHT_MARGIN,
+ PROP_TOP_MARGIN,
+ PROP_BOTTOM_MARGIN
+ };
+
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ for( sal_Int32 nBorder = 0; nBorder < 4; ++nBorder)
+ {
+ if( m_pBorderLines[nBorder] )
+ {
+ const ::rtl::OUString sBorderName = rPropNameSupplier.GetName( aBorderIds[nBorder] );
+ xFirst->setPropertyValue( sBorderName, uno::makeAny( *m_pBorderLines[nBorder] ));
+ if(xSecond.is())
+ xSecond->setPropertyValue( sBorderName, uno::makeAny( *m_pBorderLines[nBorder] ));
+ }
+ if( m_nBorderDistances[nBorder] >= 0 )
+ {
+ SetBorderDistance( xFirst, aMarginIds[nBorder], aBorderDistanceIds[nBorder],
+ m_nBorderDistances[nBorder], nOffsetFrom );
+ if(xSecond.is())
+ SetBorderDistance( xSecond, aMarginIds[nBorder], aBorderDistanceIds[nBorder],
+ m_nBorderDistances[nBorder], nOffsetFrom );
+ }
+ }
+}
+
+void SectionPropertyMap::SetBorderDistance( uno::Reference< beans::XPropertySet > xStyle,
+ PropertyIds eMarginId, PropertyIds eDistId, sal_Int32 nDistance, sal_Int32 nOffsetFrom )
+{
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ sal_Int32 nDist = nDistance;
+ if( nOffsetFrom == 1 )
+ {
+ const ::rtl::OUString sMarginName = rPropNameSupplier.GetName( eMarginId );
+ uno::Any aMargin = xStyle->getPropertyValue( sMarginName );
+ sal_Int32 nMargin = 0;
+ aMargin >>= nMargin;
+
+ // Change the margins with the border distance
+ xStyle->setPropertyValue( sMarginName, uno::makeAny( nDistance ) );
+
+ // Set the distance to ( Margin - distance )
+ nDist = nMargin - nDistance;
+ }
+ const ::rtl::OUString sBorderDistanceName = rPropNameSupplier.GetName( eDistId );
+ xStyle->setPropertyValue( sBorderDistanceName, uno::makeAny( nDist ));
+}
+
+/*-- 14.12.2006 12:50:06---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< text::XTextColumns > SectionPropertyMap::ApplyColumnProperties(
+ uno::Reference< beans::XPropertySet > xColumnContainer )
+{
+ uno::Reference< text::XTextColumns > xColumns;
+ try
+ {
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ const ::rtl::OUString sTextColumns = rPropNameSupplier.GetName( PROP_TEXT_COLUMNS );
+ xColumnContainer->getPropertyValue(sTextColumns) >>= xColumns;
+ uno::Reference< beans::XPropertySet > xColumnPropSet( xColumns, uno::UNO_QUERY_THROW );
+ if( !m_bEvenlySpaced &&
+ (sal_Int32(m_aColWidth.size()) == (m_nColumnCount + 1 )) &&
+ (sal_Int32(m_aColDistance.size()) == m_nColumnCount))
+ {
+ //the column width in word is an absolute value, in OOo it's relative
+ //the distances are both absolute
+ sal_Int32 nColSum = 0;
+ for( sal_Int32 nCol = 0; nCol <= m_nColumnCount; ++nCol)
+ {
+ nColSum += m_aColWidth[nCol];
+ if(nCol)
+ nColSum += m_aColDistance[nCol -1];
+ }
+
+ sal_Int32 nRefValue = xColumns->getReferenceValue();
+ double fRel = double( nRefValue ) / double( nColSum );
+ uno::Sequence< text::TextColumn > aColumns( m_nColumnCount + 1 );
+ text::TextColumn* pColumn = aColumns.getArray();
+
+ nColSum = 0;
+ for( sal_Int32 nCol = 0; nCol <= m_nColumnCount; ++nCol)
+ {
+ //nColSum : nRefValue == (nAbsColWidth + colDist /2) : nRelColWidth;
+ pColumn[nCol].LeftMargin = nCol ? m_aColDistance[nCol - 1 ] / 2 : 0;
+ pColumn[nCol].RightMargin = nCol == m_nColumnCount ? 0 : m_aColDistance[nCol] / 2;
+ pColumn[nCol].Width = sal_Int32((double( m_aColWidth[nCol] + pColumn[nCol].RightMargin + pColumn[nCol].LeftMargin ) + 0.5 ) * fRel );
+ nColSum += pColumn[nCol].Width;
+ }
+ if( nColSum != nRefValue )
+ pColumn[m_nColumnCount].Width -= ( nColSum - nRefValue );
+ xColumns->setColumns( aColumns );
+ }
+ else
+ {
+ xColumns->setColumnCount( m_nColumnCount + 1 );
+ xColumnPropSet->setPropertyValue( rPropNameSupplier.GetName( PROP_AUTOMATIC_DISTANCE ), uno::makeAny( m_nColumnDistance ));
+ }
+
+ if(m_bSeparatorLineIsOn)
+ xColumnPropSet->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_SEPARATOR_LINE_IS_ON ),
+ uno::makeAny( m_bSeparatorLineIsOn ));
+ xColumnContainer->setPropertyValue( sTextColumns, uno::makeAny( xColumns ) );
+ }
+ catch( const uno::Exception& )
+ {
+ OSL_ENSURE( false, "Exception in SectionPropertyMap::ApplyColumnProperties");
+ }
+ return xColumns;
+}
+
+/*-- 20.12.2006 09:44:16---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool SectionPropertyMap::HasHeader(bool bFirstPage) const
+{
+ bool bRet = false;
+ if( (bFirstPage && m_aFirstPageStyle.is()) ||( !bFirstPage && m_aFollowPageStyle.is()) )
+ {
+ if( bFirstPage )
+ m_aFirstPageStyle->getPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_HEADER_IS_ON) ) >>= bRet;
+ else
+ m_aFollowPageStyle->getPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_HEADER_IS_ON) ) >>= bRet;
+ }
+ return bRet;
+}
+/*-- 20.12.2006 09:44:16---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool SectionPropertyMap::HasFooter(bool bFirstPage) const
+{
+ bool bRet = false;
+ if( (bFirstPage && m_aFirstPageStyle.is()) ||( !bFirstPage && m_aFollowPageStyle.is()) )
+ {
+ if( bFirstPage )
+ m_aFirstPageStyle->getPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_FOOTER_IS_ON) ) >>= bRet;
+ else
+ m_aFollowPageStyle->getPropertyValue(
+ PropertyNameSupplier::GetPropertyNameSupplier().GetName(PROP_FOOTER_IS_ON) ) >>= bRet;
+ }
+ return bRet;
+}
+/*-- 20.12.2006 09:41:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+#define MIN_HEAD_FOOT_HEIGHT 100 //minimum header/footer height
+
+void SectionPropertyMap::CopyLastHeaderFooter( bool bFirstPage, DomainMapper_Impl& rDM_Impl )
+{
+#if DEBUG
+ clog << "START>>> SectionPropertyMap::CopyLastHeaderFooter()" << endl;
+#endif
+ SectionPropertyMap* pLastContext = rDM_Impl.GetLastSectionContext( );
+ if ( pLastContext )
+ {
+ uno::Reference< beans::XPropertySet > xPrevStyle = pLastContext->GetPageStyle(
+ rDM_Impl.GetPageStyles(),
+ rDM_Impl.GetTextFactory(),
+ bFirstPage );
+ uno::Reference< beans::XPropertySet > xStyle = GetPageStyle(
+ rDM_Impl.GetPageStyles(),
+ rDM_Impl.GetTextFactory(),
+ bFirstPage );
+
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+
+ try {
+ // Loop over the Header and Footer properties to copy them
+ static PropertyIds aProperties[] =
+ {
+ PROP_HEADER_TEXT,
+ PROP_FOOTER_TEXT,
+ };
+
+ bool bHasPrevHeader = false;
+ bool bHasHeader = false;
+
+ rtl::OUString sHeaderIsOn = rPropNameSupplier.GetName( PROP_HEADER_IS_ON );
+ xPrevStyle->getPropertyValue( sHeaderIsOn ) >>= bHasPrevHeader;
+ xStyle->getPropertyValue( sHeaderIsOn ) >>= bHasHeader;
+ bool bCopyHeader = bHasPrevHeader && !bHasHeader;
+
+ if ( bCopyHeader )
+ xStyle->setPropertyValue( sHeaderIsOn, uno::makeAny( sal_True ) );
+
+ bool bHasPrevFooter = false;
+ bool bHasFooter = false;
+
+ rtl::OUString sFooterIsOn = rPropNameSupplier.GetName( PROP_FOOTER_IS_ON );
+ xPrevStyle->getPropertyValue( sFooterIsOn ) >>= bHasPrevFooter;
+ xStyle->getPropertyValue( sFooterIsOn ) >>= bHasFooter;
+ bool bCopyFooter = bHasPrevFooter && !bHasFooter;
+
+ if ( bCopyFooter )
+ xStyle->setPropertyValue( sFooterIsOn, uno::makeAny( sal_True ) );
+
+ // Copying the text properties
+ for ( int i = 0, nNbProps = 2; i < nNbProps; i++ )
+ {
+ bool bIsHeader = ( i < nNbProps / 2 );
+ PropertyIds aPropId = aProperties[i];
+ rtl::OUString sName = rPropNameSupplier.GetName( aPropId );
+
+ if ( ( bIsHeader && bCopyHeader ) || ( !bIsHeader && bCopyFooter ) )
+ {
+#if DEBUG
+ clog << "Copying ";
+ clog << rtl::OUStringToOString( sName, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
+#endif
+ // TODO has to be copied
+ uno::Reference< text::XTextCopy > xTxt(
+ xStyle->getPropertyValue( sName ), uno::UNO_QUERY_THROW );
+
+ uno::Reference< text::XTextCopy > xPrevTxt(
+ xPrevStyle->getPropertyValue( sName ), uno::UNO_QUERY_THROW );
+
+ xTxt->copyText( xPrevTxt );
+ }
+ }
+ }
+ catch ( const uno::Exception& e )
+ {
+#if DEBUG
+ clog << "An exception occured in SectionPropertyMap::CopyLastHeaderFooter( ) - ";
+ clog << rtl::OUStringToOString( e.Message, RTL_TEXTENCODING_UTF8 ).getStr( ) << endl;
+#endif
+ }
+ }
+#if DEBUG
+ clog << "END>>> SectionPropertyMap::CopyLastHeaderFooter()" << endl;
+#endif
+}
+
+void SectionPropertyMap::PrepareHeaderFooterProperties( bool bFirstPage )
+{
+ sal_Int32 nTopMargin = m_nTopMargin;
+ if(HasHeader(bFirstPage))
+ {
+ m_nTopMargin = m_nHeaderTop;
+ if( nTopMargin > 0 && nTopMargin > m_nHeaderTop )
+ m_nHeaderTop = nTopMargin - m_nHeaderTop;
+ else
+ m_nHeaderTop = 0;
+
+ //minimum header height 1mm
+ if( m_nHeaderTop < MIN_HEAD_FOOT_HEIGHT )
+ m_nHeaderTop = MIN_HEAD_FOOT_HEIGHT;
+ }
+
+
+ if( nTopMargin >= 0 ) //fixed height header -> see WW8Par6.hxx
+ {
+ operator[]( PropertyDefinition( PROP_HEADER_IS_DYNAMIC_HEIGHT, false )) = uno::makeAny( true );
+ operator[]( PropertyDefinition( PROP_HEADER_DYNAMIC_SPACING, false )) = uno::makeAny( true );
+ operator[]( PropertyDefinition( PROP_HEADER_BODY_DISTANCE, false )) = uno::makeAny( m_nHeaderTop - MIN_HEAD_FOOT_HEIGHT );// ULSpace.Top()
+ operator[]( PropertyDefinition( PROP_HEADER_HEIGHT, false )) = uno::makeAny( m_nHeaderTop );
+
+ }
+ else
+ {
+ //todo: old filter fakes a frame into the header/footer to support overlapping
+ //current setting is completely wrong!
+ operator[]( PropertyDefinition( PROP_HEADER_HEIGHT, false )) = uno::makeAny( m_nHeaderTop );
+ operator[]( PropertyDefinition( PROP_HEADER_BODY_DISTANCE, false )) = uno::makeAny( nTopMargin - m_nHeaderTop );
+ operator[]( PropertyDefinition( PROP_HEADER_IS_DYNAMIC_HEIGHT, false)) = uno::makeAny( false );
+ operator[]( PropertyDefinition( PROP_HEADER_DYNAMIC_SPACING, false)) = uno::makeAny( false );
+ }
+
+ sal_Int32 nBottomMargin = m_nBottomMargin;
+ if( HasFooter( bFirstPage ) )
+ {
+ m_nBottomMargin = m_nHeaderBottom;
+ if( nBottomMargin > 0 && nBottomMargin > m_nHeaderBottom )
+ m_nHeaderBottom = nBottomMargin - m_nHeaderBottom;
+ else
+ m_nHeaderBottom = 0;
+ if( m_nHeaderBottom < MIN_HEAD_FOOT_HEIGHT )
+ m_nHeaderBottom = MIN_HEAD_FOOT_HEIGHT;
+ }
+
+ if( nBottomMargin >= 0 ) //fixed height footer -> see WW8Par6.hxx
+ {
+ operator[]( PropertyDefinition( PROP_FOOTER_IS_DYNAMIC_HEIGHT, false )) = uno::makeAny( true );
+ operator[]( PropertyDefinition( PROP_FOOTER_DYNAMIC_SPACING, false )) = uno::makeAny( true );
+ operator[]( PropertyDefinition( PROP_FOOTER_BODY_DISTANCE, false )) = uno::makeAny( m_nHeaderBottom - MIN_HEAD_FOOT_HEIGHT);
+ operator[]( PropertyDefinition( PROP_FOOTER_HEIGHT, false )) = uno::makeAny( m_nHeaderBottom );
+ }
+ else
+ {
+ //todo: old filter fakes a frame into the header/footer to support overlapping
+ //current setting is completely wrong!
+ operator[]( PropertyDefinition( PROP_FOOTER_IS_DYNAMIC_HEIGHT, false)) = uno::makeAny( false );
+ operator[]( PropertyDefinition( PROP_FOOTER_DYNAMIC_SPACING, false)) = uno::makeAny( false );
+ operator[]( PropertyDefinition( PROP_FOOTER_HEIGHT, false )) = uno::makeAny( nBottomMargin - m_nHeaderBottom );
+ operator[]( PropertyDefinition( PROP_FOOTER_BODY_DISTANCE, false )) = uno::makeAny( m_nHeaderBottom );
+ }
+
+ //now set the top/bottom margin for the follow page style
+ operator[]( PropertyDefinition( PROP_TOP_MARGIN, false )) = uno::makeAny( m_nTopMargin );
+ operator[]( PropertyDefinition( PROP_BOTTOM_MARGIN, false )) = uno::makeAny( m_nBottomMargin );
+}
+/*-- 11.12.2006 08:31:46---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::CloseSectionGroup( DomainMapper_Impl& rDM_Impl )
+{
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ if( m_nLnnMod )
+ {
+ bool bFirst = rDM_Impl.IsLineNumberingSet();
+ rDM_Impl.SetLineNumbering( m_nLnnMod, m_nLnc, m_ndxaLnn );
+ if( m_nLnnMin > 0 || (bFirst && m_nLnc == 1))
+ {
+ //set the starting value at the beginning of the section
+ try
+ {
+ uno::Reference< beans::XPropertySet > xRangeProperties;
+ if( m_xStartingRange.is() )
+ {
+ xRangeProperties = uno::Reference< beans::XPropertySet >( m_xStartingRange, uno::UNO_QUERY_THROW );
+ }
+ else
+ {
+ //set the start value at the beginning of the document
+ xRangeProperties = uno::Reference< beans::XPropertySet >( rDM_Impl.GetTextDocument()->getText()->getStart(), uno::UNO_QUERY_THROW );
+ }
+ xRangeProperties->setPropertyValue( rPropNameSupplier.GetName( PROP_PARA_LINE_NUMBER_START_VALUE ), uno::makeAny( m_nLnnMin + 1 ));
+ }
+ catch( const uno::Exception& )
+ {
+ OSL_ENSURE( false, "Exception in SectionPropertyMap::CloseSectionGroup");
+ }
+ }
+ }
+
+ //depending on the break type no page styles should be created
+ if(m_nBreakType == 0)
+ {
+ //todo: insert a section or access the already inserted section
+ //-->debug
+// ::rtl::OUString sSelection = m_xStartingRange->getString();
+// sSelection.getLength();
+ //-->debug
+ uno::Reference< beans::XPropertySet > xSection =
+ rDM_Impl.appendTextSectionAfter( m_xStartingRange );
+ if( m_nColumnCount > 0 && xSection.is())
+ ApplyColumnProperties( xSection );
+ }
+ else
+ {
+ //get the properties and create appropriate page styles
+ uno::Reference< beans::XPropertySet > xFollowPageStyle = GetPageStyle( rDM_Impl.GetPageStyles(), rDM_Impl.GetTextFactory(), false );
+
+ if( m_nDzaGutter > 0 )
+ {
+ //todo: iGutterPos from DocProperties are missing
+ // if( m_iGutterPos > 0 ) m_nTopMargin += m_nDzaGutter; else
+ if( m_bGutterRTL )
+ m_nRightMargin += m_nDzaGutter;
+ else
+ m_nLeftMargin += m_nDzaGutter;
+ }
+ operator[]( PropertyDefinition( PROP_LEFT_MARGIN, false )) = uno::makeAny( m_nLeftMargin );
+ operator[]( PropertyDefinition( PROP_RIGHT_MARGIN, false )) = uno::makeAny( m_nRightMargin );
+
+// if( iGutterPos && fRTLGutter )
+// m_nTopMargin += nGutter
+
+ /*** if headers/footers are available then the top/bottom margins of the
+ header/footer are copied to the top/bottom margin of the page
+ */
+ CopyLastHeaderFooter( false, rDM_Impl );
+ PrepareHeaderFooterProperties( false );
+
+ const ::rtl::OUString sTrayIndex = rPropNameSupplier.GetName( PROP_PRINTER_PAPER_TRAY_INDEX );
+ if( m_nPaperBin >= 0 )
+ xFollowPageStyle->setPropertyValue( sTrayIndex, uno::makeAny( m_nPaperBin ) );
+ uno::Reference< text::XTextColumns > xColumns;
+ if( m_nColumnCount > 0 )
+ xColumns = ApplyColumnProperties( xFollowPageStyle );
+
+ //prepare text grid properties
+ sal_Int32 nHeight = 1;
+ PropertyMap::iterator aElement = find(PropertyDefinition( PROP_HEIGHT, false ));
+ if( aElement != end())
+ aElement->second >>= nHeight;
+
+ sal_Int32 nWidth = 1;
+ aElement = find(PropertyDefinition( PROP_WIDTH, false ));
+ if( aElement != end())
+ aElement->second >>= nWidth;
+
+ text::WritingMode eWritingMode = text::WritingMode_LR_TB;
+ aElement = find(PropertyDefinition( PROP_WRITING_MODE, false ));
+ if( aElement != end())
+ aElement->second >>= eWritingMode;
+
+
+
+ sal_Int32 nTextAreaHeight = eWritingMode == text::WritingMode_LR_TB ?
+ nHeight - m_nTopMargin - m_nBottomMargin :
+ nWidth - m_nLeftMargin - m_nRightMargin;
+
+ operator[]( PropertyDefinition( PROP_GRID_LINES, false )) =
+ uno::makeAny( static_cast<sal_Int16>(nTextAreaHeight/m_nGridLinePitch));
+
+ sal_Int32 nCharWidth = 423; //240 twip/ 12 pt
+ //todo: is '0' the right index here?
+ const StyleSheetEntryPtr pEntry = rDM_Impl.GetStyleSheetTable()->FindStyleSheetByISTD(::rtl::OUString::valueOf(static_cast<sal_Int32>(0), 16));
+ if( pEntry.get( ) )
+ {
+ PropertyMap::iterator aElement_ = pEntry->pProperties->find(PropertyDefinition( PROP_CHAR_HEIGHT_ASIAN, false ));
+ if( aElement_ != pEntry->pProperties->end())
+ {
+ double fHeight = 0;
+ if( aElement_->second >>= fHeight )
+ nCharWidth = ConversionHelper::convertTwipToMM100( (long)( fHeight * 20.0 + 0.5 ));
+ }
+ }
+
+ //dxtCharSpace
+ if(m_nDxtCharSpace)
+ {
+ sal_Int32 nCharSpace = m_nDxtCharSpace;
+ //main lives in top 20 bits, and is signed.
+ sal_Int32 nMain = (nCharSpace & 0xFFFFF000);
+ nMain /= 0x1000;
+ nCharWidth += ConversionHelper::convertTwipToMM100( nMain * 20 );
+
+ sal_Int32 nFraction = (nCharSpace & 0x00000FFF);
+ nFraction = (nFraction * 20)/0xFFF;
+ nCharWidth += ConversionHelper::convertTwipToMM100( nFraction );
+ }
+ operator[]( PropertyDefinition( PROP_GRID_BASE_HEIGHT, false )) = uno::makeAny( nCharWidth );
+ sal_Int32 nRubyHeight = m_nGridLinePitch - nCharWidth;
+ if(nRubyHeight < 0 )
+ nRubyHeight = 0;
+ operator[]( PropertyDefinition( PROP_GRID_RUBY_HEIGHT, false )) = uno::makeAny( nRubyHeight );
+
+ 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_
+ if( m_bTitlePage )
+ {
+ CopyLastHeaderFooter( true, rDM_Impl );
+ PrepareHeaderFooterProperties( true );
+ uno::Reference< beans::XPropertySet > xFirstPageStyle = GetPageStyle(
+ rDM_Impl.GetPageStyles(), rDM_Impl.GetTextFactory(), true );
+ _ApplyProperties( xFirstPageStyle );
+
+ sal_Int32 nPaperBin = m_nFirstPaperBin >= 0 ? m_nFirstPaperBin : m_nPaperBin >= 0 ? m_nPaperBin : 0;
+ if( nPaperBin )
+ xFollowPageStyle->setPropertyValue( sTrayIndex, uno::makeAny( nPaperBin ) );
+ if( xColumns.is() )
+ xFollowPageStyle->setPropertyValue(
+ rPropNameSupplier.GetName( PROP_TEXT_COLUMNS ), uno::makeAny( xColumns ));
+ }
+
+ ApplyBorderToPageStyles( rDM_Impl.GetPageStyles( ), rDM_Impl.GetTextFactory( ), m_nBorderParams );
+
+ try
+ {
+// if( m_xStartingRange.is() )
+ {
+ //now apply this break at the first paragraph of this section
+ uno::Reference< beans::XPropertySet > xRangeProperties;
+ if( m_bIsFirstSection )
+ {
+ uno::Reference< container::XEnumerationAccess > xEnumAccess( rDM_Impl.GetBodyText( ), uno::UNO_QUERY_THROW );
+ uno::Reference< container::XEnumeration > xEnum = xEnumAccess->createEnumeration( );
+ xRangeProperties = uno::Reference< beans::XPropertySet >( xEnum->nextElement( ), uno::UNO_QUERY_THROW );
+ }
+ else
+ xRangeProperties = uno::Reference< beans::XPropertySet >( m_xStartingRange, uno::UNO_QUERY_THROW );
+ /* break type
+ 0 - No break 1 - New Colunn 2 - New page 3 - Even page 4 - odd page */
+ xRangeProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_PAGE_DESC_NAME ),
+ uno::makeAny( m_bTitlePage ? m_sFirstPageStyleName : m_sFollowPageStyleName ));
+ // todo: page breaks with odd/even page numbering are not available - find out current page number to check how to change the number
+ // or add even/odd page break types
+ if(m_bPageNoRestart || m_nPageNumber >= 0)
+ {
+ sal_Int16 nPageNumber = m_nPageNumber >= 0 ? static_cast< sal_Int16 >(m_nPageNumber) : 1;
+ xRangeProperties->setPropertyValue(rPropNameSupplier.GetName( PROP_PAGE_NUMBER_OFFSET ),
+ uno::makeAny( nPageNumber ));
+ }
+ }
+ }
+ catch( const uno::Exception& rEx)
+ {
+ OSL_ENSURE( false, "Exception in SectionPropertyMap::CloseSectionGroup");
+ (void)rEx;
+ }
+ }
+}
+/*-- 11.12.2006 08:31:46---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::_ApplyProperties( uno::Reference< beans::XPropertySet > xStyle )
+{
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ PropertyMap::iterator aMapIter = begin();
+ while( aMapIter != end())
+ {
+ try
+ {
+ xStyle->setPropertyValue( rPropNameSupplier.GetName( aMapIter->first.eId ), aMapIter->second );
+ }
+ catch( const uno::Exception& )
+ {
+ OSL_ENSURE( false, "Exception in <PageStyle>::setPropertyValue");
+ }
+ ++aMapIter;
+ }
+}
+sal_Int32 lcl_AlignPaperBin( sal_Int32 nSet )
+{
+ //default tray numbers are above 0xff
+ if( nSet > 0xff )
+ nSet = nSet >> 8;
+ //there are some special numbers which can't be handled easily
+ //1, 4, 15, manual tray, upper tray, auto select? see ww8atr.cxx
+ //todo: find out appropriate conversion
+ return nSet;
+}
+/*-- 13.12.2006 15:34:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::SetPaperBin( sal_Int32 nSet )
+{
+ m_nPaperBin = lcl_AlignPaperBin( nSet );
+}
+/*-- 13.12.2006 15:34:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionPropertyMap::SetFirstPaperBin( sal_Int32 nSet )
+{
+ m_nFirstPaperBin = lcl_AlignPaperBin( nSet );
+}
+/*-- 14.06.2007 13:57:42---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+StyleSheetPropertyMap::StyleSheetPropertyMap() :
+// mnCT_Spacing_after( 0 ),
+ mnCT_Spacing_line( 0 ),
+ mnCT_Spacing_lineRule( 0 ),
+ mbCT_TrPrBase_tblHeader( false ),
+ mnCT_TrPrBase_jc( 0 ),
+ mnCT_TcPrBase_vAlign( 0 ),
+ mnCT_TblWidth_w( 0 ),
+ mnCT_TblWidth_type( 0 ),
+// mbCT_Spacing_afterSet( false ),
+ mbCT_Spacing_lineSet( false ),
+ mbCT_Spacing_lineRuleSet( false ),
+ mbCT_TrPrBase_tblHeaderSet( false ),
+ mbCT_TrPrBase_jcSet( false ),
+ mbCT_TcPrBase_vAlignSet( false ),
+ mbCT_TblWidth_wSet( false ),
+ mbCT_TblWidth_typeSet( false ),
+ mnListId( -1 ),
+ mnListLevel( -1 ),
+ mnOutlineLevel( -1 )
+{
+}
+/*-- 14.06.2007 13:57:43---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+StyleSheetPropertyMap::~StyleSheetPropertyMap()
+{
+}
+/*-- 28.12.2007 08:19:00---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ParagraphProperties::ParagraphProperties() :
+ m_bFrameMode( false ),
+ m_nDropCap(NS_ooxml::LN_Value_wordprocessingml_ST_DropCap_none),
+ m_nLines(0),
+ m_w(-1),
+ m_h(-1),
+ m_nWrap(-1),
+ m_hAnchor(-1),
+ m_vAnchor(text::RelOrientation::FRAME),
+ m_x(-1),
+ m_bxValid( false ),
+ m_y(-1),
+ m_byValid( false ),
+ m_hSpace(-1),
+ m_vSpace(-1),
+ m_hRule(-1),
+ m_xAlign(-1),
+ m_yAlign(-1),
+ m_bAnchorLock(false),
+ m_nDropCapLength(0)
+{
+}
+/*-- 28.12.2007 08:28:24---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ParagraphProperties::ParagraphProperties(const ParagraphProperties& rCopy) :
+ m_bFrameMode ( rCopy.m_bFrameMode),
+ m_nDropCap ( rCopy.m_nDropCap),
+ m_nLines ( rCopy.m_nLines),
+ m_w ( rCopy.m_w),
+ m_h ( rCopy.m_h),
+ m_nWrap ( rCopy.m_nWrap),
+ m_hAnchor ( rCopy.m_hAnchor),
+ m_vAnchor ( rCopy.m_vAnchor),
+ m_x ( rCopy.m_x),
+ m_bxValid ( rCopy.m_bxValid),
+ m_y ( rCopy.m_y),
+ m_byValid ( rCopy.m_byValid),
+ m_hSpace ( rCopy.m_hSpace),
+ m_vSpace ( rCopy.m_vSpace),
+ m_hRule ( rCopy.m_hRule),
+ m_xAlign ( rCopy.m_xAlign),
+ m_yAlign ( rCopy.m_yAlign),
+ m_bAnchorLock( rCopy.m_bAnchorLock),
+ m_nDropCapLength( rCopy.m_nDropCapLength ),
+ m_sParaStyleName( rCopy.m_sParaStyleName),
+ m_xStartingRange( rCopy.m_xStartingRange ),
+ m_xEndingRange( rCopy.m_xEndingRange)
+{
+}
+/*-- 28.12.2007 11:29:18---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ParagraphProperties::~ParagraphProperties()
+{
+}
+/*-- 28.12.2007 09:05:45---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+int ParagraphProperties::operator==(const ParagraphProperties& rCompare)
+{
+ return
+ m_bFrameMode == rCompare.m_bFrameMode &&
+ m_nDropCap == rCompare.m_nDropCap &&
+ m_nLines == rCompare.m_nLines &&
+ m_w == rCompare.m_w &&
+ m_h == rCompare.m_h &&
+ m_nWrap == rCompare.m_nWrap &&
+ m_hAnchor == rCompare.m_hAnchor &&
+ m_vAnchor == rCompare.m_vAnchor &&
+ m_x == rCompare.m_x &&
+ m_bxValid == rCompare.m_bxValid &&
+ m_y == rCompare.m_y &&
+ m_byValid == rCompare.m_byValid &&
+ m_hSpace == rCompare.m_hSpace &&
+ m_vSpace == rCompare.m_vSpace &&
+ m_hRule == rCompare.m_hRule &&
+ m_xAlign == rCompare.m_xAlign &&
+ m_yAlign == rCompare.m_yAlign &&
+ m_bAnchorLock== rCompare.m_bAnchorLock;
+}
+/*-- 27.12.2007 13:32:36---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ParagraphPropertyMap::ParagraphPropertyMap()
+{
+}
+/*-- 27.12.2007 13:32:36---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+ParagraphPropertyMap::~ParagraphPropertyMap()
+{
+}
+/*-- 15.02.2008 16:10:39---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+TablePropertyMap::TablePropertyMap()
+{
+}
+/*-- 15.02.2008 16:10:39---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+TablePropertyMap::~TablePropertyMap()
+{
+}
+/*-- 18.02.2008 10:06:30---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+bool TablePropertyMap::getValue( TablePropertyMapTarget eWhich, sal_Int32& nFill )
+{
+ if( eWhich < TablePropertyMapTarget_MAX )
+ {
+ if(m_aValidValues[eWhich].bValid)
+ nFill = m_aValidValues[eWhich].nValue;
+ return m_aValidValues[eWhich].bValid;
+ }
+ else
+ {
+ OSL_ENSURE( false, "invalid TablePropertyMapTarget");
+ return false;
+ }
+}
+/*-- 18.02.2008 10:07:11---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void TablePropertyMap::setValue( TablePropertyMapTarget eWhich, sal_Int32 nSet )
+{
+ if( eWhich < TablePropertyMapTarget_MAX )
+ {
+ m_aValidValues[eWhich].bValid = true;
+ m_aValidValues[eWhich].nValue = nSet;
+ }
+ else
+ OSL_ENSURE( false, "invalid TablePropertyMapTarget");
+}
+/*-- 18.02.2008 11:23:28---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void TablePropertyMap::insertTableProperties( const PropertyMap* pMap )
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("TablePropertyMap.insertTableProperties");
+ dmapper_logger->addTag(pMap->toTag());
+#endif
+
+ const TablePropertyMap* pSource = dynamic_cast< const TablePropertyMap* >(pMap);
+ if( pSource )
+ {
+ for( sal_Int32 eTarget = TablePropertyMapTarget_START;
+ eTarget < TablePropertyMapTarget_MAX; ++eTarget )
+ {
+ if( pSource->m_aValidValues[eTarget].bValid )
+ {
+ m_aValidValues[eTarget].bValid = true;
+ m_aValidValues[eTarget].nValue = pSource->m_aValidValues[eTarget].nValue;
+ }
+ }
+ }
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->addTag(toTag());
+ dmapper_logger->endElement("TablePropertyMap.insertTableProperties");
+#endif
+}
+
+
+}//namespace dmapper
+}//namespace writerfilter
diff --git a/writerfilter/source/dmapper/PropertyMap.hxx b/writerfilter/source/dmapper/PropertyMap.hxx
new file mode 100644
index 000000000000..b6dcad6d63b2
--- /dev/null
+++ b/writerfilter/source/dmapper/PropertyMap.hxx
@@ -0,0 +1,556 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_DMAPPER_PROPERTYMAP_HXX
+#define INCLUDED_DMAPPER_PROPERTYMAP_HXX
+
+#include <rtl/ustring.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+#ifndef _COM_SUN_STAR_BEANS_PROPERTYVALUE_HXX_
+#include <com/sun/star/beans/PropertyValue.hpp>
+#endif
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/uno/Any.h>
+#include <PropertyIds.hxx>
+#include <boost/shared_ptr.hpp>
+#include <map>
+#include <vector>
+
+#include <resourcemodel/TagLogger.hxx>
+
+namespace com{namespace sun{namespace star{
+ namespace beans{
+ struct PropertyValue;
+ }
+ namespace container{
+ class XNameAccess;
+ class XNameContainer;
+ }
+ namespace lang{
+ class XMultiServiceFactory;
+ }
+ namespace text{
+ class XTextRange;
+ class XTextColumns;
+ class XFootnote;
+ }
+ namespace table{
+ struct BorderLine;
+ }
+}}}
+
+namespace writerfilter {
+namespace dmapper{
+class DomainMapper_Impl;
+
+enum BorderPosition
+{
+ BORDER_LEFT,
+ BORDER_RIGHT,
+ BORDER_TOP,
+ BORDER_BOTTOM
+};
+/*-- 15.06.2006 08:22:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+struct PropertyDefinition
+{
+ PropertyIds eId;
+ bool bIsTextProperty;
+
+ PropertyDefinition( PropertyIds _eId, bool _bIsTextProperty ) :
+ eId( _eId ),
+ bIsTextProperty( _bIsTextProperty ){}
+
+ bool operator== (const PropertyDefinition& rDef) const
+ { return rDef.eId == eId; }
+ bool operator< (const PropertyDefinition& rDef) const
+ { return eId < rDef.eId; }
+};
+typedef std::map < PropertyDefinition, ::com::sun::star::uno::Any > _PropertyMap;
+class PropertyMap : public _PropertyMap
+{
+ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > m_aValues;
+ //marks context as footnote context - ::text( ) events contain either the footnote character or can be ignored
+ //depending on sprmCSymbol
+ sal_Unicode m_cFootnoteSymbol; // 0 == invalid
+ sal_Int32 m_nFootnoteFontId; // negative values are invalid ids
+ ::rtl::OUString m_sFootnoteFontName;
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XFootnote > m_xFootnote;
+
+protected:
+ void Invalidate()
+ {
+ if(m_aValues.getLength())
+ m_aValues.realloc( 0 );
+ }
+
+public:
+ PropertyMap();
+ virtual ~PropertyMap();
+
+ ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > GetPropertyValues();
+ bool hasEmptyPropertyValues() const {return !m_aValues.getLength();}
+ /** Add property, usually overwrites already available attributes. It shouldn't overwrite in case of default attributes
+ */
+ void Insert( PropertyIds eId, bool bIsTextProperty, const ::com::sun::star::uno::Any& rAny, bool bOverwrite = true );
+ using _PropertyMap::insert;
+ void insert(const boost::shared_ptr<PropertyMap> pMap, bool bOverwrite = true);
+
+ const ::com::sun::star::uno::Reference< ::com::sun::star::text::XFootnote>& GetFootnote() const;
+ void SetFootnote( ::com::sun::star::uno::Reference< ::com::sun::star::text::XFootnote> xF ) { m_xFootnote = xF; }
+
+ sal_Unicode GetFootnoteSymbol() const { return m_cFootnoteSymbol;}
+ void SetFootnoteSymbol(sal_Unicode cSet) { m_cFootnoteSymbol = cSet;}
+
+ sal_Int32 GetFootnoteFontId() const { return m_nFootnoteFontId;}
+ void SetFootnoteFontId(sal_Int32 nSet) { m_nFootnoteFontId = nSet;}
+
+ const ::rtl::OUString& GetFootnoteFontName() const { return m_sFootnoteFontName;}
+ void SetFootnoteFontName( const ::rtl::OUString& rSet ) { m_sFootnoteFontName = rSet;}
+
+ virtual void insertTableProperties( const PropertyMap* );
+
+ virtual XMLTag::Pointer_t toTag() const;
+};
+typedef boost::shared_ptr<PropertyMap> PropertyMapPtr;
+
+/*-- 24.07.2006 08:26:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class SectionPropertyMap : public PropertyMap
+{
+ //--> debug
+ sal_Int32 nSectionNumber;
+ //<-- debug
+ //'temporarily' the section page settings are imported as page styles
+ // empty strings mark page settings as not yet imported
+
+ bool m_bIsFirstSection;
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xStartingRange;
+
+ ::rtl::OUString m_sFirstPageStyleName;
+ ::rtl::OUString m_sFollowPageStyleName;
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_aFirstPageStyle;
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_aFollowPageStyle;
+
+ ::com::sun::star::table::BorderLine* m_pBorderLines[4];
+ sal_Int32 m_nBorderDistances[4];
+ sal_Int32 m_nBorderParams;
+
+ bool m_bTitlePage;
+ sal_Int16 m_nColumnCount;
+ sal_Int32 m_nColumnDistance;
+ ::std::vector< sal_Int32 > m_aColWidth;
+ ::std::vector< sal_Int32 > m_aColDistance;
+
+ bool m_bSeparatorLineIsOn;
+ bool m_bEvenlySpaced;
+ bool m_bIsLandscape;
+
+ bool m_bPageNoRestart;
+ sal_Int32 m_nPageNumber;
+ sal_Int32 m_nBreakType;
+ sal_Int32 m_nPaperBin;
+ sal_Int32 m_nFirstPaperBin;
+
+ sal_Int32 m_nLeftMargin;
+ sal_Int32 m_nRightMargin;
+ sal_Int32 m_nTopMargin;
+ sal_Int32 m_nBottomMargin;
+ sal_Int32 m_nHeaderTop;
+ sal_Int32 m_nHeaderBottom;
+
+ sal_Int32 m_nDzaGutter;
+ bool m_bGutterRTL;
+ bool m_bSFBiDi;
+
+ sal_Int32 m_nGridType;
+ sal_Int32 m_nGridLinePitch;
+ sal_Int32 m_nDxtCharSpace;
+
+ //line numbering
+ sal_Int32 m_nLnnMod;
+ sal_Int32 m_nLnc;
+ sal_Int32 m_ndxaLnn;
+ sal_Int32 m_nLnnMin;
+
+ void _ApplyProperties( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xStyle );
+ ::com::sun::star::uno::Reference< com::sun::star::text::XTextColumns > ApplyColumnProperties(
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xFollowPageStyle );
+ void CopyLastHeaderFooter( bool bFirstPage, DomainMapper_Impl& rDM_Impl );
+ void PrepareHeaderFooterProperties( bool bFirstPage );
+ bool HasHeader( bool bFirstPage ) const;
+ bool HasFooter( bool bFirstPage ) const;
+
+ void SetBorderDistance( ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xStyle,
+ PropertyIds eMarginId, PropertyIds eDistId, sal_Int32 nDistance, sal_Int32 nOffsetFrom );
+
+public:
+ explicit SectionPropertyMap(bool bIsFirstSection);
+ ~SectionPropertyMap();
+
+ enum PageType
+ {
+ PAGE_FIRST,
+ PAGE_LEFT,
+ PAGE_RIGHT
+ };
+
+ void SetStart( const ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange >& xRange )
+ {
+ m_xStartingRange = xRange;
+ }
+
+ const ::rtl::OUString& GetPageStyleName( bool bFirst );
+ void SetPageStyleName( bool bFirst, const ::rtl::OUString& rName);
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > GetPageStyle(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& xStyles,
+ const ::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory >& xTextFactory,
+ bool bFirst );
+
+ void SetBorder( BorderPosition ePos, sal_Int32 nLineDistance, const ::com::sun::star::table::BorderLine& rBorderLine );
+ void SetBorderParams( sal_Int32 nSet ) { m_nBorderParams = nSet; }
+
+ void SetColumnCount( sal_Int16 nCount ) { m_nColumnCount = nCount; }
+ void SetColumnDistance( sal_Int32 nDist ) { m_nColumnDistance = nDist; }
+ void AppendColumnWidth( sal_Int32 nWidth ) { m_aColWidth.push_back( nWidth ); }
+ void AppendColumnSpacing( sal_Int32 nDist ) {m_aColDistance.push_back( nDist ); }
+
+ void SetTitlePage( bool bSet ) { m_bTitlePage = bSet; }
+ void SetSeparatorLine( bool bSet ) { m_bSeparatorLineIsOn = bSet; }
+ void SetEvenlySpaced( bool bSet ) { m_bEvenlySpaced = bSet; }
+ void SetLandscape( bool bSet ) { m_bIsLandscape = bSet; }
+ void SetPageNoRestart( bool bSet ) { m_bPageNoRestart = bSet; }
+ void SetPageNumber( sal_Int32 nSet ) { m_nPageNumber = nSet; }
+ void SetBreakType( sal_Int32 nSet ) { m_nBreakType = nSet; }
+ void SetPaperBin( sal_Int32 nSet );
+ void SetFirstPaperBin( sal_Int32 nSet );
+
+ void SetLeftMargin( sal_Int32 nSet ) { m_nLeftMargin = nSet; }
+ void SetRightMargin( sal_Int32 nSet ) { m_nRightMargin = nSet; }
+ void SetTopMargin( sal_Int32 nSet ) { m_nTopMargin = nSet; }
+ void SetBottomMargin( sal_Int32 nSet ) { m_nBottomMargin = nSet; }
+ void SetHeaderTop( sal_Int32 nSet ) { m_nHeaderTop = nSet; }
+ void SetHeaderBottom( sal_Int32 nSet ) { m_nHeaderBottom = nSet; }
+
+ void SetGutterRTL( bool bSet ) { m_bGutterRTL = bSet;}
+ void SetDzaGutter( sal_Int32 nSet ) {m_nDzaGutter = nSet; }
+ void SetSFBiDi( bool bSet ) { m_bSFBiDi = bSet;}
+
+ void SetGridType(sal_Int32 nSet) { m_nGridType = nSet; }
+ void SetGridLinePitch( sal_Int32 nSet ) { m_nGridLinePitch = nSet; }
+ void SetDxtCharSpace( sal_Int32 nSet ) { m_nDxtCharSpace = nSet; }
+
+ void SetLnnMod( sal_Int32 nValue ) { m_nLnnMod = nValue; }
+ void SetLnc( sal_Int32 nValue ) { m_nLnc = nValue; }
+ void SetdxaLnn( sal_Int32 nValue ) { m_ndxaLnn = nValue; }
+ void SetLnnMin( sal_Int32 nValue ) { m_nLnnMin = nValue; }
+
+ //determine which style gets the borders
+ void ApplyBorderToPageStyles(
+ const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >& xStyles,
+ const ::com::sun::star::uno::Reference < ::com::sun::star::lang::XMultiServiceFactory >& xTextFactory,
+ sal_Int32 nValue );
+
+ void CloseSectionGroup( DomainMapper_Impl& rDM_Impl );
+};
+typedef boost::shared_ptr<SectionPropertyMap> SectionPropertyMapPtr;
+
+/*-- 28.12.2007 08:17:34---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class ParagraphProperties
+{
+ bool m_bFrameMode;
+ sal_Int32 m_nDropCap; //drop, margin ST_DropCap
+ sal_Int32 m_nLines; //number of lines of the drop cap
+ sal_Int32 m_w; //width
+ sal_Int32 m_h; //height
+ sal_Int32 m_nWrap; // from ST_Wrap around, auto, none, notBeside, through, tight
+ sal_Int32 m_hAnchor; // page, from ST_HAnchor margin, page, text
+ sal_Int32 m_vAnchor; // around from ST_VAnchor margin, page, text
+ sal_Int32 m_x; //x-position
+ bool m_bxValid;
+ sal_Int32 m_y; //y-position
+ bool m_byValid;
+ sal_Int32 m_hSpace; //frame padding h
+ sal_Int32 m_vSpace; //frame padding v
+ sal_Int32 m_hRule; // from ST_HeightRule exact, atLeast, auto
+ sal_Int32 m_xAlign; // from ST_XAlign center, inside, left, outside, right
+ sal_Int32 m_yAlign; // from ST_YAlign bottom, center, inline, inside, outside, top
+ bool m_bAnchorLock;
+
+ sal_Int8 m_nDropCapLength; //number of characters
+
+ ::rtl::OUString m_sParaStyleName;
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xStartingRange; //start of a frame
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > m_xEndingRange; //end of the frame
+
+public:
+ ParagraphProperties();
+ ParagraphProperties(const ParagraphProperties&);
+ ~ParagraphProperties();
+
+ int operator==(const ParagraphProperties&); //does not compare the starting/ending range, m_sParaStyleName and m_nDropCapLength
+
+ void SetFrameMode() { m_bFrameMode = true; }
+ bool IsFrameMode()const { return m_bFrameMode; }
+
+ void SetDropCap( sal_Int32 nSet ) { m_nDropCap = nSet; }
+ sal_Int32 GetDropCap()const { return m_nDropCap; }
+
+ void SetLines( sal_Int32 nSet ) { m_nLines = nSet; }
+ sal_Int32 GetLines() const { return m_nLines; }
+
+ void Setw( sal_Int32 nSet ) { m_w = nSet; }
+ sal_Int32 Getw() const { return m_w; }
+
+ void Seth( sal_Int32 nSet ) { m_h = nSet; }
+ sal_Int32 Geth() const { return m_h; }
+
+ void SetWrap( sal_Int32 nSet ) { m_nWrap = nSet; }
+ sal_Int32 GetWrap() const { return m_nWrap; }
+
+ void SethAnchor( sal_Int32 nSet ) { m_hAnchor = nSet; }
+ sal_Int32 GethAnchor() const { return m_hAnchor;}
+
+ void SetvAnchor( sal_Int32 nSet ) { m_vAnchor = nSet; }
+ sal_Int32 GetvAnchor() const { return m_vAnchor; }
+
+ void Setx( sal_Int32 nSet ) { m_x = nSet; m_bxValid = true;}
+ sal_Int32 Getx() const { return m_x; }
+ bool IsxValid() const {return m_bxValid;}
+
+ void Sety( sal_Int32 nSet ) { m_y = nSet; m_byValid = true;}
+ sal_Int32 Gety()const { return m_y; }
+ bool IsyValid() const {return m_byValid;}
+
+ void SethSpace( sal_Int32 nSet ) { m_hSpace = nSet; }
+ sal_Int32 GethSpace()const { return m_hSpace; }
+
+ void SetvSpace( sal_Int32 nSet ) { m_vSpace = nSet; }
+ sal_Int32 GetvSpace()const { return m_vSpace; }
+
+ void SethRule( sal_Int32 nSet ) { m_hRule = nSet; }
+ sal_Int32 GethRule() const { return m_hRule; }
+
+ void SetxAlign( sal_Int32 nSet ) { m_xAlign = nSet; }
+ sal_Int32 GetxAlign()const { return m_xAlign; }
+
+ void SetyAlign( sal_Int32 nSet ) { m_yAlign = nSet; }
+ sal_Int32 GetyAlign()const { return m_yAlign; }
+
+ void SetAnchorLock( bool bSet ) {m_bAnchorLock = bSet; }
+
+ sal_Int8 GetDropCapLength() const { return m_nDropCapLength;}
+ void SetDropCapLength(sal_Int8 nSet) { m_nDropCapLength = nSet;}
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > GetStartingRange() const { return m_xStartingRange; }
+ void SetStartingRange( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xSet ) { m_xStartingRange = xSet; }
+
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > GetEndingRange() const { return m_xEndingRange; }
+ void SetEndingRange( ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > xSet ) { m_xEndingRange = xSet; }
+
+ void SetParaStyleName( const ::rtl::OUString& rSet ) { m_sParaStyleName = rSet;}
+ const ::rtl::OUString& GetParaStyleName() const { return m_sParaStyleName;}
+
+
+};
+typedef boost::shared_ptr<ParagraphProperties> ParagraphPropertiesPtr;
+/*-- 14.06.2007 12:12:34---------------------------------------------------
+ property map of a stylesheet
+ -----------------------------------------------------------------------*/
+
+#define WW_OUTLINE_MAX sal_Int16( 9 )
+
+class StyleSheetPropertyMap : public PropertyMap, public ParagraphProperties
+
+{
+ //special table style properties
+// sal_Int32 mnCT_Spacing_after;
+ sal_Int32 mnCT_Spacing_line;
+ sal_Int32 mnCT_Spacing_lineRule;
+
+ ::rtl::OUString msCT_Fonts_ascii;
+ bool mbCT_TrPrBase_tblHeader;
+ sal_Int32 mnCT_TrPrBase_jc;
+ sal_Int32 mnCT_TcPrBase_vAlign;
+
+ sal_Int32 mnCT_TblWidth_w;
+ sal_Int32 mnCT_TblWidth_type;
+
+// bool mbCT_Spacing_afterSet;
+ bool mbCT_Spacing_lineSet;
+ bool mbCT_Spacing_lineRuleSet;
+
+ bool mbCT_TrPrBase_tblHeaderSet;
+ bool mbCT_TrPrBase_jcSet;
+ bool mbCT_TcPrBase_vAlignSet;
+
+ bool mbCT_TblWidth_wSet;
+ bool mbCT_TblWidth_typeSet;
+
+ sal_Int32 mnListId;
+ sal_Int16 mnListLevel;
+
+ sal_Int16 mnOutlineLevel;
+public:
+ explicit StyleSheetPropertyMap();
+ ~StyleSheetPropertyMap();
+
+// void SetCT_Spacing_after( sal_Int32 nSet )
+// {mnCT_Spacing_after = nSet; mbCT_Spacing_afterSet = true; }
+ void SetCT_Spacing_line( sal_Int32 nSet )
+ {mnCT_Spacing_line = nSet; mbCT_Spacing_lineSet = true; }
+ void SetCT_Spacing_lineRule( sal_Int32 nSet )
+ {mnCT_Spacing_lineRule = nSet; mbCT_Spacing_lineRuleSet = true; }
+
+ void SetCT_Fonts_ascii( const ::rtl::OUString& rSet )
+ {msCT_Fonts_ascii = rSet; }
+ void SetCT_TrPrBase_tblHeader( bool bSet )
+ {mbCT_TrPrBase_tblHeader = bSet; mbCT_TrPrBase_tblHeaderSet = true; }
+ void SetCT_TrPrBase_jc( sal_Int32 nSet )
+ {mnCT_TrPrBase_jc = nSet; mbCT_TrPrBase_jcSet = true; }
+ void SetCT_TcPrBase_vAlign( sal_Int32 nSet )
+ {mnCT_TcPrBase_vAlign = nSet; mbCT_TcPrBase_vAlignSet = true; }
+
+ void SetCT_TblWidth_w( sal_Int32 nSet )
+ { mnCT_TblWidth_w = nSet; mbCT_TblWidth_wSet = true; }
+ void SetCT_TblWidth_type( sal_Int32 nSet )
+ {mnCT_TblWidth_type = nSet; mbCT_TblWidth_typeSet = true; }
+
+// bool GetCT_Spacing_after( sal_Int32& rToFill) const
+// {
+// if( mbCT_Spacing_afterSet )
+// rToFill = mnCT_Spacing_after;
+// return mbCT_Spacing_afterSet;
+// }
+ bool GetCT_Spacing_line( sal_Int32& rToFill) const
+ {
+ if( mbCT_Spacing_lineSet )
+ rToFill = mnCT_Spacing_line;
+ return mbCT_Spacing_lineSet;
+ }
+ bool GetCT_Spacing_lineRule(sal_Int32& rToFill) const
+ {
+ if( mbCT_Spacing_lineRuleSet )
+ rToFill = mnCT_Spacing_lineRule;
+ return mbCT_Spacing_lineRuleSet;
+ }
+
+ bool GetCT_Fonts_ascii(::rtl::OUString& rToFill) const
+ {
+ if( msCT_Fonts_ascii.getLength() > 0 )
+ rToFill = msCT_Fonts_ascii;
+ return msCT_Fonts_ascii.getLength() > 0;
+ }
+ bool GetCT_TrPrBase_tblHeader(bool& rToFill) const
+ {
+ if( mbCT_TrPrBase_tblHeaderSet )
+ rToFill = mbCT_TrPrBase_tblHeader;
+ return mbCT_TrPrBase_tblHeaderSet;
+ }
+ bool GetCT_TrPrBase_jc( sal_Int32& rToFill)const
+ {
+ if( mbCT_TrPrBase_jcSet )
+ rToFill = mnCT_TrPrBase_jc;
+ return mbCT_TrPrBase_jcSet;
+ }
+ bool GetCT_TcPrBase_vAlign( sal_Int32& rToFill)const
+ {
+ if( mbCT_TcPrBase_vAlignSet )
+ rToFill = mnCT_TcPrBase_vAlign;
+ return mbCT_TcPrBase_vAlignSet;
+ }
+ sal_Int32 GetListId() const { return mnListId; }
+ void SetListId(sal_Int32 nId) { mnListId = nId; }
+
+ sal_Int16 GetListLevel() const { return mnListLevel; }
+ void SetListLevel(sal_Int16 nLevel) { mnListLevel = nLevel; }
+
+ sal_Int16 GetOutlineLevel() const { return mnOutlineLevel; }
+ void SetOutlineLevel(sal_Int16 nLevel)
+ {
+ if ( nLevel < WW_OUTLINE_MAX )
+ mnOutlineLevel = nLevel;
+ }
+};
+/*-- 27.12.2007 12:38:06---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class ParagraphPropertyMap : public PropertyMap, public ParagraphProperties
+{
+public:
+ explicit ParagraphPropertyMap();
+ ~ParagraphPropertyMap();
+
+};
+/*-- 15.02.2008 16:06:52---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+class TablePropertyMap : public PropertyMap
+{
+public:
+ enum TablePropertyMapTarget
+ {
+ TablePropertyMapTarget_START,
+ CELL_MAR_LEFT = TablePropertyMapTarget_START,
+ CELL_MAR_RIGHT,
+ CELL_MAR_TOP,
+ CELL_MAR_BOTTOM,
+ TABLE_WIDTH,
+ GAP_HALF,
+ LEFT_MARGIN,
+ HORI_ORIENT,
+ TablePropertyMapTarget_MAX
+ };
+private:
+ struct ValidValue
+ {
+ sal_Int32 nValue;
+ bool bValid;
+ ValidValue() :
+ nValue( 0 ),
+ bValid( false ){}
+ };
+ ValidValue m_aValidValues[TablePropertyMapTarget_MAX];
+
+public:
+ explicit TablePropertyMap();
+ ~TablePropertyMap();
+
+ bool getValue( TablePropertyMapTarget eWhich, sal_Int32& nFill );
+ void setValue( TablePropertyMapTarget eWhich, sal_Int32 nSet );
+
+ virtual void insertTableProperties( const PropertyMap* );
+};
+typedef boost::shared_ptr<TablePropertyMap> TablePropertyMapPtr;
+} //namespace dmapper
+} //namespace writerfilter
+#endif
diff --git a/writerfilter/source/dmapper/PropertyMapHelper.cxx b/writerfilter/source/dmapper/PropertyMapHelper.cxx
new file mode 100644
index 000000000000..3496c5e04f44
--- /dev/null
+++ b/writerfilter/source/dmapper/PropertyMapHelper.cxx
@@ -0,0 +1,129 @@
+/*************************************************************************
+ *
+ * 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 <com/sun/star/text/TableColumnSeparator.hpp>
+#include <resourcemodel/TagLogger.hxx>
+#include "PropertyMapHelper.hxx"
+
+namespace writerfilter
+{
+namespace dmapper
+{
+
+using namespace ::com::sun::star;
+
+XMLTag::Pointer_t lcl_TableColumnSeparatorsToTag(const uno::Any & rTableColumnSeparators)
+{
+ uno::Sequence<text::TableColumnSeparator> aSeq;
+ rTableColumnSeparators >>= aSeq;
+
+ XMLTag::Pointer_t pResult(new XMLTag("property.TableColumnSeparators"));
+
+ sal_uInt32 nLength = aSeq.getLength();
+ for (sal_uInt32 n = 0; n < nLength; ++n)
+ {
+ XMLTag::Pointer_t pTagSeparator(new XMLTag("separator"));
+
+ pTagSeparator->addAttr("position", aSeq[n].Position);
+ pTagSeparator->addAttr("visible", aSeq[n].IsVisible);
+
+ pResult->addTag(pTagSeparator);
+ }
+
+ return pResult;
+}
+
+XMLTag::Pointer_t lcl_PropertyValuesToTag(beans::PropertyValues & rValues)
+{
+ XMLTag::Pointer_t pResult(new XMLTag("propertyValues"));
+
+ beans::PropertyValue * pValues = rValues.getArray();
+
+ for (sal_Int32 n = 0; n < rValues.getLength(); ++n)
+ {
+ XMLTag::Pointer_t pTag(new XMLTag("propertyValue"));
+
+ pTag->addAttr("name", pValues[n].Name);
+
+ try
+ {
+ sal_Int32 aInt = 0;
+ pValues[n].Value >>= aInt;
+ pTag->addAttr("value", aInt);
+ }
+ catch (...)
+ {
+ }
+
+ if (pValues[n].Name.equalsAscii("TableColumnSeparators"))
+ {
+ pTag->addTag(lcl_TableColumnSeparatorsToTag(pValues[n].Value));
+ }
+
+ pResult->addTag(pTag);
+ }
+
+ return pResult;
+}
+
+XMLTag::Pointer_t lcl_PropertyValueSeqToTag(PropertyValueSeq_t & rPropValSeq)
+{
+ XMLTag::Pointer_t pResult(new XMLTag("PropertyValueSeq"));
+
+ beans::PropertyValues * pValues = rPropValSeq.getArray();
+
+ for (sal_Int32 n = 0; n < rPropValSeq.getLength(); ++n)
+ {
+ XMLTag::Pointer_t pTag(lcl_PropertyValuesToTag(pValues[n]));
+
+ pResult->addTag(pTag);
+ }
+
+ return pResult;
+}
+
+XMLTag::Pointer_t lcl_PropertyValueSeqSeqToTag(PropertyValueSeqSeq_t rPropValSeqSeq)
+{
+ XMLTag::Pointer_t pResult(new XMLTag("PropertyValueSeq"));
+
+ PropertyValueSeq_t * pValues = rPropValSeqSeq.getArray();
+
+ for (sal_Int32 n = 0; n < rPropValSeqSeq.getLength(); ++n)
+ {
+ XMLTag::Pointer_t pTag(lcl_PropertyValueSeqToTag(pValues[n]));
+
+ pResult->addTag(pTag);
+ }
+
+ return pResult;
+}
+
+}
+}
diff --git a/writerfilter/source/dmapper/PropertyMapHelper.hxx b/writerfilter/source/dmapper/PropertyMapHelper.hxx
new file mode 100644
index 000000000000..fc9ea0a85bb4
--- /dev/null
+++ b/writerfilter/source/dmapper/PropertyMapHelper.hxx
@@ -0,0 +1,48 @@
+/*************************************************************************
+ *
+ * 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 "PropertyMap.hxx"
+#include <com/sun/star/beans/PropertyValues.hpp>
+
+namespace writerfilter
+{
+namespace dmapper
+{
+
+XMLTag::Pointer_t lcl_TableColumnSeparatorsToTag(const uno::Any & rTableColumnSeparators);
+XMLTag::Pointer_t lcl_PropertyValuesToTag(beans::PropertyValues & rValues);
+
+typedef uno::Sequence<beans::PropertyValues> PropertyValueSeq_t;
+XMLTag::Pointer_t lcl_PropertyValueSeqToTag(PropertyValueSeq_t & rPropValSeq);
+
+typedef uno::Sequence<PropertyValueSeq_t> PropertyValueSeqSeq_t;
+XMLTag::Pointer_t lcl_PropertyValueSeqSeqToTag(PropertyValueSeqSeq_t & rPropValSeqSeq);
+}
+}
diff --git a/writerfilter/source/dmapper/SectionColumnHandler.cxx b/writerfilter/source/dmapper/SectionColumnHandler.cxx
new file mode 100644
index 000000000000..e00b0c7558fa
--- /dev/null
+++ b/writerfilter/source/dmapper/SectionColumnHandler.cxx
@@ -0,0 +1,121 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <SectionColumnHandler.hxx>
+#include <PropertyMap.hxx>
+#include <doctok/resourceids.hxx>
+#include <ConversionHelper.hxx>
+#include <ooxml/resourceids.hxx>
+
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+//using namespace ::std;
+
+/*-- 02.06.2008 13:36:24---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SectionColumnHandler::SectionColumnHandler() :
+LoggedProperties(dmapper_logger, "SectionColumnHandler"),
+bEqualWidth( false ),
+nSpace( 0 ),
+nNum( 0 ),
+bSep( false )
+{
+}
+/*-- 02.06.2008 13:36:24---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+SectionColumnHandler::~SectionColumnHandler()
+{
+}
+/*-- 02.06.2008 13:36:24---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionColumnHandler::lcl_attribute(Id rName, Value & rVal)
+{
+ sal_Int32 nIntValue = rVal.getInt();
+ /* WRITERFILTERSTATUS: table: SectionColumnHandler_attributedata */
+ switch( rName )
+ {
+ case NS_ooxml::LN_CT_Columns_equalWidth:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ bEqualWidth = (nIntValue != 0);
+ break;
+ case NS_ooxml::LN_CT_Columns_space:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ nSpace = ConversionHelper::convertTwipToMM100( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_Columns_num:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ nNum = nIntValue;
+ break;
+ case NS_ooxml::LN_CT_Columns_sep:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ bSep = (nIntValue != 0);
+ break;
+
+ case NS_ooxml::LN_CT_Column_w:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ aTempColumn.nWidth = ConversionHelper::convertTwipToMM100( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_Column_space:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ aTempColumn.nSpace = ConversionHelper::convertTwipToMM100( nIntValue );
+ break;
+ default:
+ OSL_ENSURE( false, "SectionColumnHandler: unknown attribute");
+ }
+}
+/*-- 02.06.2008 13:36:24---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void SectionColumnHandler::lcl_sprm(Sprm & rSprm)
+{
+ /* WRITERFILTERSTATUS: table: SectionColumnHandler_sprm */
+ switch( rSprm.getId())
+ {
+ case NS_ooxml::LN_CT_Columns_col:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ aTempColumn.nWidth = aTempColumn.nSpace = 0;
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ pProperties->resolve(*this);
+ aCols.push_back(aTempColumn);
+ }
+ }
+ break;
+ default:
+ OSL_ENSURE( false, "SectionColumnHandler: unknown sprm");
+ }
+}
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/SectionColumnHandler.hxx b/writerfilter/source/dmapper/SectionColumnHandler.hxx
new file mode 100644
index 000000000000..7742f5d4a22b
--- /dev/null
+++ b/writerfilter/source/dmapper/SectionColumnHandler.hxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_SECTIONCOLUMNHANDLER_HXX
+#define INCLUDED_SECTIONCOLUMNHANDLER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+#include <boost/shared_ptr.hpp>
+
+
+namespace writerfilter {
+namespace dmapper
+{
+class PropertyMap;
+
+struct _Column
+{
+ sal_Int32 nWidth;
+ sal_Int32 nSpace;
+};
+
+
+class WRITERFILTER_DLLPRIVATE SectionColumnHandler : public LoggedProperties
+{
+ bool bEqualWidth;
+ sal_Int32 nSpace;
+ sal_Int32 nNum;
+ bool bSep;
+ std::vector<_Column> aCols;
+
+ _Column aTempColumn;
+
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+public:
+ SectionColumnHandler();
+ virtual ~SectionColumnHandler();
+
+ bool IsEqualWidth() const { return bEqualWidth; }
+ sal_Int32 GetSpace() const { return nSpace; }
+ sal_Int32 GetNum() const { return nNum; }
+ bool IsSeparator() const { return bSep; }
+
+ const std::vector<_Column>& GetColumns() const { return aCols;}
+
+};
+typedef boost::shared_ptr< SectionColumnHandler > SectionColumnHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx
new file mode 100644
index 000000000000..6065d33ddb17
--- /dev/null
+++ b/writerfilter/source/dmapper/SettingsTable.cxx
@@ -0,0 +1,258 @@
+/*************************************************************************
+ *
+ * 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: SettingsTable.cxx,v $
+ * $Revision: 1.3 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include <rtl/ustring.hxx>
+#include <resourcemodel/ResourceModelHelper.hxx>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <SettingsTable.hxx>
+#include <resourcemodel/ResourceModelHelper.hxx>
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <ConversionHelper.hxx>
+
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+
+using resourcemodel::resolveSprmProps;
+
+namespace dmapper
+{
+
+struct SettingsTable_Impl
+{
+ DomainMapper& m_rDMapper;
+ const uno::Reference< lang::XMultiServiceFactory > m_xTextFactory;
+
+ ::rtl::OUString m_sCharacterSpacing;
+ ::rtl::OUString m_sDecimalSymbol;
+ ::rtl::OUString m_sListSeparatorForFields; //2.15.1.56 listSeparator (List Separator for Field Code Evaluation)
+
+ int m_nDefaultTabStop;
+ int m_nHyphenationZone;
+
+ 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 )
+ , m_xTextFactory( xTextFactory )
+ , m_nDefaultTabStop( 720 ) //default is 1/2 in
+ , m_nHyphenationZone(0)
+ , 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)
+ {}
+
+};
+
+SettingsTable::SettingsTable(DomainMapper& rDMapper, const uno::Reference< lang::XMultiServiceFactory > xTextFactory)
+: LoggedProperties(dmapper_logger, "SettingsTable")
+, LoggedTable(dmapper_logger, "SettingsTable")
+, m_pImpl( new SettingsTable_Impl(rDMapper, xTextFactory) )
+{
+ // printf("SettingsTable::SettingsTable()\n");
+}
+
+SettingsTable::~SettingsTable()
+{
+ delete m_pImpl;
+}
+
+void SettingsTable::lcl_attribute(Id nName, Value & val)
+{
+ (void) nName;
+ int nIntValue = val.getInt();
+ (void)nIntValue;
+ ::rtl::OUString sValue = val.getString();
+ (void)sValue;
+ //printf ( "SettingsTable::attribute(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)Name, (unsigned int)nIntValue, ::rtl::OUStringToOString(sValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+ /* WRITERFILTERSTATUS: table: SettingsTable_attributedata */
+#if 0 //no values known, yet
+
+ switch(Name)
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml:::
+ break;
+ default:
+ {
+ }
+ }
+#endif
+}
+
+void SettingsTable::lcl_sprm(Sprm& rSprm)
+{
+ sal_uInt32 nSprmId = rSprm.getId();
+
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = pValue->getInt();
+ (void)nIntValue;
+ rtl::OUString sStringValue = pValue->getString();
+
+ //printf ( "SettingsTable::sprm(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nSprmId, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+
+ /* WRITERFILTERSTATUS: table: SettingsTable_sprm */
+ switch(nSprmId)
+ {
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_zoom: // 92469;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_proofState: // 92489;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_attachedTemplate: // 92491;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_hdrShapeDefaults: // 92544;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_footnotePr: // 92545;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_endnotePr: // 92546;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_compat: // 92547;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_themeFontLang: // 92552;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_shapeDefaults: // 92560;
+
+ //PropertySetValues - need to be resolved
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_stylePaneFormatFilter: // 92493;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_defaultTabStop: // 92505;
+ m_pImpl->m_nDefaultTabStop = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_noPunctuationKerning: // 92526;
+ m_pImpl->m_bNoPunctuationKerning = nIntValue ? true : false;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_characterSpacingControl: // 92527;
+ m_pImpl->m_sCharacterSpacing = sStringValue; // doNotCompress, compressPunctuation, compressPunctuationAndJapaneseKana
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_doNotIncludeSubdocsInStats: // 92554; // Do Not Include Content in Text Boxes, Footnotes, and Endnotes in Document Statistics)
+ m_pImpl->m_doNotIncludeSubdocsInStats = nIntValue? true : false;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_decimalSymbol: // 92562;
+ m_pImpl->m_sDecimalSymbol = sStringValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_listSeparator: // 92563;
+ m_pImpl->m_sListSeparatorForFields = sStringValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_rsids: // 92549; revision save Ids - probably not necessary
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Settings_hyphenationZone: // 92508;
+ m_pImpl->m_nHyphenationZone = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Compat_useFELayout: // 92422;
+ // useFELayout (Do Not Bypass East Asian/Complex Script Layout Code - support of old versions of Word - ignored)
+ break;
+ case NS_ooxml::LN_CT_Settings_trackRevisions:
+ {
+ m_pImpl->m_bRecordChanges = bool(rSprm.getValue( )->getInt( ) );
+ }
+ break;
+ case NS_ooxml::LN_CT_Settings_documentProtection:
+ {
+ resolveSprmProps(*this, rSprm);
+ }
+ break;
+ default:
+ {
+#ifdef DEBUG_DMAPPER_SETTINGS_TABLE
+ dmapper_logger->element("unhandled");
+#endif
+ }
+ }
+}
+
+void SettingsTable::lcl_entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ // printf ( "SettingsTable::entry\n");
+ ref->resolve(*this);
+}
+//returns default TabStop in 1/100th mm
+
+/*-- 22.09.2009 10:29:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+int SettingsTable::GetDefaultTabStop() const
+{
+ return ConversionHelper::convertTwipToMM100( m_pImpl->m_nDefaultTabStop );
+}
+
+void SettingsTable::ApplyProperties( uno::Reference< text::XTextDocument > xDoc )
+{
+ uno::Reference< beans::XPropertySet> xDocProps( xDoc, uno::UNO_QUERY );
+
+ // Record changes value
+ xDocProps->setPropertyValue( ::rtl::OUString::createFromAscii( "RecordChanges" ), uno::makeAny( m_pImpl->m_bRecordChanges ) );
+}
+
+
+}//namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/SettingsTable.hxx b/writerfilter/source/dmapper/SettingsTable.hxx
new file mode 100644
index 000000000000..64034c83559b
--- /dev/null
+++ b/writerfilter/source/dmapper/SettingsTable.hxx
@@ -0,0 +1,83 @@
+/*************************************************************************
+ *
+ * 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: SettingsTable.hxx,v $
+ * $Revision: 1.3 $
+ *
+ * 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_SETTINGSTABLE_HXX
+#define INCLUDED_SETTINGSTABLE_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <map>
+
+namespace com{ namespace sun{ namespace star{
+namespace lang{
+class XMultiServiceFactory;
+struct Locale;
+}
+}}}
+
+namespace writerfilter {
+namespace dmapper
+{
+class DomainMapper;
+
+using namespace std;
+
+struct SettingsTable_Impl;
+
+class WRITERFILTER_DLLPRIVATE SettingsTable : public LoggedProperties, public LoggedTable
+{
+ SettingsTable_Impl *m_pImpl;
+
+ public:
+ SettingsTable( DomainMapper& rDMapper,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xTextFactory
+ );
+ virtual ~SettingsTable();
+
+ //returns default TabStop in 1/100th mm
+ int GetDefaultTabStop() const;
+
+ void ApplyProperties( uno::Reference< text::XTextDocument > xDoc );
+
+ private:
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+ // Table
+ virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+};
+typedef boost::shared_ptr< SettingsTable > SettingsTablePtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
new file mode 100644
index 000000000000..a0d5039a155b
--- /dev/null
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -0,0 +1,1360 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <StyleSheetTable.hxx>
+#include <dmapper/DomainMapper.hxx>
+#include <NumberingManager.hxx>
+#include <ConversionHelper.hxx>
+#include <TblStylePrHandler.hxx>
+#include <BorderHandler.hxx>
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <vector>
+#include <com/sun/star/beans/XMultiPropertySet.hpp>
+#include <com/sun/star/beans/XPropertyState.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/text/XChapterNumberingSupplier.hpp>
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/style/XStyleFamiliesSupplier.hpp>
+#include <com/sun/star/style/XStyle.hpp>
+#include <com/sun/star/text/WritingMode.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <map>
+#include <stdio.h>
+#include <rtl/ustrbuf.hxx>
+
+#include <dmapperLoggers.hxx>
+
+using namespace ::com::sun::star;
+namespace writerfilter {
+namespace dmapper
+{
+
+typedef ::std::map< ::rtl::OUString, ::rtl::OUString> StringPairMap_t;
+
+/*-- 21.06.2006 07:34:44---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+StyleSheetEntry::StyleSheetEntry() :
+ sStyleIdentifierI()
+ ,sStyleIdentifierD()
+ ,bIsDefaultStyle(false)
+ ,bInvalidHeight(false)
+ ,bHasUPE(false)
+ ,nStyleTypeCode(STYLE_TYPE_UNKNOWN)
+ ,sBaseStyleIdentifier()
+ ,sNextStyleIdentifier()
+ ,pProperties(new StyleSheetPropertyMap)
+{
+#if OSL_DEBUG_LEVEL > 1
+ nStyleTypeCode = STYLE_TYPE_PARA;
+#endif
+}
+
+StyleSheetEntry::~StyleSheetEntry()
+{
+}
+
+TableStyleSheetEntry::TableStyleSheetEntry( StyleSheetEntry& rEntry, StyleSheetTable* pStyles ):
+ StyleSheetEntry( ),
+ m_pStyleSheet( pStyles )
+{
+
+ bIsDefaultStyle = rEntry.bIsDefaultStyle;
+ bInvalidHeight = rEntry.bInvalidHeight;
+ bHasUPE = rEntry.bHasUPE;
+ nStyleTypeCode = STYLE_TYPE_TABLE;
+ sBaseStyleIdentifier = rEntry.sBaseStyleIdentifier;
+ sNextStyleIdentifier = rEntry.sNextStyleIdentifier;
+ sStyleName = rEntry.sStyleName;
+ sStyleName1 = rEntry.sStyleName1;
+
+ m_nColBandSize = 1;
+ m_nRowBandSize = 1;
+}
+
+TableStyleSheetEntry::~TableStyleSheetEntry( )
+{
+ m_pStyleSheet = NULL;
+}
+
+void TableStyleSheetEntry::AddTblStylePr( TblStyleType nType, PropertyMapPtr pProps )
+{
+ static TblStyleType pTypesToFix[] =
+ {
+ TBL_STYLE_FIRSTROW,
+ TBL_STYLE_LASTROW,
+ TBL_STYLE_FIRSTCOL,
+ TBL_STYLE_LASTCOL
+ };
+
+ static PropertyIds pPropsToCheck[] =
+ {
+ PROP_BOTTOM_BORDER,
+ PROP_TOP_BORDER,
+ PROP_RIGHT_BORDER,
+ PROP_LEFT_BORDER
+ };
+
+ int i = 0;
+ while ( i < 4 )
+ {
+ if ( nType == pTypesToFix[i] )
+ {
+ PropertyIds nChecked = pPropsToCheck[i];
+ PropertyMap::iterator pCheckedIt = pProps->find( PropertyDefinition( nChecked, false ) );
+
+ PropertyIds nInsideProp = ( i < 2 ) ? META_PROP_HORIZONTAL_BORDER : META_PROP_VERTICAL_BORDER;
+ PropertyMap::iterator pInsideIt = pProps->find( PropertyDefinition( nInsideProp, false ) );
+
+ bool bHasChecked = pCheckedIt != pProps->end( );
+ bool bHasInside = pInsideIt != pProps->end( );
+
+ if ( bHasChecked && bHasInside )
+ {
+ // In this case, remove the inside border
+ pProps->erase( pInsideIt );
+ }
+
+ i = 4; // Stop looping stupidly
+ }
+ i++;
+ }
+
+ // Append the tblStylePr
+ m_aStyles[nType] = pProps;
+}
+
+PropertyMapPtr TableStyleSheetEntry::GetProperties( sal_Int32 nMask, StyleSheetEntryDequePtr pStack )
+{
+ PropertyMapPtr pProps( new PropertyMap );
+
+ // First get the parent properties
+ StyleSheetEntryPtr pEntry = m_pStyleSheet->FindParentStyleSheet( sBaseStyleIdentifier );
+
+ if ( pEntry.get( ) )
+ {
+ if (pStack.get() == NULL)
+ pStack.reset(new StyleSheetEntryDeque());
+
+ StyleSheetEntryDeque::const_iterator aIt = find(pStack->begin(), pStack->end(), pEntry);
+
+ if (aIt != pStack->end())
+ {
+ pStack->push_back(pEntry);
+
+ TableStyleSheetEntry* pParent = static_cast<TableStyleSheetEntry *>( pEntry.get( ) );
+ pProps->insert( pParent->GetProperties( nMask ), pStack );
+
+ pStack->pop_back();
+ }
+ }
+
+ // And finally get the mask ones
+ pProps->insert( GetLocalPropertiesFromMask( nMask ) );
+
+ return pProps;
+}
+
+void lcl_mergeProps( PropertyMapPtr pToFill, PropertyMapPtr pToAdd, TblStyleType nStyleId )
+{
+ static PropertyIds pPropsToCheck[] =
+ {
+ PROP_BOTTOM_BORDER,
+ PROP_TOP_BORDER,
+ PROP_RIGHT_BORDER,
+ PROP_LEFT_BORDER,
+ };
+
+ bool pRemoveInside[] =
+ {
+ ( nStyleId == TBL_STYLE_FIRSTROW ),
+ ( nStyleId == TBL_STYLE_LASTROW ),
+ ( nStyleId == TBL_STYLE_LASTCOL ),
+ ( nStyleId == TBL_STYLE_FIRSTCOL )
+ };
+
+ for ( unsigned i = 0 ; i != sizeof(pPropsToCheck) / sizeof(PropertyIds); i++ )
+ {
+ PropertyIds nId = pPropsToCheck[i];
+ PropertyDefinition aProp( nId, false );
+ PropertyMap::iterator pIt = pToAdd->find( aProp );
+
+ if ( pIt != pToAdd->end( ) )
+ {
+ PropertyMap::iterator pDestIt = pToFill->find( aProp );
+
+ if ( pRemoveInside[i] )
+ {
+ // Remove the insideH and insideV depending on the cell pos
+ PropertyIds nInsideProp = ( i < 2 ) ? META_PROP_HORIZONTAL_BORDER : META_PROP_VERTICAL_BORDER;
+ pDestIt = pToFill->find( PropertyDefinition( nInsideProp, false ) );
+ if ( pDestIt != pToFill->end( ) )
+ pToFill->erase( pDestIt );
+ }
+ }
+ }
+
+ pToFill->insert( pToAdd );
+}
+
+PropertyMapPtr TableStyleSheetEntry::GetLocalPropertiesFromMask( sal_Int32 nMask )
+{
+ // Order from right to left
+ static TblStyleType aBitsOrder[] =
+ {
+ TBL_STYLE_SWCELL,
+ TBL_STYLE_SECELL,
+ TBL_STYLE_NWCELL,
+ TBL_STYLE_NECELL,
+ TBL_STYLE_BAND2HORZ,
+ TBL_STYLE_BAND1HORZ,
+ TBL_STYLE_BAND2VERT,
+ TBL_STYLE_BAND1VERT,
+ TBL_STYLE_LASTCOL,
+ TBL_STYLE_FIRSTCOL,
+ TBL_STYLE_LASTROW,
+ TBL_STYLE_FIRSTROW,
+ TBL_STYLE_UNKNOWN
+ };
+
+ // Get the properties applying according to the mask
+ PropertyMapPtr pProps( new PropertyMap( ) );
+ short nBit = 0;
+ do
+ {
+ TblStyleType nStyleId = aBitsOrder[nBit];
+ TblStylePrs::iterator pIt = m_aStyles.find( nStyleId );
+
+ short nTestBit = 1 << nBit;
+ sal_Int32 nBitMask = sal_Int32( nTestBit );
+ if ( ( nMask & nBitMask ) && ( pIt != m_aStyles.end( ) ) )
+ lcl_mergeProps( pProps, pIt->second, nStyleId );
+
+ nBit++;
+ }
+ while ( nBit < 13 );
+
+ return pProps;
+}
+
+/*-- 06.02.2008 11:30:46---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+struct ListCharStylePropertyMap_t
+{
+ ::rtl::OUString sCharStyleName;
+ PropertyValueVector_t aPropertyValues;
+
+ ListCharStylePropertyMap_t(const ::rtl::OUString& rCharStyleName, const PropertyValueVector_t& rPropertyValues):
+ sCharStyleName( rCharStyleName ),
+ aPropertyValues( rPropertyValues )
+ {}
+};
+typedef std::vector< ListCharStylePropertyMap_t > ListCharStylePropertyVector_t;
+/*-- 19.06.2006 12:04:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+struct StyleSheetTable_Impl
+{
+ DomainMapper& m_rDMapper;
+ uno::Reference< text::XTextDocument> m_xTextDocument;
+ uno::Reference< beans::XPropertySet> m_xTextDefaults;
+ std::vector< StyleSheetEntryPtr > m_aStyleSheetEntries;
+ StyleSheetEntryPtr m_pCurrentEntry;
+ PropertyMapPtr m_pDefaultParaProps, m_pDefaultCharProps;
+ PropertyMapPtr m_pCurrentProps;
+ StringPairMap_t m_aStyleNameMap;
+ ListCharStylePropertyVector_t m_aListCharStylePropertyVector;
+
+
+ StyleSheetTable_Impl(DomainMapper& rDMapper, uno::Reference< text::XTextDocument> xTextDocument);
+
+ ::rtl::OUString HasListCharStyle( const PropertyValueVector_t& rCharProperties );
+};
+/*-- 15.11.2007 08:30:02---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+StyleSheetTable_Impl::StyleSheetTable_Impl(DomainMapper& rDMapper, uno::Reference< text::XTextDocument> xTextDocument ) :
+ m_rDMapper( rDMapper ),
+ m_xTextDocument( xTextDocument ),
+ m_pCurrentEntry(),
+ m_pDefaultParaProps(new PropertyMap),
+ m_pDefaultCharProps(new PropertyMap)
+{
+ //set font height default to 10pt
+ uno::Any aVal = uno::makeAny( double(10.) );
+ m_pDefaultCharProps->Insert( PROP_CHAR_HEIGHT, true, aVal );
+ m_pDefaultCharProps->Insert( PROP_CHAR_HEIGHT_ASIAN, true, aVal );
+ m_pDefaultCharProps->Insert( PROP_CHAR_HEIGHT_COMPLEX, true, aVal );
+}
+/*-- 06.02.2008 11:45:21---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString StyleSheetTable_Impl::HasListCharStyle( const PropertyValueVector_t& rPropValues )
+{
+ ::rtl::OUString sRet;
+ ListCharStylePropertyVector_t::const_iterator aListVectorIter = m_aListCharStylePropertyVector.begin();
+ while( aListVectorIter != m_aListCharStylePropertyVector.end() )
+ {
+ //if size is identical
+ if( aListVectorIter->aPropertyValues.size() == rPropValues.size() )
+ {
+ bool bBreak = false;
+ //then search for all contained properties
+ PropertyValueVector_t::const_iterator aList1Iter = rPropValues.begin();
+ while( aList1Iter != rPropValues.end() && !bBreak)
+ {
+ //find the property
+ bool bElementFound = false;
+ PropertyValueVector_t::const_iterator aList2Iter = aListVectorIter->aPropertyValues.begin();
+ while( aList2Iter != aListVectorIter->aPropertyValues.end() && !bBreak )
+ {
+ if( aList2Iter->Name == aList1Iter->Name )
+ {
+ bElementFound = true;
+ if( aList2Iter->Value != aList1Iter->Value )
+ bBreak = true;
+ break;
+ }
+ ++aList2Iter;
+ }
+ //set break flag if property hasn't been found
+ if(!bElementFound )
+ {
+ bBreak = true;
+ break;
+ }
+ ++aList1Iter;
+ }
+ if( !bBreak )
+ return aListVectorIter->sCharStyleName;
+ }
+ ++aListVectorIter;
+ }
+ return sRet;
+}
+/*-- 19.06.2006 12:04:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+StyleSheetTable::StyleSheetTable(DomainMapper& rDMapper, uno::Reference< text::XTextDocument> xTextDocument)
+: LoggedProperties(dmapper_logger, "StyleSheetTable")
+, LoggedTable(dmapper_logger, "StyleSheetTable")
+, m_pImpl( new StyleSheetTable_Impl(rDMapper, xTextDocument) )
+{
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+StyleSheetTable::~StyleSheetTable()
+{
+ delete m_pImpl;
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void StyleSheetTable::lcl_attribute(Id Name, Value & val)
+{
+ OSL_ENSURE( m_pImpl->m_pCurrentEntry, "current entry has to be set here");
+ if(!m_pImpl->m_pCurrentEntry)
+ return ;
+ int nIntValue = val.getInt();
+ (void)nIntValue;
+ ::rtl::OUString sValue = val.getString();
+// printf ( "StyleSheetTable::attribute(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)Name, (unsigned int)nIntValue, ::rtl::OUStringToOString(sValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+ /* WRITERFILTERSTATUS: table: StyleSheetTable_attributedata */
+ switch(Name)
+ {
+ case NS_rtf::LN_ISTD:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->m_pCurrentEntry->sStyleIdentifierD = ::rtl::OUString::valueOf(static_cast<sal_Int32>(nIntValue), 16);
+ break;
+ case NS_rtf::LN_STI:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ {
+ ::rtl::OUString tempStyleIdentifier = GetStyleIdFromIndex(static_cast<sal_uInt32>(nIntValue));
+ if (tempStyleIdentifier.getLength())
+ m_pImpl->m_pCurrentEntry->sStyleIdentifierI = tempStyleIdentifier;
+ if (nIntValue == 0 || nIntValue == 65)
+ m_pImpl->m_pCurrentEntry->bIsDefaultStyle = true;
+ }
+ break;
+ case NS_rtf::LN_SGC:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->m_pCurrentEntry->nStyleTypeCode = (StyleType)nIntValue;
+ break;
+ case NS_rtf::LN_ISTDBASE:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ if (static_cast<sal_uInt32>(nIntValue) != 0xfff)
+ m_pImpl->m_pCurrentEntry->sBaseStyleIdentifier = ::rtl::OUString::valueOf(static_cast<sal_Int32>(nIntValue), 16);
+ break;
+ case NS_rtf::LN_ISTDNEXT:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ if (static_cast<sal_uInt32>(nIntValue) != 0xfff)
+ m_pImpl->m_pCurrentEntry->sNextStyleIdentifier = ::rtl::OUString::valueOf(static_cast<sal_Int32>(nIntValue), 16);
+ break;
+ case NS_rtf::LN_FSCRATCH:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FINVALHEIGHT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FHASUPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FMASSCOPY:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_CUPX:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_BCHUPE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FAUTOREDEF:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FHIDDEN:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNUSED8_3:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ //noone seems to care about it
+ break;
+ case NS_rtf::LN_XSTZNAME:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->m_pCurrentEntry->sStyleName1 = sValue;
+ if (m_pImpl->m_pCurrentEntry->sStyleIdentifierI.getLength())
+ m_pImpl->m_pCurrentEntry->sStyleIdentifierI = sValue;
+ break;
+ case NS_rtf::LN_XSTZNAME1:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->m_pCurrentEntry->sStyleName = sValue;
+ if (m_pImpl->m_pCurrentEntry->sStyleIdentifierI.getLength())
+ m_pImpl->m_pCurrentEntry->sStyleIdentifierI = sValue;
+ break;
+ case NS_rtf::LN_UPX:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ resolveAttributeProperties(val);
+ break;
+ case NS_ooxml::LN_CT_Style_type:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ {
+/* defaults should be set at the service "com.sun.star.text.Defaults"
+ if (nIntValue == 1)
+ *(m_pImpl->m_pCurrentEntry->pProperties) = *(m_pImpl->m_pDefaultParaProps);
+ else if (nIntValue == 2)
+ *(m_pImpl->m_pCurrentEntry->pProperties) = *(m_pImpl->m_pDefaultCharProps);*/
+ StyleType nType = ( StyleType ) nIntValue;
+ if ( nType == STYLE_TYPE_TABLE )
+ {
+ StyleSheetEntryPtr pEntry = m_pImpl->m_pCurrentEntry;
+ TableStyleSheetEntryPtr pTableEntry( new TableStyleSheetEntry( *pEntry.get( ), this ) );
+ m_pImpl->m_pCurrentEntry = pTableEntry;
+ }
+ else
+ m_pImpl->m_pCurrentEntry->nStyleTypeCode = (StyleType)nIntValue;
+ }
+ break;
+ case NS_ooxml::LN_CT_Style_default:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->m_pCurrentEntry->bIsDefaultStyle = (nIntValue != 0);
+ break;
+ case NS_ooxml::LN_CT_Style_customStyle:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_ooxml::LN_CT_Style_styleId:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->m_pCurrentEntry->sStyleIdentifierI = sValue;
+ m_pImpl->m_pCurrentEntry->sStyleIdentifierD = sValue;
+ break;
+ case NS_ooxml::LN_CT_TblWidth_w:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ dynamic_cast< StyleSheetPropertyMap* >( m_pImpl->m_pCurrentEntry->pProperties.get() )->SetCT_TblWidth_w( nIntValue );
+ break;
+ case NS_ooxml::LN_CT_TblWidth_type:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ dynamic_cast< StyleSheetPropertyMap* >( m_pImpl->m_pCurrentEntry->pProperties.get() )->SetCT_TblWidth_type( nIntValue );
+ break;
+ default:
+ {
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->element("unhandled");
+#endif
+ }
+ break;
+ }
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void StyleSheetTable::lcl_sprm(Sprm & rSprm)
+{
+ sal_uInt32 nSprmId = rSprm.getId();
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = pValue.get() ? pValue->getInt() : 0;
+ (void)nIntValue;
+ rtl::OUString sStringValue = pValue.get() ? pValue->getString() : rtl::OUString();
+ //printf ( "StyleSheetTable::sprm(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nSprmId, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+
+ /* WRITERFILTERSTATUS: table: StyleSheetTable_sprm */
+ switch(nSprmId)
+ {
+ case NS_ooxml::LN_CT_Style_name:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ //this is only a UI name!
+ m_pImpl->m_pCurrentEntry->sStyleName = sStringValue;
+ m_pImpl->m_pCurrentEntry->sStyleName1 = sStringValue;
+ break;
+ case NS_ooxml::LN_CT_Style_basedOn:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->m_pCurrentEntry->sBaseStyleIdentifier = sStringValue;
+ break;
+ case NS_ooxml::LN_CT_Style_next:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->m_pCurrentEntry->sNextStyleIdentifier = sStringValue;
+ break;
+ case NS_ooxml::LN_CT_Style_aliases:
+ case NS_ooxml::LN_CT_Style_link:
+ case NS_ooxml::LN_CT_Style_autoRedefine:
+ case NS_ooxml::LN_CT_Style_hidden:
+ case NS_ooxml::LN_CT_Style_uiPriority:
+ case NS_ooxml::LN_CT_Style_semiHidden:
+ case NS_ooxml::LN_CT_Style_unhideWhenUsed:
+ case NS_ooxml::LN_CT_Style_qFormat:
+ case NS_ooxml::LN_CT_Style_locked:
+ case NS_ooxml::LN_CT_Style_personal:
+ case NS_ooxml::LN_CT_Style_personalCompose:
+ case NS_ooxml::LN_CT_Style_personalReply:
+ case NS_ooxml::LN_CT_Style_rsid:
+ case NS_ooxml::LN_CT_Style_trPr:
+ case NS_ooxml::LN_CT_Style_tcPr:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ break;
+ case NS_ooxml::LN_CT_Style_tblPr: //contains table properties
+ case NS_ooxml::LN_CT_Style_tblStylePr: //contains to table properties
+
+ case NS_ooxml::LN_CT_TblPrBase_tblInd: //table properties - at least width value and type
+ case NS_ooxml::LN_EG_RPrBase_rFonts: //table fonts
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ TblStylePrHandlerPtr pTblStylePrHandler( new TblStylePrHandler( m_pImpl->m_rDMapper ) );
+ pProperties->resolve( *pTblStylePrHandler );
+
+ // Add the properties to the table style
+ TblStyleType nType = pTblStylePrHandler->getType( );
+ PropertyMapPtr pProps = pTblStylePrHandler->getProperties( );
+ StyleSheetEntry * pEntry = m_pImpl->m_pCurrentEntry.get();
+
+ if (nType == TBL_STYLE_UNKNOWN)
+ {
+ pEntry->pProperties->insert(pProps);
+ }
+ else
+ {
+ TableStyleSheetEntry * pTableEntry = dynamic_cast<TableStyleSheetEntry*>( pEntry );
+ if (pTableEntry != NULL)
+ pTableEntry->AddTblStylePr( nType, pProps );
+ }
+ }
+ break;
+ }
+ case NS_ooxml::LN_CT_PPrDefault_pPr:
+ case NS_ooxml::LN_CT_DocDefaults_pPrDefault:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pDefaultParaProps );
+ m_pImpl->m_rDMapper.sprm( rSprm );
+ m_pImpl->m_rDMapper.PopStyleSheetProperties();
+ applyDefaults( true );
+ break;
+ case NS_ooxml::LN_CT_RPrDefault_rPr:
+ case NS_ooxml::LN_CT_DocDefaults_rPrDefault:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pDefaultCharProps );
+ m_pImpl->m_rDMapper.sprm( rSprm );
+ m_pImpl->m_rDMapper.PopStyleSheetProperties();
+ applyDefaults( false );
+ break;
+ case NS_ooxml::LN_CT_TblPrBase_jc: //table alignment - row properties!
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ m_pImpl->m_pCurrentEntry->pProperties->Insert( PROP_HORI_ORIENT, false,
+ uno::makeAny( ConversionHelper::convertTableJustification( nIntValue )));
+ break;
+ case NS_ooxml::LN_CT_TrPrBase_jc: //table alignment - row properties!
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ dynamic_cast< StyleSheetPropertyMap* >( m_pImpl->m_pCurrentEntry->pProperties.get() )->SetCT_TrPrBase_jc(nIntValue);
+ break;
+ case NS_ooxml::LN_CT_TblPrBase_tblBorders: //table borders, might be defined in table style
+ /* WRITERFILTERSTATUS: done: 100, planned: 0, spent: 0 */
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ BorderHandlerPtr pBorderHandler( new BorderHandler(m_pImpl->m_rDMapper.IsOOXMLImport()) );
+ pProperties->resolve(*pBorderHandler);
+ m_pImpl->m_pCurrentEntry->pProperties->insert( pBorderHandler->getProperties(), true );
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_TblPrBase_tblStyleRowBandSize:
+ case NS_ooxml::LN_CT_TblPrBase_tblStyleColBandSize:
+ {
+ StyleSheetEntry* pEntry = m_pImpl->m_pCurrentEntry.get( );
+ TableStyleSheetEntry *pTEntry = static_cast<TableStyleSheetEntry*>( pEntry );
+ if ( pTEntry )
+ {
+ if ( nSprmId == NS_ooxml::LN_CT_TblPrBase_tblStyleRowBandSize )
+ pTEntry->m_nRowBandSize = nIntValue;
+ else
+ pTEntry->m_nColBandSize = nIntValue;
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_TblPrBase_tblCellMar:
+ //no cell margins in styles
+ 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 );
+
+ PropertyMapPtr pProps(new PropertyMap());
+ m_pImpl->m_rDMapper.sprmWithProps( rSprm, pProps );
+
+ m_pImpl->m_pCurrentEntry->pProperties->insert(pProps);
+
+ m_pImpl->m_rDMapper.PopStyleSheetProperties( );
+ }
+ }
+ break;
+}
+}
+/*-- 19.06.2006 12:04:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void StyleSheetTable::lcl_entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ //create a new style entry
+ // printf("StyleSheetTable::entry(...)\n");
+ OSL_ENSURE( !m_pImpl->m_pCurrentEntry, "current entry has to be NULL here");
+ StyleSheetEntryPtr pNewEntry( new StyleSheetEntry );
+ m_pImpl->m_pCurrentEntry = pNewEntry;
+ m_pImpl->m_rDMapper.PushStyleSheetProperties( m_pImpl->m_pCurrentEntry->pProperties );
+ ref->resolve(*this);
+ //append it to the table
+ m_pImpl->m_rDMapper.PopStyleSheetProperties();
+ if( !m_pImpl->m_rDMapper.IsOOXMLImport() || m_pImpl->m_pCurrentEntry->sStyleName.getLength() >0)
+ {
+ m_pImpl->m_pCurrentEntry->sConvertedStyleName = ConvertStyleName( m_pImpl->m_pCurrentEntry->sStyleName );
+ m_pImpl->m_aStyleSheetEntries.push_back( m_pImpl->m_pCurrentEntry );
+ }
+ else
+ {
+ //TODO: this entry contains the default settings - they have to be added to the settings
+ }
+
+ StyleSheetEntryPtr pEmptyEntry;
+ m_pImpl->m_pCurrentEntry = pEmptyEntry;
+}
+/*-- 21.06.2006 15:34:49---------------------------------------------------
+ sorting helper
+ -----------------------------------------------------------------------*/
+typedef std::vector< beans::PropertyValue > _PropValVector;
+class PropValVector : public _PropValVector
+{
+public:
+ PropValVector(){}
+
+ void Insert( beans::PropertyValue aVal );
+ uno::Sequence< uno::Any > getValues();
+ uno::Sequence< ::rtl::OUString > getNames();
+};
+void PropValVector::Insert( beans::PropertyValue aVal )
+{
+ _PropValVector::iterator aIt = begin();
+ while(aIt != end())
+ {
+ if(aIt->Name > aVal.Name)
+ {
+ insert( aIt, aVal );
+ return;
+ }
+ ++aIt;
+ }
+ push_back( aVal );
+}
+uno::Sequence< uno::Any > PropValVector::getValues()
+{
+ uno::Sequence< uno::Any > aRet( size() );
+ uno::Any* pValues = aRet.getArray();
+ sal_Int32 nVal = 0;
+ _PropValVector::iterator aIt = begin();
+ while(aIt != end())
+ {
+ pValues[nVal++] = aIt->Value;
+ ++aIt;
+ }
+ return aRet;
+}
+uno::Sequence< ::rtl::OUString > PropValVector::getNames()
+{
+ uno::Sequence< ::rtl::OUString > aRet( size() );
+ ::rtl::OUString* pNames = aRet.getArray();
+ sal_Int32 nVal = 0;
+ _PropValVector::iterator aIt = begin();
+ while(aIt != end())
+ {
+ pNames[nVal++] = aIt->Name;
+ ++aIt;
+ }
+ return aRet;
+}
+/*-- 21.06.2006 13:35:48---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void StyleSheetTable::ApplyStyleSheets( FontTablePtr rFontTable )
+{
+ try
+ {
+ uno::Reference< style::XStyleFamiliesSupplier > xStylesSupplier( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
+ uno::Reference< lang::XMultiServiceFactory > xDocFactory( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
+ uno::Reference< container::XNameAccess > xStyleFamilies = xStylesSupplier->getStyleFamilies();
+ uno::Reference<container::XNameContainer> xCharStyles;
+ uno::Reference<container::XNameContainer> xParaStyles;
+
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ xStyleFamilies->getByName(rPropNameSupplier.GetName( PROP_CHARACTER_STYLES )) >>= xCharStyles;
+ xStyleFamilies->getByName(rPropNameSupplier.GetName( PROP_PARAGRAPH_STYLES )) >>= xParaStyles;
+ if(xCharStyles.is() && xParaStyles.is())
+ {
+ std::vector< StyleSheetEntryPtr >::iterator aIt = m_pImpl->m_aStyleSheetEntries.begin();
+ while( aIt != m_pImpl->m_aStyleSheetEntries.end() )
+ {
+ StyleSheetEntryPtr pEntry = *aIt;
+ if( pEntry->nStyleTypeCode == STYLE_TYPE_CHAR || pEntry->nStyleTypeCode == STYLE_TYPE_PARA )
+ {
+ bool bParaStyle = pEntry->nStyleTypeCode == STYLE_TYPE_PARA;
+ bool bInsert = false;
+ uno::Reference< container::XNameContainer > xStyles = bParaStyle ? xParaStyles : xCharStyles;
+ uno::Reference< style::XStyle > xStyle;
+ ::rtl::OUString sConvertedStyleName = ConvertStyleName( pEntry->sStyleName );
+ if(xStyles->hasByName( sConvertedStyleName ))
+ xStyles->getByName( sConvertedStyleName ) >>= xStyle;
+ else
+ {
+ bInsert = true;
+ xStyle = uno::Reference< style::XStyle >(xDocFactory->createInstance(
+ bParaStyle ?
+ rPropNameSupplier.GetName( PROP_SERVICE_PARA_STYLE ) :
+ rPropNameSupplier.GetName( PROP_SERVICE_CHAR_STYLE )),
+ uno::UNO_QUERY_THROW);
+ }
+ if( pEntry->sBaseStyleIdentifier.getLength() )
+ {
+ try
+ {
+ //TODO: Handle cases where a paragraph <> character style relation is needed
+ StyleSheetEntryPtr pParent = FindStyleSheetByISTD( pEntry->sBaseStyleIdentifier );
+ if (pParent.get() != NULL)
+ xStyle->setParentStyle(ConvertStyleName( pParent->sStyleName ));
+ }
+ catch( const uno::RuntimeException& )
+ {
+ OSL_ENSURE( false, "Styles parent could not be set");
+ }
+ }
+ else if( bParaStyle )
+ {
+ //now it's time to set the default parameters - for paragraph styles
+ //Fonts: Western first entry in font table
+ //CJK: second entry
+ //CTL: third entry, if it exists
+
+ sal_uInt32 nFontCount = rFontTable->size();
+ if( !m_pImpl->m_rDMapper.IsOOXMLImport() && nFontCount > 2 )
+ {
+ uno::Any aTwoHundredFortyTwip = uno::makeAny(12.);
+ // font size to 240 twip (12 pts) for all if not set
+ pEntry->pProperties->Insert(PROP_CHAR_HEIGHT, true, aTwoHundredFortyTwip, false);
+ // western font not already set -> apply first font
+ const FontEntry::Pointer_t pWesternFontEntry(rFontTable->getFontEntry( 0 ));
+ rtl::OUString sWesternFontName = pWesternFontEntry->sFontName;
+ pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME, true, uno::makeAny( sWesternFontName ), false);
+
+ // CJK ... apply second font
+ const FontEntry::Pointer_t pCJKFontEntry(rFontTable->getFontEntry( 2 ));
+ pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME_ASIAN, true, uno::makeAny( pCJKFontEntry->sFontName ), false);
+ pEntry->pProperties->Insert(PROP_CHAR_HEIGHT_ASIAN, true, aTwoHundredFortyTwip, false);
+ // CTL ... apply third font, if available
+ if( nFontCount > 3 )
+ {
+ const FontEntry::Pointer_t pCTLFontEntry(rFontTable->getFontEntry( 3 ));
+ pEntry->pProperties->Insert(PROP_CHAR_FONT_NAME_COMPLEX, true, uno::makeAny( pCTLFontEntry->sFontName ), false);
+ pEntry->pProperties->Insert(PROP_CHAR_HEIGHT_COMPLEX, true, aTwoHundredFortyTwip, false);
+ }
+ }
+ // Widow/Orphan -> set both to two if not already set
+ uno::Any aTwo = uno::makeAny(sal_Int8(2));
+ pEntry->pProperties->Insert(PROP_PARA_WIDOWS, true, aTwo, false);
+ pEntry->pProperties->Insert(PROP_PARA_ORPHANS, true, aTwo, false);
+ // Left-to-right direction if not already set
+ pEntry->pProperties->Insert(PROP_WRITING_MODE, true, uno::makeAny( sal_Int16(text::WritingMode_LR_TB) ), false);
+ // font color COL_AUTO if not already set
+ pEntry->pProperties->Insert(PROP_CHAR_COLOR, true, uno::makeAny( sal_Int32(0xffffffff) ), false);
+ }
+
+ uno::Sequence< beans::PropertyValue > aPropValues = pEntry->pProperties->GetPropertyValues();
+ bool bAddFollowStyle = false;
+ if(bParaStyle && !pEntry->sNextStyleIdentifier.getLength() )
+ {
+ bAddFollowStyle = true;
+ }
+ //remove Left/RightMargin values from TOX heading styles
+ if( bParaStyle )
+ {
+ // Set the outline levels
+ const StyleSheetPropertyMap* pStyleSheetProperties = dynamic_cast<const StyleSheetPropertyMap*>(pEntry ? pEntry->pProperties.get() : 0);
+ if ( pStyleSheetProperties )
+ {
+ aPropValues.realloc( aPropValues.getLength( ) + 1 );
+
+ beans::PropertyValue aLvlVal( rPropNameSupplier.GetName( PROP_OUTLINE_LEVEL ), 0,
+ uno::makeAny( sal_Int16( pStyleSheetProperties->GetOutlineLevel( ) + 1 ) ),
+ beans::PropertyState_DIRECT_VALUE );
+ aPropValues[ aPropValues.getLength( ) - 1 ] = aLvlVal;
+
+ if ( pStyleSheetProperties->GetOutlineLevel( ) == 0 )
+ {
+ aPropValues.realloc( aPropValues.getLength( ) + 1 );
+ beans::PropertyValue aStyleVal( rPropNameSupplier.GetName( PROP_NUMBERING_STYLE_NAME ), 0,
+ uno::makeAny( rtl::OUString::createFromAscii( "" ) ),
+ beans::PropertyState_DIRECT_VALUE );
+ aPropValues[ aPropValues.getLength( ) - 1 ] = aStyleVal;
+ }
+ }
+
+ uno::Reference< beans::XPropertyState >xState( xStyle, uno::UNO_QUERY_THROW );
+ if( sConvertedStyleName.equalsAscii( "Contents Heading" ) ||
+ sConvertedStyleName.equalsAscii( "User Index Heading" ) ||
+ sConvertedStyleName.equalsAscii( "Index Heading" ))
+ {
+ //left margin is set to NULL by default
+ uno::Reference< beans::XPropertyState >xState1( xStyle, uno::UNO_QUERY_THROW );
+ xState1->setPropertyToDefault(rPropNameSupplier.GetName( PROP_PARA_LEFT_MARGIN ));
+ }
+ else if( sConvertedStyleName.equalsAscii( "Text body" ) )
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_PARA_BOTTOM_MARGIN ));
+ else if( sConvertedStyleName.equalsAscii( "Heading 1" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 2" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 3" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 4" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 5" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 6" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 7" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 8" ) ||
+ sConvertedStyleName.equalsAscii( "Heading 9" ) )
+ {
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_WEIGHT ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_WEIGHT_ASIAN ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_WEIGHT_COMPLEX ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_POSTURE ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_POSTURE_ASIAN ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_POSTURE_COMPLEX ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_PROP_HEIGHT ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_PROP_HEIGHT_ASIAN ));
+ xState->setPropertyToDefault(rPropNameSupplier.GetName( PROP_CHAR_PROP_HEIGHT_COMPLEX));
+
+ }
+ }
+
+ if(bAddFollowStyle || aPropValues.getLength())
+ {
+ PropValVector aSortedPropVals;
+ for( sal_Int32 nProp = 0; nProp < aPropValues.getLength(); ++nProp)
+ {
+ // Don't add the style name properties
+ bool bIsParaStyleName = aPropValues[nProp].Name.equalsAscii( "ParaStyleName" );
+ bool bIsCharStyleName = aPropValues[nProp].Name.equalsAscii( "CharStyleName" );
+ if ( !bIsParaStyleName && !bIsCharStyleName )
+ {
+ aSortedPropVals.Insert( aPropValues[nProp] );
+ }
+ }
+ if(bAddFollowStyle)
+ {
+ //find the name of the Next style
+ std::vector< StyleSheetEntryPtr >::iterator aNextStyleIt = m_pImpl->m_aStyleSheetEntries.begin();
+ for( ; aNextStyleIt != m_pImpl->m_aStyleSheetEntries.end(); ++aNextStyleIt )
+ {
+ if( ( *aNextStyleIt )->sStyleName.getLength() &&
+ ( *aNextStyleIt )->sStyleName == pEntry->sNextStyleIdentifier)
+ {
+ beans::PropertyValue aNew;
+ aNew.Name = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("FollowStyle"));
+ aNew.Value = uno::makeAny(ConvertStyleName( ( *aNextStyleIt )->sStyleIdentifierD ));
+ aSortedPropVals.Insert( aNew );
+ break;
+ }
+ }
+ }
+
+ try
+ {
+ uno::Reference< beans::XMultiPropertySet > xMultiPropertySet( xStyle, uno::UNO_QUERY_THROW);
+ xMultiPropertySet->setPropertyValues( aSortedPropVals.getNames(), aSortedPropVals.getValues() );
+ }
+ catch( const lang::WrappedTargetException& rWrapped)
+ {
+ (void) rWrapped;
+ rtl::OString aMessage("Some style properties could not be set");
+#if OSL_DEBUG_LEVEL > 0
+ beans::UnknownPropertyException aUnknownPropertyException;
+
+ if( rWrapped.TargetException >>= aUnknownPropertyException )
+ {
+ aMessage += rtl::OString(": " );
+ ::rtl::OString sTemp;
+ aUnknownPropertyException.Message.convertToString(&sTemp, RTL_TEXTENCODING_ASCII_US, 0 );
+ aMessage += sTemp;
+ }
+#endif
+ OSL_ENSURE( false, aMessage.getStr());
+ }
+ catch( const uno::Exception& rEx)
+ {
+ (void) rEx;
+ OSL_ENSURE( false, "Some style properties could not be set");
+ }
+ }
+ if(bInsert)
+ {
+ xStyles->insertByName( sConvertedStyleName, uno::makeAny( xStyle) );
+ }
+ }
+ ++aIt;
+ }
+ }
+ }
+ catch( uno::Exception& rEx)
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "Styles could not be imported completely");
+ }
+}
+/*-- 22.06.2006 15:56:56---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const StyleSheetEntryPtr StyleSheetTable::FindStyleSheetByISTD(const ::rtl::OUString& sIndex)
+{
+ StyleSheetEntryPtr pRet;
+ for( sal_uInt32 nPos = 0; nPos < m_pImpl->m_aStyleSheetEntries.size(); ++nPos )
+ {
+ if( m_pImpl->m_aStyleSheetEntries[nPos]->sStyleIdentifierD == sIndex)
+ {
+ pRet = m_pImpl->m_aStyleSheetEntries[nPos];
+ break;
+ }
+ }
+ return pRet;
+}
+/*-- 28.12.2007 14:45:45---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const StyleSheetEntryPtr StyleSheetTable::FindStyleSheetByStyleName(const ::rtl::OUString& sIndex)
+{
+ StyleSheetEntryPtr pRet;
+ for( sal_uInt32 nPos = 0; nPos < m_pImpl->m_aStyleSheetEntries.size(); ++nPos )
+ {
+ if( m_pImpl->m_aStyleSheetEntries[nPos]->sStyleName == sIndex)
+ {
+ pRet = m_pImpl->m_aStyleSheetEntries[nPos];
+ break;
+ }
+ }
+ return pRet;
+}
+/*-- 28.12.2007 14:45:45---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const StyleSheetEntryPtr StyleSheetTable::FindStyleSheetByConvertedStyleName(const ::rtl::OUString& sIndex)
+{
+ StyleSheetEntryPtr pRet;
+ for( sal_uInt32 nPos = 0; nPos < m_pImpl->m_aStyleSheetEntries.size(); ++nPos )
+ {
+ if( m_pImpl->m_aStyleSheetEntries[nPos]->sConvertedStyleName == sIndex)
+ {
+ pRet = m_pImpl->m_aStyleSheetEntries[nPos];
+ break;
+ }
+ }
+ return pRet;
+}
+
+/*-- 17.07.2006 11:47:00---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+const StyleSheetEntryPtr StyleSheetTable::FindParentStyleSheet(::rtl::OUString sBaseStyle)
+{
+ if( !sBaseStyle.getLength() )
+ {
+ StyleSheetEntryPtr pEmptyPtr;
+ return pEmptyPtr;
+ }
+ if( m_pImpl->m_pCurrentEntry)
+ sBaseStyle = m_pImpl->m_pCurrentEntry->sBaseStyleIdentifier;
+
+ return FindStyleSheetByISTD( sBaseStyle );
+}
+/*-- 21.12.2006 15:58:23---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+static const sal_Char *aStyleNamePairs[] =
+{
+ "Normal", "Standard",
+ "heading 1", "Heading 1",
+ "heading 2", "Heading 2",
+ "heading 3", "Heading 3",
+ "heading 4", "Heading 4",
+ "heading 5", "Heading 5",
+ "heading 6", "Heading 6",
+ "heading 7", "Heading 7",
+ "heading 8", "Heading 8",
+ "heading 9", "Heading 9",
+ "Heading1", "Heading 1",
+ "Heading2", "Heading 2",
+ "Heading3", "Heading 3",
+ "Heading4", "Heading 4",
+ "Heading5", "Heading 5",
+ "Heading6", "Heading 6",
+ "Heading7", "Heading 7",
+ "Heading8", "Heading 8",
+ "Heading9", "Heading 9",
+ "Heading 1", "Heading 1",
+ "Heading 2", "Heading 2",
+ "Heading 3", "Heading 3",
+ "Heading 4", "Heading 4",
+ "Heading 5", "Heading 5",
+ "Heading 6", "Heading 6",
+ "Heading 7", "Heading 7",
+ "Heading 8", "Heading 8",
+ "Heading 9", "Heading 9",
+ "Index 1", "Index 1",
+ "Index 2", "Index 2",
+ "Index 3", "Index 3",
+ "Index 4", "",
+ "Index 5", "",
+ "Index 6", "",
+ "Index 7", "",
+ "Index 8", "",
+ "Index 9", "",
+ "TOC 1", "Contents 1",
+ "TOC 2", "Contents 2",
+ "TOC 3", "Contents 3",
+ "TOC 4", "Contents 4",
+ "TOC 5", "Contents 5",
+ "TOC 6", "Contents 6",
+ "TOC 7", "Contents 7",
+ "TOC 8", "Contents 8",
+ "TOC 9", "Contents 9",
+ "TOC Heading", "Contents Heading",
+ "TOCHeading", "Contents Heading",
+ "toc 1", "Contents 1",
+ "toc 2", "Contents 2",
+ "toc 3", "Contents 3",
+ "toc 4", "Contents 4",
+ "toc 5", "Contents 5",
+ "toc 6", "Contents 6",
+ "toc 7", "Contents 7",
+ "toc 8", "Contents 8",
+ "toc 9", "Contents 9",
+ "TOC1", "Contents 1",
+ "TOC2", "Contents 2",
+ "TOC3", "Contents 3",
+ "TOC4", "Contents 4",
+ "TOC5", "Contents 5",
+ "TOC6", "Contents 6",
+ "TOC7", "Contents 7",
+ "TOC8", "Contents 8",
+ "TOC9", "Contents 9",
+ "Normal Indent", "",
+ "Footnote Text", "Footnote",
+ "Annotation Text", "",
+ "Header", "Header",
+ "header", "Header",
+ "Footer", "Footer",
+ "footer", "Footer",
+ "Index Heading", "Index Heading",
+ "Caption", "",
+ "Table of Figures", "",
+ "Envelope Address", "Addressee",
+ "Envelope Return", "Sender",
+ "Footnote Reference", "Footnote anchor",
+ "Annotation Reference", "",
+ "Line Number", "Line numbering",
+ "Page Number", "Page Number",
+ "Endnote Reference", "Endnote anchor",
+ "Endnote Text", "Endnote Symbol",
+ "Table of Authorities", "",
+ "Macro Text", "",
+ "TOA Heading", "",
+ "List", "List",
+ "List 2", "",
+ "List 3", "",
+ "List 4", "",
+ "List 5", "",
+ "List Bullet", "",
+ "List Bullet 2", "",
+ "List Bullet 3", "",
+ "List Bullet 4", "",
+ "List Bullet 5", "",
+ "List Number", "",
+ "List Number 2", "",
+ "List Number 3", "",
+ "List Number 4", "",
+ "List Number 5", "",
+ "Title", "Title",
+ "Closing", "",
+ "Signature", "Signature",
+ "Default Paragraph Font", "",
+ "DefaultParagraphFont", "Default Paragraph Font",
+ "Body Text", "Text body",
+ "BodyText", "Text body",
+ "BodyTextIndentItalic", "Text body indent italic",
+ "Body Text Indent", "Text body indent",
+ "BodyTextIndent", "Text body indent",
+ "BodyTextIndent2", "Text body indent2",
+ "List Continue", "",
+ "List Continue 2", "",
+ "List Continue 3", "",
+ "List Continue 4", "",
+ "List Continue 5", "",
+ "Message Header", "",
+ "Subtitle", "Subtitle",
+ "Salutation", "",
+ "Date", "",
+ "Body Text First Indent", "Body Text Indent",
+ "Body Text First Indent 2", "",
+ "Note Heading", "",
+ "Body Text 2", "",
+ "Body Text 3", "",
+ "Body Text Indent 2", "",
+ "Body Text Indent 3", "",
+ "Block Text", "",
+ "Hyperlink", "Internet link",
+ "Followed Hyperlink", "Visited Internet Link",
+ "Strong", "Strong Emphasis",
+ "Emphasis", "Emphasis",
+ "Document Map", "",
+ "Plain Text", "",
+ "NoList", "No List",
+ "AbstractHeading", "Abstract Heading",
+ "AbstractBody", "Abstract Body",
+ "PageNumber", "page number"
+ "TableNormal", "Normal Table",
+ "DocumentMap", "Document Map"
+};
+
+
+::rtl::OUString StyleSheetTable::ConvertStyleName( const ::rtl::OUString& rWWName, bool bExtendedSearch)
+{
+ ::rtl::OUString sRet( rWWName );
+ if( bExtendedSearch )
+ {
+ //search for the rWWName in the IdentifierD of the existing styles and convert the sStyleName member
+ std::vector< StyleSheetEntryPtr >::iterator aIt = m_pImpl->m_aStyleSheetEntries.begin();
+ //TODO: performance issue - put styles list into a map sorted by it's sStyleIdentifierD members
+ while( aIt != m_pImpl->m_aStyleSheetEntries.end() )
+ {
+ if( rWWName == ( *aIt )->sStyleIdentifierD )
+ sRet = ( *aIt )->sStyleName;
+ ++aIt;
+ }
+ }
+ if(!m_pImpl->m_aStyleNameMap.size())
+ {
+ for( sal_uInt32 nPair = 0; nPair < sizeof(aStyleNamePairs) / sizeof( sal_Char*) / 2; ++nPair)
+ {
+ m_pImpl->m_aStyleNameMap.insert( StringPairMap_t::value_type(
+ ::rtl::OUString::createFromAscii(aStyleNamePairs[2 * nPair]),
+ ::rtl::OUString::createFromAscii(aStyleNamePairs[2 * nPair + 1]) ));
+ }
+ }
+ StringPairMap_t::iterator aIt = m_pImpl->m_aStyleNameMap.find( sRet );
+ if(aIt != m_pImpl->m_aStyleNameMap.end() && aIt->second.getLength())
+ sRet = aIt->second;
+ return sRet;
+}
+
+::rtl::OUString StyleSheetTable::GetStyleIdFromIndex(const sal_uInt32 sti)
+{
+ ::rtl::OUString sRet;
+ if (sti >= (sizeof(aStyleNamePairs) / sizeof( sal_Char*) / 2))
+ sRet = ::rtl::OUString();
+ else
+ sRet = ::rtl::OUString::createFromAscii(aStyleNamePairs[2 * sti]);
+ return sRet;
+}
+
+void StyleSheetTable::resolveSprmProps(Sprm & rSprm)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+}
+
+void StyleSheetTable::resolveAttributeProperties(Value & val)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = val.getProperties();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+}
+/*-- 18.07.2007 15:59:34---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void StyleSheetTable::applyDefaults(bool bParaProperties)
+{
+ try{
+ if(!m_pImpl->m_xTextDefaults.is())
+ {
+ m_pImpl->m_xTextDefaults = uno::Reference< beans::XPropertySet>(
+ m_pImpl->m_rDMapper.GetTextFactory()->createInstance(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.text.Defaults"))),
+ uno::UNO_QUERY_THROW );
+ }
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ if( bParaProperties && m_pImpl->m_pDefaultParaProps.get() && m_pImpl->m_pDefaultParaProps->size())
+ {
+ PropertyMap::iterator aMapIter = m_pImpl->m_pDefaultParaProps->begin();
+ for( ; aMapIter != m_pImpl->m_pDefaultParaProps->end(); ++aMapIter )
+ {
+ try
+ {
+ m_pImpl->m_xTextDefaults->setPropertyValue(rPropNameSupplier.GetName( aMapIter->first.eId ), aMapIter->second);
+ }
+ catch( const uno::Exception& )
+ {
+ OSL_ENSURE( false, "setPropertyValue exception");
+ }
+ }
+ }
+ if( !bParaProperties && m_pImpl->m_pDefaultCharProps.get() && m_pImpl->m_pDefaultCharProps->size())
+ {
+ PropertyMap::iterator aMapIter = m_pImpl->m_pDefaultCharProps->begin();
+ for( ; aMapIter != m_pImpl->m_pDefaultCharProps->end(); ++aMapIter )
+ {
+ try
+ {
+ m_pImpl->m_xTextDefaults->setPropertyValue(rPropNameSupplier.GetName( aMapIter->first.eId ), aMapIter->second);
+ }
+ catch( const uno::Exception& )
+ {
+ OSL_ENSURE( false, "setPropertyValue exception");
+ }
+ }
+ }
+ }
+ catch( const uno::Exception& )
+ {
+ }
+}
+/*-- 05.02.2008 10:27:36---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+::rtl::OUString StyleSheetTable::getOrCreateCharStyle( PropertyValueVector_t& rCharProperties )
+{
+ //find out if any of the styles already has the required properties then return it's name
+ ::rtl::OUString sListLabel = m_pImpl->HasListCharStyle(rCharProperties);
+ if( sListLabel.getLength() )
+ return sListLabel;
+ const char cListLabel[] = "ListLabel ";
+ uno::Reference< style::XStyleFamiliesSupplier > xStylesSupplier( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
+ uno::Reference< container::XNameAccess > xStyleFamilies = xStylesSupplier->getStyleFamilies();
+ uno::Reference<container::XNameContainer> xCharStyles;
+ xStyleFamilies->getByName(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CharacterStyles"))) >>= xCharStyles;
+ //search for all character styles with the name sListLabel + <index>
+ sal_Int32 nStyleFound = 0;
+ uno::Sequence< ::rtl::OUString > aStyleNames = xCharStyles->getElementNames();
+ const ::rtl::OUString* pStyleNames = aStyleNames.getConstArray();
+ for( sal_Int32 nStyle = 0; nStyle < aStyleNames.getLength(); ++nStyle )
+ {
+ if( pStyleNames[nStyle].matchAsciiL( cListLabel, sizeof( cListLabel ) - 1 ))
+ {
+ ::rtl::OUString sSuffix = pStyleNames[nStyle].copy( sizeof( cListLabel ) - 1 );
+ sal_Int32 nSuffix = sSuffix.toInt32();
+ if( nSuffix > 0 )
+ {
+ if( nSuffix > nStyleFound )
+ nStyleFound = nSuffix;
+ }
+ }
+ }
+ sListLabel = ::rtl::OUString::createFromAscii( cListLabel );
+ sListLabel += ::rtl::OUString::valueOf( ++nStyleFound );
+ //create a new one otherwise
+ uno::Reference< lang::XMultiServiceFactory > xDocFactory( m_pImpl->m_xTextDocument, uno::UNO_QUERY_THROW );
+ PropertyNameSupplier& rPropNameSupplier = PropertyNameSupplier::GetPropertyNameSupplier();
+ try
+ {
+ uno::Reference< style::XStyle > xStyle( xDocFactory->createInstance(
+ rPropNameSupplier.GetName( PROP_SERVICE_CHAR_STYLE )), uno::UNO_QUERY_THROW);
+ //uno::Reference< container::XNamed >xNamed( xStyle, uno::UNO_QUERY_THROW );
+ //xNamed->setName( sListLabel );
+ uno::Reference< beans::XPropertySet > xStyleProps(xStyle, uno::UNO_QUERY_THROW );
+ PropertyValueVector_t::const_iterator aCharPropIter = rCharProperties.begin();
+ while( aCharPropIter != rCharProperties.end())
+ {
+ try
+ {
+ xStyleProps->setPropertyValue( aCharPropIter->Name, aCharPropIter->Value );
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "Exception in StyleSheetTable::getOrCreateCharStyle - Style::setPropertyValue");
+ }
+ ++aCharPropIter;
+ }
+ xCharStyles->insertByName( sListLabel, uno::makeAny( xStyle) );
+ m_pImpl->m_aListCharStylePropertyVector.push_back( ListCharStylePropertyMap_t( sListLabel, rCharProperties ));
+ }
+ catch( const uno::Exception& rEx )
+ {
+ (void)rEx;
+ OSL_ENSURE( false, "Exception in StyleSheetTable::getOrCreateCharStyle");
+ }
+
+ return sListLabel;
+}
+
+}//namespace dmapper
+}//namespace writerfilter
diff --git a/writerfilter/source/dmapper/StyleSheetTable.hxx b/writerfilter/source/dmapper/StyleSheetTable.hxx
new file mode 100644
index 000000000000..f6a8b44efa5d
--- /dev/null
+++ b/writerfilter/source/dmapper/StyleSheetTable.hxx
@@ -0,0 +1,158 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_STYLESHEETTABLE_HXX
+#define INCLUDED_STYLESHEETTABLE_HXX
+
+#include "TblStylePrHandler.hxx"
+
+#include <WriterFilterDllApi.hxx>
+#include <dmapper/DomainMapper.hxx>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <PropertyMap.hxx>
+#include <FontTable.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+
+namespace com{ namespace sun { namespace star { namespace text{
+ class XTextDocument;
+}}}}
+
+
+namespace writerfilter {
+namespace dmapper
+{
+
+
+enum StyleType
+{
+ STYLE_TYPE_UNKNOWN,
+ STYLE_TYPE_PARA,
+ STYLE_TYPE_CHAR,
+ STYLE_TYPE_TABLE,
+ STYLE_LIST
+};
+
+struct StyleSheetTable_Impl;
+class StyleSheetEntry
+{
+public:
+ ::rtl::OUString sStyleIdentifierI;
+ ::rtl::OUString sStyleIdentifierD;
+ bool bIsDefaultStyle;
+ bool bInvalidHeight;
+ bool bHasUPE; //universal property expansion
+ StyleType nStyleTypeCode; //sgc
+ ::rtl::OUString sBaseStyleIdentifier;
+ ::rtl::OUString sNextStyleIdentifier;
+ ::rtl::OUString sStyleName;
+ ::rtl::OUString sStyleName1;
+ PropertyMapPtr pProperties;
+ ::rtl::OUString sConvertedStyleName;
+
+ StyleSheetEntry();
+ virtual ~StyleSheetEntry();
+};
+
+typedef boost::shared_ptr<StyleSheetEntry> StyleSheetEntryPtr;
+typedef ::std::deque<StyleSheetEntryPtr> StyleSheetEntryDeque;
+typedef boost::shared_ptr<StyleSheetEntryDeque> StyleSheetEntryDequePtr;
+
+class DomainMapper;
+class StyleSheetTable :
+ public LoggedProperties,
+ public LoggedTable
+{
+ StyleSheetTable_Impl *m_pImpl;
+
+public:
+ StyleSheetTable( DomainMapper& rDMapper,
+ ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextDocument> xTextDocument );
+ virtual ~StyleSheetTable();
+
+ void ApplyStyleSheets( FontTablePtr rFontTable );
+ const StyleSheetEntryPtr FindStyleSheetByISTD(const ::rtl::OUString& sIndex);
+ const StyleSheetEntryPtr FindStyleSheetByStyleName(const ::rtl::OUString& rIndex);
+ const StyleSheetEntryPtr FindStyleSheetByConvertedStyleName(const ::rtl::OUString& rIndex);
+ // returns the parent of the one with the given name - if empty the parent of the current style sheet is returned
+ const StyleSheetEntryPtr FindParentStyleSheet(::rtl::OUString sBaseStyle);
+
+ ::rtl::OUString ConvertStyleName( const ::rtl::OUString& rWWName, bool bExtendedSearch = false );
+ ::rtl::OUString GetStyleIdFromIndex(const sal_uInt32 sti);
+
+ ::rtl::OUString getOrCreateCharStyle( PropertyValueVector_t& rCharProperties );
+
+private:
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+ // Table
+ virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ void resolveAttributeProperties(Value & val);
+ void resolveSprmProps(Sprm & sprm_);
+ void applyDefaults(bool bParaProperties);
+};
+typedef boost::shared_ptr< StyleSheetTable > StyleSheetTablePtr;
+
+
+class WRITERFILTER_DLLPRIVATE TableStyleSheetEntry :
+ public StyleSheetEntry
+{
+private:
+ typedef std::map<TblStyleType, PropertyMapPtr> TblStylePrs;
+
+ StyleSheetTable* m_pStyleSheet;
+ TblStylePrs m_aStyles;
+
+public:
+
+ short m_nColBandSize;
+ short m_nRowBandSize;
+
+ // Adds a new tblStylePr to the table style entry. This method
+ // fixes some possible properties conflicts, like borders ones.
+ void AddTblStylePr( TblStyleType nType, PropertyMapPtr pProps );
+
+ // Gets all the properties
+ // + corresponding to the mask,
+ // + from the parent styles
+ //
+ // @param mask mask describing which properties to return
+ // @param pStack already processed StyleSheetEntries
+ PropertyMapPtr GetProperties( sal_Int32 nMask, StyleSheetEntryDequePtr pStack = StyleSheetEntryDequePtr());
+
+ TableStyleSheetEntry( StyleSheetEntry& aEntry, StyleSheetTable* pStyles );
+ virtual ~TableStyleSheetEntry( );
+
+protected:
+ PropertyMapPtr GetLocalPropertiesFromMask( sal_Int32 nMask );
+};
+typedef boost::shared_ptr<TableStyleSheetEntry> TableStyleSheetEntryPtr;
+
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/TDefTableHandler.cxx b/writerfilter/source/dmapper/TDefTableHandler.cxx
new file mode 100644
index 000000000000..fd63fe378c76
--- /dev/null
+++ b/writerfilter/source/dmapper/TDefTableHandler.cxx
@@ -0,0 +1,326 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <TDefTableHandler.hxx>
+#include <PropertyMap.hxx>
+#include <ConversionHelper.hxx>
+#include <ooxml/resourceids.hxx>
+#include <doctok/resourceids.hxx>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <com/sun/star/text/TableColumnSeparator.hpp>
+#include <com/sun/star/text/VertOrientation.hpp>
+
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+TDefTableHandler::TDefTableHandler(bool bOOXML) :
+LoggedProperties(dmapper_logger, "TDefTableHandler"),
+m_nLineWidth(0),
+m_nLineType(0),
+m_nLineColor(0),
+m_nLineDistance(0),
+m_bOOXML( bOOXML )
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+TDefTableHandler::~TDefTableHandler()
+{
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void TDefTableHandler::lcl_attribute(Id rName, Value & rVal)
+{
+ sal_Int32 nIntValue = rVal.getInt();
+ (void)nIntValue;
+ (void)rName;
+ /* WRITERFILTERSTATUS: table: TDefTable_attributedata */
+ switch( rName )
+ {
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_cellx:
+ // nIntValue contains the vert. line position
+ //TODO: nIntValue is wrong for negative values!
+ if( nIntValue > 0x7fff )
+ nIntValue -= 0xffff;
+ m_aCellBorderPositions.push_back( ConversionHelper::convertTwipToMM100( nIntValue ) );
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_tc:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rVal.getProperties();
+ if( pProperties.get())
+ {
+ pProperties->resolve( *this );
+ }
+ }
+ break;
+ //from LN_tc
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FFIRSTMERGED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FMERGED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FVERTICAL:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FBACKWARD:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FROTATEFONT:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FVERTMERGE:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FVERTRESTART:
+ break;
+ /* WRITERFILTERSTATUS: done: 50, planned: 0, spent: 0 */
+ case NS_rtf::LN_VERTALIGN:
+ //TODO: m_aCellVertAlign is just a temporary solution! 0 - top 1 - center 2 - bottom
+ m_aCellVertAlign.push_back( nIntValue );
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FUNUSED:
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_CellPrefferedSize:
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCTOP:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCLEFT:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCBOTTOM:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCRIGHT:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rVal.getProperties();
+ localResolve( rName, pProperties );
+ }
+ break;
+ //from LN_BRCXXXX - handled within the BorderHandler
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_DPTLINEWIDTH: // 0x2871
+ // width of a single line in 1/8 pt, max of 32 pt -> twip * 5 / 2.
+ m_nLineWidth = ConversionHelper::convertTwipToMM100( nIntValue * 5 / 2 );
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCTYPE: // 0x2872
+ m_nLineType = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_Border_color:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_ICO: // 0x2873
+ m_nLineColor = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_DPTSPACE: // 0x2874
+ m_nLineDistance = nIntValue;
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FSHADOW: // 0x2875
+ //if 1 then line has shadow - unsupported
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_FFRAME: // 0x2876
+ /* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+ case NS_rtf::LN_UNUSED2_15: // 0x2877
+ // ignored
+ break;
+ case NS_ooxml::LN_CT_Border_themeColor:
+ case NS_ooxml::LN_CT_Border_themeTint:
+ case NS_ooxml::LN_CT_Border_themeShade:
+ // ignored
+ break;
+ default:
+ OSL_ENSURE(false, "unknown attribute");
+ }
+}
+/*-- 08.10.2007 12:55:32---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void TDefTableHandler::localResolve(Id rName, writerfilter::Reference<Properties>::Pointer_t pProperties)
+{
+ if( pProperties.get())
+ {
+ m_nLineWidth = m_nLineType = m_nLineColor = m_nLineDistance = 0;
+ pProperties->resolve( *this );
+ table::BorderLine aBorderLine;
+ ConversionHelper::MakeBorderLine( m_nLineWidth, m_nLineType, m_nLineColor,
+ aBorderLine, m_bOOXML );
+
+ /* WRITERFILTERSTATUS: table: TDefTable_localresolve */
+ switch( rName )
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_top:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCTOP:
+ m_aTopBorderLines.push_back(aBorderLine);
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_left:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCLEFT:
+ m_aLeftBorderLines.push_back(aBorderLine);
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_bottom:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCBOTTOM:
+ m_aBottomBorderLines.push_back(aBorderLine);
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_right:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_rtf::LN_BRCRIGHT:
+ m_aRightBorderLines.push_back(aBorderLine);
+ break;
+ case NS_ooxml::LN_CT_TcBorders_insideH:
+ m_aInsideHBorderLines.push_back(aBorderLine);
+ break;
+ case NS_ooxml::LN_CT_TcBorders_insideV:
+ m_aInsideVBorderLines.push_back(aBorderLine);
+ break;
+ default:;
+ }
+ }
+}
+/*-- 24.04.2007 09:06:35---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void TDefTableHandler::lcl_sprm(Sprm & rSprm)
+{
+ /* WRITERFILTERSTATUS: table: TDefTable_sprm */
+ switch( rSprm.getId() )
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_top:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_left:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_bottom:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TcBorders_right:
+ case NS_ooxml::LN_CT_TcBorders_insideH:
+ case NS_ooxml::LN_CT_TcBorders_insideV:
+ case NS_ooxml::LN_CT_TcBorders_tl2br:
+ case NS_ooxml::LN_CT_TcBorders_tr2bl:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ localResolve( rSprm.getId(), pProperties );
+ }
+ break;
+ default:;
+ }
+}
+/*-- 24.04.2007 09:09:01---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+PropertyMapPtr TDefTableHandler::getRowProperties() const
+{
+ PropertyMapPtr pPropertyMap(new PropertyMap);
+
+ // Writer only wants the separators, Word provides also the outer border positions
+ if( m_aCellBorderPositions.size() > 2 )
+ {
+ //determine table width
+ double nFullWidth = m_aCellBorderPositions[m_aCellBorderPositions.size() - 1] - m_aCellBorderPositions[0];
+ //the positions have to be distibuted in a range of 10000
+ const double nFullWidthRelative = 10000.;
+ uno::Sequence< text::TableColumnSeparator > aSeparators( m_aCellBorderPositions.size() - 2 );
+ text::TableColumnSeparator* pSeparators = aSeparators.getArray();
+ for( sal_uInt32 nBorder = 1; nBorder < m_aCellBorderPositions.size() - 1; ++nBorder )
+ {
+ sal_Int16 nRelPos =
+ sal::static_int_cast< sal_Int16 >(double(m_aCellBorderPositions[nBorder]) * nFullWidthRelative / nFullWidth );
+
+ pSeparators[nBorder - 1].Position = nRelPos;
+ pSeparators[nBorder - 1].IsVisible = sal_True;
+ }
+ pPropertyMap->Insert( PROP_TABLE_COLUMN_SEPARATORS, false, uno::makeAny( aSeparators ) );
+ }
+
+ return pPropertyMap;
+}
+/*-- 10.05.2007 16:10:33---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void TDefTableHandler::fillCellProperties(
+ size_t nCell, ::boost::shared_ptr< TablePropertyMap > pCellProperties ) const
+{
+ if( m_aCellBorderPositions.size() > nCell )
+ {
+ sal_Int16 nVertOrient = text::VertOrientation::NONE;
+ switch( m_aCellVertAlign[nCell] ) //0 - top 1 - center 2 - bottom
+ {
+ case 1: nVertOrient = text::VertOrientation::CENTER; break;
+ case 2: nVertOrient = text::VertOrientation::BOTTOM; break;
+ default:;
+ }
+ pCellProperties->Insert( PROP_VERT_ORIENT, false, uno::makeAny( nVertOrient ) );
+ }
+ if( m_aTopBorderLines.size() > nCell )
+ pCellProperties->Insert( PROP_TOP_BORDER, false, uno::makeAny( m_aTopBorderLines[nCell] ) );
+ if( m_aLeftBorderLines.size() > nCell )
+ pCellProperties->Insert( PROP_LEFT_BORDER, false, uno::makeAny( m_aLeftBorderLines[nCell] ) );
+ if( m_aBottomBorderLines.size() > nCell )
+ pCellProperties->Insert( PROP_BOTTOM_BORDER, false, uno::makeAny( m_aBottomBorderLines[nCell] ) );
+ if( m_aRightBorderLines.size() > nCell )
+ pCellProperties->Insert( PROP_RIGHT_BORDER, false, uno::makeAny( m_aRightBorderLines[nCell] ) );
+ if( m_aInsideHBorderLines.size() > nCell )
+ pCellProperties->Insert( META_PROP_HORIZONTAL_BORDER, false, uno::makeAny( m_aInsideHBorderLines[nCell] ) );
+ if( m_aInsideVBorderLines.size() > nCell )
+ pCellProperties->Insert( META_PROP_VERTICAL_BORDER, false, uno::makeAny( m_aInsideVBorderLines[nCell] ) );
+}
+/*-- 09.05.2007 13:14:17---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Int32 TDefTableHandler::getTableWidth() const
+{
+ sal_Int32 nWidth = 0;
+ if( m_aCellBorderPositions.size() > 1 )
+ {
+ //determine table width
+ nWidth = m_aCellBorderPositions[m_aCellBorderPositions.size() - 1] - m_aCellBorderPositions[0];
+ }
+ return nWidth;
+}
+/*-- 10.05.2007 16:09:10---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+size_t TDefTableHandler::getCellCount() const
+{
+ return m_aCellVertAlign.size();
+}
+
+} //namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/TDefTableHandler.hxx b/writerfilter/source/dmapper/TDefTableHandler.hxx
new file mode 100644
index 000000000000..3bd25adeb6ea
--- /dev/null
+++ b/writerfilter/source/dmapper/TDefTableHandler.hxx
@@ -0,0 +1,87 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_TDEFTABLEHANDLER_HXX
+#define INCLUDED_TDEFTABLEHANDLER_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+#include <boost/shared_ptr.hpp>
+#include <com/sun/star/table/BorderLine.hpp>
+#include <vector>
+namespace com{ namespace sun{ namespace star{namespace table {
+ struct BorderLine;
+}}}}
+
+namespace writerfilter {
+namespace dmapper
+{
+class PropertyMap;
+class TablePropertyMap;
+class WRITERFILTER_DLLPRIVATE TDefTableHandler : public LoggedProperties
+{
+public:
+
+private:
+ ::std::vector<sal_Int32> m_aCellBorderPositions;
+ ::std::vector<sal_Int32> m_aCellVertAlign;
+
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aLeftBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aRightBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aTopBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aBottomBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aInsideHBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aInsideVBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aTl2brBorderLines;
+ ::std::vector< ::com::sun::star::table::BorderLine > m_aTr2blBorderLines;
+
+ //values of the current border
+ sal_Int32 m_nLineWidth;
+ sal_Int32 m_nLineType;
+ sal_Int32 m_nLineColor;
+ sal_Int32 m_nLineDistance;
+
+ bool m_bOOXML;
+
+ void localResolve(Id Name, writerfilter::Reference<Properties>::Pointer_t pProperties);
+
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+public:
+ TDefTableHandler( bool bOOXML );
+ virtual ~TDefTableHandler();
+
+ size_t getCellCount() const;
+ void fillCellProperties( size_t nCell, ::boost::shared_ptr< TablePropertyMap > pCellProperties) const;
+ ::boost::shared_ptr<PropertyMap> getRowProperties() const;
+ sal_Int32 getTableWidth() const;
+};
+typedef boost::shared_ptr< TDefTableHandler > TDefTableHandlerPtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/TablePropertiesHandler.cxx b/writerfilter/source/dmapper/TablePropertiesHandler.cxx
new file mode 100644
index 000000000000..10b2eed97a81
--- /dev/null
+++ b/writerfilter/source/dmapper/TablePropertiesHandler.cxx
@@ -0,0 +1,245 @@
+#include "BorderHandler.hxx"
+#include "CellColorHandler.hxx"
+#include "CellMarginHandler.hxx"
+#include "ConversionHelper.hxx"
+#include "MeasureHandler.hxx"
+#include "TablePropertiesHandler.hxx"
+#include "TDefTableHandler.hxx"
+
+#include <ooxml/resourceids.hxx>
+#include <doctok/sprmids.hxx>
+
+#include <com/sun/star/text/SizeType.hpp>
+#include <com/sun/star/text/VertOrientation.hpp>
+#include <dmapperLoggers.hxx>
+
+
+namespace writerfilter {
+namespace dmapper {
+
+ TablePropertiesHandler::TablePropertiesHandler( bool bOOXML ) :
+ m_pTableManager( NULL ),
+ m_bOOXML( bOOXML )
+ {
+ }
+
+
+ TablePropertiesHandler::~TablePropertiesHandler( )
+ {
+ // Do not delete the table manager... this will be done somewhere else
+ m_pTableManager = NULL;
+ }
+
+ bool TablePropertiesHandler::sprm(Sprm & rSprm)
+ {
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("TablePropertiesHandler.sprm");
+ dmapper_logger->attribute("sprm", rSprm.toString());
+#endif
+
+ bool bRet = true;
+ sal_uInt32 nSprmId = rSprm.getId();
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = ((pValue.get() != NULL) ? pValue->getInt() : 0);
+ /* WRITERFILTERSTATUS: table: table_sprmdata */
+ switch( nSprmId )
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 2 */
+ case NS_ooxml::LN_CT_TrPrBase_jc: //90706
+ /* WRITERFILTERSTATUS: done: 1, planned: 0.5, spent: 0.5 */
+ case NS_ooxml::LN_CT_TblPrBase_jc:
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 2 */
+ case 0x5400: // sprmTJc
+ {
+ //table justification 0: left, 1: center, 2: right
+ sal_Int16 nOrient = ConversionHelper::convertTableJustification( nIntValue );
+ TablePropertyMapPtr pTableMap( new TablePropertyMap );
+ pTableMap->setValue( TablePropertyMap::HORI_ORIENT, nOrient );
+ insertTableProps( pTableMap );
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ case 0x9601: // sprmTDxaLeft
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0x9602: // sprmTDxaGapHalf
+ {
+ //m_nGapHalf = ConversionHelper::convertTwipToMM100( nIntValue );
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ pPropMap->setValue( TablePropertyMap::GAP_HALF, ConversionHelper::convertTwipToMM100( nIntValue ) );
+ insertTableProps(pPropMap);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 2 */
+ case NS_ooxml::LN_CT_TrPrBase_trHeight: //90703
+ {
+ //contains unit and value
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ { //contains attributes x2902 (LN_unit) and x17e2 (LN_trleft)
+ MeasureHandlerPtr pMeasureHandler( new MeasureHandler );
+ pProperties->resolve(*pMeasureHandler);
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ pPropMap->Insert( PROP_SIZE_TYPE, false, uno::makeAny( pMeasureHandler->GetRowHeightSizeType() ));
+ pPropMap->Insert( PROP_HEIGHT, false, uno::makeAny(pMeasureHandler->getMeasureValue() ));
+ insertRowProps(pPropMap);
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0x3403: // sprmTFCantSplit
+ case NS_sprm::LN_TCantSplit: // 0x3644
+ {
+ //row can't break across pages if nIntValue == 1
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ pPropMap->Insert( PROP_IS_SPLIT_ALLOWED, false, uno::makeAny(sal_Bool( nIntValue == 1 ? sal_False : sal_True ) ));
+ insertRowProps(pPropMap);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0x9407: // sprmTDyaRowHeight
+ {
+ // table row height - negative values indicate 'exact height' - positive 'at least'
+ TablePropertyMapPtr pPropMap( new TablePropertyMap );
+ bool bMinHeight = true;
+ sal_Int16 nHeight = static_cast<sal_Int16>( nIntValue );
+ if( nHeight < 0 )
+ {
+ bMinHeight = false;
+ nHeight *= -1;
+ }
+ pPropMap->Insert( PROP_SIZE_TYPE, false, uno::makeAny(bMinHeight ? text::SizeType::MIN : text::SizeType::FIX ));
+ pPropMap->Insert( PROP_HEIGHT, false, uno::makeAny(ConversionHelper::convertTwipToMM100( nHeight )));
+ insertRowProps(pPropMap);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_TcPrBase_vAlign://90694
+ {
+ sal_Int16 nVertOrient = text::VertOrientation::NONE;
+ switch( nIntValue ) //0 - top 1 - center 3 - bottom
+ {
+ case 1: nVertOrient = text::VertOrientation::CENTER; break;
+ case 3: nVertOrient = text::VertOrientation::BOTTOM; break;
+ default:;
+ };
+ TablePropertyMapPtr pCellPropMap( new TablePropertyMap() );
+ pCellPropMap->Insert( PROP_VERT_ORIENT, false, uno::makeAny( nVertOrient ) );
+ //todo: in ooxml import the value of m_ncell is wrong
+ cellProps( pCellPropMap );
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_TblPrBase_tblBorders: //table borders, might be defined in table style
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ BorderHandlerPtr pBorderHandler( new BorderHandler(m_bOOXML) );
+ pProperties->resolve(*pBorderHandler);
+ TablePropertyMapPtr pTablePropMap( new TablePropertyMap );
+ pTablePropMap->insert( pBorderHandler->getProperties() );
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->addTag(pTablePropMap->toTag());
+#endif
+ insertTableProps( pTablePropMap );
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_TcPrBase_tcBorders ://cell borders
+ //contains CT_TcBorders_left, right, top, bottom
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ //in OOXML there's one set of borders at each cell (if there is any)
+ TDefTableHandlerPtr pTDefTableHandler( new TDefTableHandler( m_bOOXML ));
+ pProperties->resolve( *pTDefTableHandler );
+ TablePropertyMapPtr pCellPropMap( new TablePropertyMap );
+ pTDefTableHandler->fillCellProperties( 0, pCellPropMap );
+ cellProps( pCellPropMap );
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_TblPrBase_shd:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ CellColorHandlerPtr pCellColorHandler( new CellColorHandler);
+ pProperties->resolve( *pCellColorHandler );
+ TablePropertyMapPtr pTablePropMap( new TablePropertyMap );
+ insertTableProps( pCellColorHandler->getProperties() );
+ }
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0xd61a : // sprmTCellTopColor
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0xd61b : // sprmTCellLeftColor
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0xd61c : // sprmTCellBottomColor
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case 0xd61d : // sprmTCellRightColor
+ /* WRITERFILTERSTATUS: done: 1, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_TcPrBase_shd:
+ {
+ // each color sprm contains as much colors as cells are in a row
+ //LN_CT_TcPrBase_shd: cell shading contains: LN_CT_Shd_val, LN_CT_Shd_fill, LN_CT_Shd_color
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ CellColorHandlerPtr pCellColorHandler( new CellColorHandler );
+ pProperties->resolve( *pCellColorHandler );
+ cellProps( pCellColorHandler->getProperties());
+ }
+ }
+ break;
+//OOXML table properties
+ /* WRITERFILTERSTATUS: done: 0, planned: 2, spent: 0 */
+ case NS_ooxml::LN_CT_TblPrBase_tblCellMar: //cell margins
+ {
+ //contains LN_CT_TblCellMar_top, LN_CT_TblCellMar_left, LN_CT_TblCellMar_bottom, LN_CT_TblCellMar_right
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ {
+ CellMarginHandlerPtr pCellMarginHandler( new CellMarginHandler );
+ pProperties->resolve( *pCellMarginHandler );
+ TablePropertyMapPtr pMarginProps( new TablePropertyMap );
+ if( pCellMarginHandler->m_bTopMarginValid )
+ pMarginProps->setValue( TablePropertyMap::CELL_MAR_TOP, pCellMarginHandler->m_nTopMargin );
+ if( pCellMarginHandler->m_bBottomMarginValid )
+ pMarginProps->setValue( TablePropertyMap::CELL_MAR_BOTTOM, pCellMarginHandler->m_nBottomMargin );
+ if( pCellMarginHandler->m_bLeftMarginValid )
+ pMarginProps->setValue( TablePropertyMap::CELL_MAR_LEFT, pCellMarginHandler->m_nLeftMargin );
+ if( pCellMarginHandler->m_bRightMarginValid )
+ pMarginProps->setValue( TablePropertyMap::CELL_MAR_RIGHT, pCellMarginHandler->m_nRightMargin );
+ insertTableProps(pMarginProps);
+ }
+ }
+ break;
+ case NS_ooxml::LN_CT_TblPrBase_tblInd:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if (pProperties.get())
+ {
+ MeasureHandlerPtr pHandler(new MeasureHandler);
+ TablePropertyMapPtr pTblIndMap(new TablePropertyMap);
+ sal_uInt32 nTblInd = pHandler->getMeasureValue();
+ pTblIndMap->setValue( TablePropertyMap::LEFT_MARGIN, nTblInd);
+ insertTableProps(pTblIndMap);
+ }
+ }
+ break;
+ default: bRet = false;
+ }
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("TablePropertiesHandler.sprm");
+#endif
+
+ return bRet;
+ }
+}}
diff --git a/writerfilter/source/dmapper/TablePropertiesHandler.hxx b/writerfilter/source/dmapper/TablePropertiesHandler.hxx
new file mode 100644
index 000000000000..68fe40689702
--- /dev/null
+++ b/writerfilter/source/dmapper/TablePropertiesHandler.hxx
@@ -0,0 +1,83 @@
+#ifndef INCLUDED_TABLEPROPERTIESHANDLER_HXX
+#define INCLUDED_TABLEPROPERTIESHANDLER_HXX
+
+#include <PropertyMap.hxx>
+
+#include <resourcemodel/TableManager.hxx>
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+#include <boost/shared_ptr.hpp>
+
+#include <vector>
+
+namespace writerfilter {
+namespace dmapper {
+
+
+typedef ::com::sun::star::uno::Reference< ::com::sun::star::text::XTextRange > Handle_t;
+typedef TableManager<Handle_t , TablePropertyMapPtr > DomainMapperTableManager_Base_t;
+
+class TablePropertiesHandler
+{
+private:
+ vector< PropertyMapPtr > m_rPropertiesStack;
+ PropertyMapPtr m_pCurrentProperties;
+ DomainMapperTableManager_Base_t *m_pTableManager;
+ bool m_bOOXML;
+
+public:
+ TablePropertiesHandler( bool bOOXML );
+ virtual ~TablePropertiesHandler( );
+
+ bool sprm(Sprm & sprm);
+
+ inline void SetTableManager( DomainMapperTableManager_Base_t *pTableManager )
+ {
+ m_pTableManager = pTableManager;
+ };
+
+ inline void SetProperties( PropertyMapPtr pProperties )
+ {
+ m_pCurrentProperties = pProperties;
+ };
+
+private:
+
+ inline void cellProps( TablePropertyMapPtr pProps )
+ {
+ if ( m_pTableManager )
+ m_pTableManager->cellProps( pProps );
+ else
+ m_pCurrentProperties->insert( pProps, true );
+ };
+
+ inline void cellPropsByCell( unsigned int i, TablePropertyMapPtr pProps )
+ {
+ if ( m_pTableManager )
+ m_pTableManager->cellPropsByCell( i, pProps );
+ else
+ m_pCurrentProperties->insert( pProps, true );
+ };
+
+ inline void insertRowProps( TablePropertyMapPtr pProps )
+ {
+ if ( m_pTableManager )
+ m_pTableManager->insertRowProps( pProps );
+ else
+ m_pCurrentProperties->insert( pProps, true );
+ };
+
+ inline void insertTableProps( TablePropertyMapPtr pProps )
+ {
+ if ( m_pTableManager )
+ m_pTableManager->insertTableProps( pProps );
+ else
+ m_pCurrentProperties->insert( pProps, true );
+ };
+};
+typedef boost::shared_ptr<TablePropertiesHandler> TablePropertiesHandlerPtr;
+
+} }
+
+#endif
diff --git a/writerfilter/source/dmapper/TblStylePrHandler.cxx b/writerfilter/source/dmapper/TblStylePrHandler.cxx
new file mode 100644
index 000000000000..02d134786357
--- /dev/null
+++ b/writerfilter/source/dmapper/TblStylePrHandler.cxx
@@ -0,0 +1,90 @@
+#include <TblStylePrHandler.hxx>
+#include <PropertyMap.hxx>
+#include <ooxml/resourceids.hxx>
+#include <dmapperLoggers.hxx>
+#include <resourcemodel/QNameToString.hxx>
+
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+namespace dmapper {
+
+TblStylePrHandler::TblStylePrHandler( DomainMapper & rDMapper ) :
+LoggedProperties(dmapper_logger, "TblStylePrHandler"),
+m_rDMapper( rDMapper ),
+m_pTablePropsHandler( new TablePropertiesHandler( true ) ),
+m_nType( TBL_STYLE_UNKNOWN ),
+m_pProperties( new PropertyMap )
+{
+}
+
+TblStylePrHandler::~TblStylePrHandler( )
+{
+ delete m_pTablePropsHandler, m_pTablePropsHandler = NULL;
+}
+
+void TblStylePrHandler::lcl_attribute(Id rName, Value & rVal)
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("TblStylePrHandler.attribute");
+ dmapper_logger->attribute("name", (*QNameToString::Instance())(rName));
+ dmapper_logger->chars(rVal.toString());
+ dmapper_logger->endElement("TblStylePrHandler.attribute");
+#endif
+
+ switch ( rName )
+ {
+ case NS_ooxml::LN_CT_TblStyleOverrideType:
+ {
+ // The tokenid should be the same in the model.xml than
+ // in the TblStyleType enum
+ m_nType = TblStyleType( rVal.getInt( ) );
+ }
+ break;
+ }
+}
+
+void TblStylePrHandler::lcl_sprm(Sprm & rSprm)
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("TblStylePrHandler.sprm");
+ dmapper_logger->attribute("sprm", rSprm.toString());
+#endif
+
+ Value::Pointer_t pValue = rSprm.getValue();
+ switch ( rSprm.getId( ) )
+ {
+ case NS_ooxml::LN_CT_PPrBase:
+ case NS_ooxml::LN_EG_RPrBase:
+ case NS_ooxml::LN_CT_TblPrBase:
+ case NS_ooxml::LN_CT_TrPrBase:
+ case NS_ooxml::LN_CT_TcPrBase:
+ resolveSprmProps( rSprm );
+ break;
+ default:
+ // Tables specific properties have to handled here
+ m_pTablePropsHandler->SetProperties( m_pProperties );
+ bool bRet = m_pTablePropsHandler->sprm( rSprm );
+
+ if ( !bRet )
+ {
+ // The DomainMapper can handle some of the properties
+ m_rDMapper.PushStyleSheetProperties( m_pProperties, true );
+ m_rDMapper.sprm( rSprm );
+ m_rDMapper.PopStyleSheetProperties( true );
+ }
+ }
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("TblStylePrHandler.sprm");
+#endif
+}
+
+void TblStylePrHandler::resolveSprmProps(Sprm & rSprm)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+}
+
+}}
diff --git a/writerfilter/source/dmapper/TblStylePrHandler.hxx b/writerfilter/source/dmapper/TblStylePrHandler.hxx
new file mode 100644
index 000000000000..b76782b0edfe
--- /dev/null
+++ b/writerfilter/source/dmapper/TblStylePrHandler.hxx
@@ -0,0 +1,64 @@
+#ifndef INCLUDED_TBLSTYLEPRHANDLER_HXX
+#define INCLUDED_TBLSTYLEPRHANDLER_HXX
+
+#include "TablePropertiesHandler.hxx"
+
+#include <dmapper/DomainMapper.hxx>
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+#include <boost/shared_ptr.hpp>
+
+namespace writerfilter {
+namespace dmapper {
+
+class DomainMapper;
+class PropertyMap;
+
+enum TblStyleType
+{
+ TBL_STYLE_UNKNOWN,
+ TBL_STYLE_WHOLETABLE,
+ TBL_STYLE_FIRSTROW,
+ TBL_STYLE_LASTROW,
+ TBL_STYLE_FIRSTCOL,
+ TBL_STYLE_LASTCOL,
+ TBL_STYLE_BAND1VERT,
+ TBL_STYLE_BAND2VERT,
+ TBL_STYLE_BAND1HORZ,
+ TBL_STYLE_BAND2HORZ,
+ TBL_STYLE_NECELL,
+ TBL_STYLE_NWCELL,
+ TBL_STYLE_SECELL,
+ TBL_STYLE_SWCELL
+};
+
+class WRITERFILTER_DLLPRIVATE TblStylePrHandler : public LoggedProperties
+{
+private:
+ DomainMapper & m_rDMapper;
+ TablePropertiesHandler * m_pTablePropsHandler;
+
+ TblStyleType m_nType;
+ PropertyMapPtr m_pProperties;
+
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+public:
+ TblStylePrHandler( DomainMapper & rDMapper );
+ virtual ~TblStylePrHandler( );
+
+ inline PropertyMapPtr getProperties() { return m_pProperties; };
+ inline TblStyleType getType() { return m_nType; };
+
+private:
+
+ void resolveSprmProps(Sprm & rSprm);
+};
+
+typedef boost::shared_ptr< TblStylePrHandler > TblStylePrHandlerPtr;
+
+}}
+
+#endif
diff --git a/writerfilter/source/dmapper/ThemeTable.cxx b/writerfilter/source/dmapper/ThemeTable.cxx
new file mode 100644
index 000000000000..74f166dcf313
--- /dev/null
+++ b/writerfilter/source/dmapper/ThemeTable.cxx
@@ -0,0 +1,225 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <ThemeTable.hxx>
+#ifndef INCLUDED_RESOURCESIDS
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#endif
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+namespace dmapper
+{
+
+struct ThemeTable_Impl
+{
+ ThemeTable_Impl() :
+ m_currentThemeFontId(0),
+ m_currentFontThemeEntry() {}
+ std::map<sal_uInt32, std::map<sal_uInt32, ::rtl::OUString> > m_themeFontMap;
+ sal_uInt32 m_currentThemeFontId;
+ std::map<sal_uInt32, ::rtl::OUString> m_currentFontThemeEntry;
+};
+
+ThemeTable::ThemeTable()
+: LoggedProperties(dmapper_logger, "ThemeTable")
+, LoggedTable(dmapper_logger, "ThemeTable")
+, m_pImpl( new ThemeTable_Impl )
+{
+ // printf("ThemeTable::ThemeTable()\n");
+}
+
+ThemeTable::~ThemeTable()
+{
+ delete m_pImpl;
+}
+
+void ThemeTable::lcl_attribute(Id Name, Value & val)
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("ThemeTable.attribute");
+ dmapper_logger->attribute("name", (*QNameToString::Instance())(Name));
+ dmapper_logger->attribute("value", val.toString());
+#endif
+ // int nIntValue = val.getInt();
+ ::rtl::OUString sValue = val.getString();
+ // printf ( "ThemeTable::attribute(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)Name, (unsigned int)nIntValue, ::rtl::OUStringToOString(sValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+ /* WRITERFILTERSTATUS: table: ThemeTable_attributedata */
+ switch(Name)
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_TextFont_typeface:
+ if (sValue.getLength())
+ m_pImpl->m_currentFontThemeEntry[m_pImpl->m_currentThemeFontId] = sValue;
+ break;
+ default:
+ {
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->element("unhandled");
+#endif
+ }
+ }
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("ThemeTable.attribute");
+#endif
+}
+
+void ThemeTable::lcl_sprm(Sprm& rSprm)
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("ThemeTable.sprm");
+ dmapper_logger->chars(rSprm.toString());
+#endif
+
+ sal_uInt32 nSprmId = rSprm.getId();
+ (void)nSprmId;
+
+ Value::Pointer_t pValue = rSprm.getValue();
+ sal_Int32 nIntValue = pValue->getInt();
+ (void)nIntValue;
+ rtl::OUString sStringValue = pValue->getString();
+
+ // printf ( "ThemeTable::sprm(0x%.4x, 0x%.4x) [%s]\n", (unsigned int)nSprmId, (unsigned int)nIntValue, ::rtl::OUStringToOString(sStringValue, RTL_TEXTENCODING_DONTKNOW).getStr());
+
+ /* WRITERFILTERSTATUS: table: ThemeTable_sprm */
+ switch(nSprmId)
+ {
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_BaseStyles_fontScheme:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_FontScheme_majorFont:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_FontScheme_minorFont:
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ m_pImpl->m_currentFontThemeEntry = std::map<sal_uInt32, rtl::OUString>();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+ m_pImpl->m_themeFontMap[nSprmId] = m_pImpl->m_currentFontThemeEntry;
+ }
+ break;
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_FontCollection_latin:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_FontCollection_ea:
+ /* WRITERFILTERSTATUS: done: 1, planned: 0, spent: 0 */
+ case NS_ooxml::LN_CT_FontCollection_cs:
+ {
+ m_pImpl->m_currentThemeFontId = nSprmId;
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(*this);
+ }
+ break;
+ default:
+ {
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->element("unhandled");
+#endif
+ }
+ }
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("ThemeTable.sprm");
+#endif
+}
+
+void ThemeTable::lcl_entry(int /*pos*/, writerfilter::Reference<Properties>::Pointer_t ref)
+{
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->startElement("ThemeTable.entry");
+#endif
+
+ ref->resolve(*this);
+
+#ifdef DEBUG_DOMAINMAPPER
+ dmapper_logger->endElement("ThemeTable.entry");
+#endif
+}
+
+const ::rtl::OUString ThemeTable::getFontNameForTheme(const Id id) const
+{
+ std::map<sal_uInt32, ::rtl::OUString> tmpThemeFontMap;
+ switch (id)
+ {
+ case NS_ooxml::LN_Value_ST_Theme_majorEastAsia:
+ case NS_ooxml::LN_Value_ST_Theme_majorBidi:
+ case NS_ooxml::LN_Value_ST_Theme_majorAscii:
+ case NS_ooxml::LN_Value_ST_Theme_majorHAnsi:
+ tmpThemeFontMap = m_pImpl->m_themeFontMap[NS_ooxml::LN_CT_FontScheme_majorFont];
+ break;
+ case NS_ooxml::LN_Value_ST_Theme_minorEastAsia:
+ case NS_ooxml::LN_Value_ST_Theme_minorBidi:
+ case NS_ooxml::LN_Value_ST_Theme_minorAscii:
+ case NS_ooxml::LN_Value_ST_Theme_minorHAnsi:
+ tmpThemeFontMap = m_pImpl->m_themeFontMap[NS_ooxml::LN_CT_FontScheme_minorFont];
+ break;
+ default:
+ return ::rtl::OUString();
+ }
+
+ switch (id)
+ {
+ case NS_ooxml::LN_Value_ST_Theme_majorAscii:
+ case NS_ooxml::LN_Value_ST_Theme_majorHAnsi:
+ case NS_ooxml::LN_Value_ST_Theme_minorAscii:
+ case NS_ooxml::LN_Value_ST_Theme_minorHAnsi:
+ {
+ std::map<sal_uInt32, ::rtl::OUString>::const_iterator Iter = tmpThemeFontMap.find(NS_ooxml::LN_CT_FontCollection_latin);
+ if (Iter != tmpThemeFontMap.end())
+ return (Iter)->second;
+ return ::rtl::OUString();
+ }
+ case NS_ooxml::LN_Value_ST_Theme_majorBidi:
+ case NS_ooxml::LN_Value_ST_Theme_minorBidi:
+ {
+ std::map<sal_uInt32, ::rtl::OUString>::const_iterator Iter = tmpThemeFontMap.find(NS_ooxml::LN_CT_FontCollection_cs);
+ if (Iter != tmpThemeFontMap.end())
+ return (Iter)->second;
+ return ::rtl::OUString();
+ }
+ case NS_ooxml::LN_Value_ST_Theme_majorEastAsia:
+ case NS_ooxml::LN_Value_ST_Theme_minorEastAsia:
+ {
+ std::map<sal_uInt32, ::rtl::OUString>::const_iterator Iter = tmpThemeFontMap.find(NS_ooxml::LN_CT_FontCollection_ea);
+ if (Iter != tmpThemeFontMap.end())
+ return (Iter)->second;
+ return ::rtl::OUString();
+ }
+ default:
+ return ::rtl::OUString();
+ }
+}
+
+}//namespace dmapper
+} //namespace writerfilter
diff --git a/writerfilter/source/dmapper/ThemeTable.hxx b/writerfilter/source/dmapper/ThemeTable.hxx
new file mode 100644
index 000000000000..1396c4cee8c9
--- /dev/null
+++ b/writerfilter/source/dmapper/ThemeTable.hxx
@@ -0,0 +1,63 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_THEMETABLE_HXX
+#define INCLUDED_THEMETABLE_HXX
+
+#include <WriterFilterDllApi.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+#include <com/sun/star/lang/XComponent.hpp>
+#include <map>
+
+namespace writerfilter {
+namespace dmapper
+{
+
+struct ThemeTable_Impl;
+
+class WRITERFILTER_DLLPRIVATE ThemeTable : public LoggedProperties, public LoggedTable
+{
+ ThemeTable_Impl *m_pImpl;
+
+public:
+ ThemeTable();
+ virtual ~ThemeTable();
+
+ const ::rtl::OUString getFontNameForTheme(const Id id) const;
+
+ private:
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+ // Table
+ virtual void lcl_entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+};
+typedef boost::shared_ptr< ThemeTable > ThemeTablePtr;
+}}
+
+#endif //
diff --git a/writerfilter/source/dmapper/WrapPolygonHandler.cxx b/writerfilter/source/dmapper/WrapPolygonHandler.cxx
new file mode 100644
index 000000000000..2aabc1a375a9
--- /dev/null
+++ b/writerfilter/source/dmapper/WrapPolygonHandler.cxx
@@ -0,0 +1,216 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <com/sun/star/drawing/PointSequence.hpp>
+
+#include <ooxml/resourceids.hxx>
+#include <resourcemodel/ResourceModelHelper.hxx>
+
+#include "ConversionHelper.hxx"
+#include "WrapPolygonHandler.hxx"
+#include "dmapperLoggers.hxx"
+
+namespace writerfilter {
+
+using resourcemodel::resolveSprmProps;
+
+namespace dmapper {
+
+WrapPolygon::WrapPolygon()
+{
+}
+
+WrapPolygon::~WrapPolygon()
+{
+}
+
+void WrapPolygon::addPoint(const awt::Point & rPoint)
+{
+ mPoints.push_back(rPoint);
+}
+
+WrapPolygon::Points_t::const_iterator WrapPolygon::begin() const
+{
+ return mPoints.begin();
+}
+
+WrapPolygon::Points_t::const_iterator WrapPolygon::end() const
+{
+ return mPoints.end();
+}
+
+WrapPolygon::Points_t::iterator WrapPolygon::begin()
+{
+ return mPoints.begin();
+}
+
+WrapPolygon::Points_t::iterator WrapPolygon::end()
+{
+ return mPoints.end();
+}
+
+size_t WrapPolygon::size() const
+{
+ return mPoints.size();
+}
+
+WrapPolygon::Pointer_t WrapPolygon::move(const awt::Point & rPoint)
+{
+ WrapPolygon::Pointer_t pResult(new WrapPolygon);
+
+ Points_t::iterator aIt = begin();
+ Points_t::iterator aItEnd = end();
+
+ while (aIt != aItEnd)
+ {
+ awt::Point aPoint(aIt->X + rPoint.X, aIt->Y + rPoint.Y);
+ pResult->addPoint(aPoint);
+ aIt++;
+ }
+
+ return pResult;
+}
+
+WrapPolygon::Pointer_t WrapPolygon::scale(const Fraction & rFractionX, const Fraction & rFractionY)
+{
+ WrapPolygon::Pointer_t pResult(new WrapPolygon);
+
+ Points_t::iterator aIt = begin();
+ Points_t::iterator aItEnd = end();
+
+ while (aIt != aItEnd)
+ {
+ awt::Point aPoint(Fraction(aIt->X) * rFractionX, Fraction(aIt->Y) * rFractionY);
+ pResult->addPoint(aPoint);
+ aIt++;
+ }
+
+ return pResult;
+}
+
+WrapPolygon::Pointer_t WrapPolygon::correctWordWrapPolygon(const awt::Size & rSrcSize, const awt::Size & rDstSize)
+{
+ WrapPolygon::Pointer_t pResult;
+
+ const sal_uInt32 nWrap100Percent = 21600;
+
+ Fraction aMove(nWrap100Percent, rSrcSize.Width);
+ aMove = aMove * Fraction(15, 1);
+ awt::Point aMovePoint(aMove, 0);
+ pResult = move(aMovePoint);
+
+ Fraction aScaleX(nWrap100Percent, Fraction(nWrap100Percent) + aMove);
+ Fraction aScaleY(nWrap100Percent, Fraction(nWrap100Percent) - aMove);
+ pResult = pResult->scale(aScaleX, aScaleY);
+
+ Fraction aScaleDestX(rDstSize.Width, nWrap100Percent);
+ Fraction aScaleDestY(rDstSize.Height, nWrap100Percent);
+ pResult = pResult->scale(aScaleDestX, aScaleDestY);
+
+ return pResult;
+}
+
+drawing::PointSequenceSequence WrapPolygon::getPointSequenceSequence() const
+{
+ drawing::PointSequenceSequence aPolyPolygon(1L);
+ drawing::PointSequence * pPolygon = aPolyPolygon.getArray();
+ pPolygon->realloc(size());
+
+ sal_uInt32 n = 0;
+ Points_t::const_iterator aIt = begin();
+ Points_t::const_iterator aItEnd = end();
+
+ while (aIt != aItEnd)
+ {
+ (*pPolygon)[n] = *aIt;
+ ++n;
+ aIt++;
+ }
+
+ return aPolyPolygon;
+}
+
+WrapPolygonHandler::WrapPolygonHandler()
+: LoggedProperties(dmapper_logger, "WrapPolygonHandler")
+, mpPolygon(new WrapPolygon)
+{
+}
+
+WrapPolygonHandler::~WrapPolygonHandler()
+{
+}
+
+void WrapPolygonHandler::lcl_attribute(Id Name, Value & val)
+{
+ sal_Int32 nIntValue = val.getInt();
+
+ switch(Name)
+ {
+ case NS_ooxml::LN_CT_Point2D_x:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ mnX = nIntValue;
+ break;
+ case NS_ooxml::LN_CT_Point2D_y:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ mnY = nIntValue;
+ break;
+ default:
+#ifdef DEBUG_WRAP_POLYGON_HANDLER
+ dmapper_logger->element("unhandled");
+#endif
+ break;
+ }
+}
+
+void WrapPolygonHandler::lcl_sprm(Sprm & _sprm)
+{
+ switch (_sprm.getId())
+ {
+ case NS_ooxml::LN_CT_WrapPath_lineTo:
+ case NS_ooxml::LN_CT_WrapPath_start:
+ /* WRITERFILTERSTATUS: done: 100, planned: 0.5, spent: 0 */
+ {
+ resolveSprmProps(*this, _sprm);
+
+ awt::Point aPoint(mnX, mnY);
+ mpPolygon->addPoint(aPoint);
+ }
+ break;
+ default:
+#ifdef DEBUG_WRAP_POLYGON_HANDLER
+ dmapper_logger->element("unhandled");
+#endif
+ break;
+ }
+}
+
+WrapPolygon::Pointer_t WrapPolygonHandler::getPolygon()
+{
+ return mpPolygon;
+}
+
+}}
diff --git a/writerfilter/source/dmapper/WrapPolygonHandler.hxx b/writerfilter/source/dmapper/WrapPolygonHandler.hxx
new file mode 100644
index 000000000000..05161096f81a
--- /dev/null
+++ b/writerfilter/source/dmapper/WrapPolygonHandler.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef WRAP_POLYGON_HANDLER_HXX
+#define WRAP_POLYGON_HANDLER_HXX
+
+#include <com/sun/star/drawing/PointSequenceSequence.hpp>
+#include <resourcemodel/LoggedResources.hxx>
+#include <resourcemodel/Fraction.hxx>
+
+namespace writerfilter {
+namespace dmapper {
+
+using namespace ::com::sun::star;
+using resourcemodel::Fraction;
+
+class WrapPolygon
+{
+public:
+ typedef ::std::deque<awt::Point> Points_t;
+ typedef ::boost::shared_ptr<WrapPolygon> Pointer_t;
+
+private:
+ Points_t mPoints;
+
+public:
+ WrapPolygon();
+ virtual ~WrapPolygon();
+
+ void addPoint(const awt::Point & rPoint);
+
+ Points_t::const_iterator begin() const;
+ Points_t::const_iterator end() const;
+ Points_t::iterator begin();
+ Points_t::iterator end();
+
+ size_t size() const;
+
+ WrapPolygon::Pointer_t move(const awt::Point & rMove);
+ WrapPolygon::Pointer_t scale(const Fraction & rFractionX, const Fraction & rFractionY);
+ WrapPolygon::Pointer_t correctWordWrapPolygon(const awt::Size & rSrcSize, const awt::Size & rDstSize);
+ drawing::PointSequenceSequence getPointSequenceSequence() const;
+};
+
+class WrapPolygonHandler : public LoggedProperties
+{
+public:
+ WrapPolygonHandler();
+ virtual ~WrapPolygonHandler();
+
+ WrapPolygon::Pointer_t getPolygon();
+
+private:
+ WrapPolygon::Pointer_t mpPolygon;
+
+ sal_uInt32 mnX;
+ sal_uInt32 mnY;
+
+ // Properties
+ virtual void lcl_attribute(Id Name, Value & val);
+ virtual void lcl_sprm(Sprm & sprm);
+
+};
+
+}}
+
+#endif // WRAP_POLYGON_HANDLER_HXX
diff --git a/writerfilter/source/dmapper/dmapperLoggers.cxx b/writerfilter/source/dmapper/dmapperLoggers.cxx
new file mode 100644
index 000000000000..29eece8a8f3d
--- /dev/null
+++ b/writerfilter/source/dmapper/dmapperLoggers.cxx
@@ -0,0 +1,39 @@
+/*************************************************************************
+ *
+ * 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: ooxmlLoggers.hxx,v $
+ * $Revision: 1.2 $
+ *
+ * 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 "dmapperLoggers.hxx"
+
+namespace writerfilter {
+namespace dmapper {
+
+
+
+}
+}
+
diff --git a/writerfilter/source/dmapper/dmapperLoggers.hxx b/writerfilter/source/dmapper/dmapperLoggers.hxx
new file mode 100644
index 000000000000..8b30c491c384
--- /dev/null
+++ b/writerfilter/source/dmapper/dmapperLoggers.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * 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: ooxmlLoggers.hxx,v $
+ * $Revision: 1.2 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_DMAPPER_LOGGERS_HXX
+#define INCLUDED_DMAPPER_LOGGERS_HXX
+
+#include <resourcemodel/TagLogger.hxx>
+
+namespace writerfilter {
+ namespace dmapper {
+ extern TagLogger::Pointer_t dmapper_logger;
+ }
+}
+
+#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
new file mode 100644
index 000000000000..a4b000411b4e
--- /dev/null
+++ b/writerfilter/source/dmapper/makefile.mk
@@ -0,0 +1,78 @@
+#*************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+#*************************************************************************
+PRJ=..$/..
+PRJNAME=writerfilter
+TARGET=dmapper
+GEN_HID=TRUE
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/inc$/writerfilter.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= \
+ $(SLO)$/BorderHandler.obj \
+ $(SLO)$/CellColorHandler.obj \
+ $(SLO)$/CellMarginHandler.obj \
+ $(SLO)$/ConversionHelper.obj \
+ $(SLO)$/DomainMapper.obj \
+ $(SLO)$/DomainMapperTableHandler.obj \
+ $(SLO)$/DomainMapperTableManager.obj \
+ $(SLO)$/DomainMapper_Impl.obj \
+ $(SLO)$/FFDataHandler.obj \
+ $(SLO)$/FontTable.obj \
+ $(SLO)$/FormControlHelper.obj \
+ $(SLO)$/GraphicHelpers.obj \
+ $(SLO)$/GraphicImport.obj \
+ $(SLO)$/MeasureHandler.obj \
+ $(SLO)$/ModelEventListener.obj \
+ $(SLO)$/NumberingManager.obj \
+ $(SLO)$/OLEHandler.obj \
+ $(SLO)$/PageBordersHandler.obj \
+ $(SLO)$/PropertyIds.obj \
+ $(SLO)$/PropertyMap.obj \
+ $(SLO)$/PropertyMapHelper.obj \
+ $(SLO)$/SectionColumnHandler.obj \
+ $(SLO)$/SettingsTable.obj \
+ $(SLO)$/StyleSheetTable.obj \
+ $(SLO)$/TDefTableHandler.obj \
+ $(SLO)$/TablePropertiesHandler.obj \
+ $(SLO)$/TblStylePrHandler.obj \
+ $(SLO)$/ThemeTable.obj \
+ $(SLO)$/WrapPolygonHandler.obj \
+
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/writerfilter/source/doctok/Dff.cxx b/writerfilter/source/doctok/Dff.cxx
new file mode 100644
index 000000000000..c7d8fb713d6f
--- /dev/null
+++ b/writerfilter/source/doctok/Dff.cxx
@@ -0,0 +1,518 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include "Dff.hxx"
+#include <doctok/resourceids.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include "resources.hxx"
+
+namespace writerfilter {
+namespace doctok {
+
+typedef boost::shared_ptr<WW8Value> WW8ValueSharedPointer_t;
+
+DffRecord::DffRecord(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 nCount)
+: WW8StructBase(rStream, nOffset, nCount), bInitialized(false)
+{
+}
+
+DffRecord::DffRecord(WW8StructBase * pParent, sal_uInt32 nOffset,
+ sal_uInt32 nCount)
+: WW8StructBase(pParent, nOffset, nCount), bInitialized(false)
+{
+}
+
+Records_t::iterator DffRecord::begin()
+{
+ if (! bInitialized)
+ initChildren();
+
+ return mRecords.begin();
+}
+
+Records_t::iterator DffRecord::end()
+{
+ if (! bInitialized)
+ initChildren();
+
+ return mRecords.end();
+}
+
+bool DffRecord::isContainer() const
+{
+ return getVersion() == 0xf;
+}
+
+sal_uInt32 DffRecord::calcSize() const
+{
+ sal_uInt32 nResult = 0;
+
+ switch (getRecordType())
+ {
+ case 0xf000:
+ case 0xf001:
+ case 0xf002:
+ case 0xf003:
+ case 0xf004:
+ nResult = getU32(0x4) + 8;
+
+ break;
+ case 0xf700:
+ nResult = 8;
+
+ break;
+ default:
+ nResult = getU32(0x4);
+
+ if (! isContainer())
+ nResult += 8;
+ break;
+ }
+
+ return nResult;
+}
+
+sal_uInt32 DffRecord::getVersion() const
+{
+ return getU8(0x0) & 0xf;
+}
+
+sal_uInt32 DffRecord::getInstance() const
+{
+ return (getU16(0x0) & 0xfff0) >> 4;
+}
+
+sal_uInt32 DffRecord::getRecordType() const
+{
+ return getU16(0x2);
+}
+
+void DffRecord::initChildren()
+{
+ if (isContainer())
+ {
+ sal_uInt32 nOffset = 8;
+ sal_uInt32 nCount = calcSize();
+
+ while (nCount - nOffset >= 8)
+ {
+ sal_uInt32 nSize = 0;
+ boost::shared_ptr<DffRecord> pRec
+ (createDffRecord(this, nOffset, &nSize));
+
+ if (nSize == 0)
+ break;
+
+ mRecords.push_back(pRec);
+
+ nOffset += nSize;
+ }
+ }
+
+ bInitialized = true;
+}
+
+Records_t DffRecord::findRecords(sal_uInt32 nType, bool bRecursive, bool bAny)
+{
+ Records_t aResult;
+
+ findRecords(nType, aResult, bRecursive, bAny);
+
+ return aResult;
+}
+
+void DffRecord::findRecords
+(sal_uInt32 nType, Records_t & rRecords, bool bRecursive, bool bAny)
+{
+ Records_t::iterator aIt = begin();
+
+ while (aIt != end())
+ {
+ Pointer_t pPointer = *aIt;
+ if (bAny || pPointer->getRecordType() == nType)
+ rRecords.push_back(pPointer);
+
+ if (bRecursive)
+ pPointer->findRecords(nType, rRecords, bRecursive,
+ bAny);
+
+ ++aIt;
+ }
+}
+
+void DffRecord::resolveChildren(Properties & rHandler)
+{
+ Records_t::iterator aIt;
+ for (aIt = begin(); aIt != end(); ++aIt)
+ {
+ rHandler.sprm(**aIt);
+ }
+}
+
+void DffRecord::resolveLocal(Properties &)
+{
+}
+
+void DffRecord::resolve(Properties & rHandler)
+{
+ WW8Value::Pointer_t pVal = createValue(getRecordType());
+ rHandler.attribute(NS_rtf::LN_dfftype, *pVal);
+
+ pVal = createValue(getInstance());
+ rHandler.attribute(NS_rtf::LN_dffinstance, *pVal);
+
+ pVal = createValue(getVersion());
+ rHandler.attribute(NS_rtf::LN_dffversion, *pVal);
+
+ pVal = createValue(getU32(0x0));
+ rHandler.attribute(NS_rtf::LN_dffheader, *pVal);
+
+ if (isContainer())
+ {
+ resolveChildren(rHandler);
+ }
+
+ resolveLocal(rHandler);
+
+#if 1
+ WW8BinaryObjReference::Pointer_t pBinObjRef
+ (new WW8BinaryObjReference(this, 0, getCount()));
+ WW8Sprm aSprm(pBinObjRef);
+
+ rHandler.sprm(aSprm);
+#endif
+}
+
+sal_uInt32 DffRecord::getShapeType()
+{
+ sal_uInt32 nResult = 0;
+
+ Records_t aRecords = findRecords(0xf00a);
+
+ if (aRecords.size() > 0)
+ {
+ DffFSP * pDffFSP = dynamic_cast<DffFSP*>((*aRecords.begin()).get());
+ nResult = pDffFSP->get_shptype();
+ }
+
+ return nResult;
+}
+
+sal_uInt32 DffRecord::getShapeId()
+{
+ sal_uInt32 nResult = 0;
+
+ Records_t aRecords = findRecords(0xf00a);
+
+ if (aRecords.size() > 0)
+ {
+ DffFSP * pDffFSP = dynamic_cast<DffFSP*>((*aRecords.begin()).get());
+ nResult = pDffFSP->get_shpid();
+ }
+
+ return nResult;
+}
+
+class DffOPTHandler : public Properties
+{
+ map<int, WW8ValueSharedPointer_t> mMap;
+ int nId;
+
+public:
+ DffOPTHandler() : nId(0) {}
+ virtual ~DffOPTHandler() {}
+
+ virtual void attribute(Id name, Value & val)
+ {
+ switch (name)
+ {
+ case NS_rtf::LN_shppid:
+ nId = val.getInt();
+ break;
+ case NS_rtf::LN_shpvalue:
+ {
+ WW8Value & rTmpVal = dynamic_cast<WW8Value &>(val);
+ WW8ValueSharedPointer_t
+ pVal(dynamic_cast<WW8Value *>(rTmpVal.clone()));
+ mMap[nId] = pVal;
+ }
+ }
+ }
+
+ virtual void sprm(Sprm & /*sprm_*/)
+ {
+ }
+
+ WW8ValueSharedPointer_t & getValue(int nId_)
+ {
+ return mMap[nId_];
+ }
+
+};
+
+sal_uInt32 DffRecord::getShapeBid()
+{
+ sal_uInt32 nResult = 0;
+
+ if (getShapeType() == 75)
+ {
+ Records_t aRecords = findRecords(0xf00b);
+
+ if (aRecords.size() > 0)
+ {
+ DffOPTHandler aHandler;
+ DffOPT * pOpts = dynamic_cast<DffOPT*>((*aRecords.begin()).get());
+
+ sal_uInt32 nCount = pOpts->get_property_count();
+
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ pOpts->get_property(n)->resolve(aHandler);
+ }
+
+ WW8ValueSharedPointer_t pVal = aHandler.getValue(260);
+
+ if (pVal.get() != NULL)
+ nResult = pVal->getInt();
+ }
+ }
+
+ return nResult;
+}
+
+string DffRecord::getType() const
+{
+ return "DffRecord";
+}
+
+Value::Pointer_t DffRecord::getValue()
+{
+ return Value::Pointer_t();
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t DffRecord::getBinary()
+{
+ return writerfilter::Reference<BinaryObj>::Pointer_t();
+}
+
+writerfilter::Reference<Stream>::Pointer_t DffRecord::getStream()
+{
+ return writerfilter::Reference<Stream>::Pointer_t();
+}
+
+writerfilter::Reference<Properties>::Pointer_t DffRecord::getProps()
+{
+ return writerfilter::Reference<Properties>::Pointer_t(this->clone());
+}
+
+string DffRecord::toString() const
+{
+ char sBuffer[1024];
+
+ snprintf(sBuffer, sizeof(sBuffer),
+ "<dffrecord type=\"%" SAL_PRIuUINT32 "\" instance=\"%" SAL_PRIuUINT32 "\" version=\"%" SAL_PRIuUINT32 "\">\n",
+ getRecordType(), getInstance(), getVersion());
+ string aResult = sBuffer;
+
+
+ if (!isContainer())
+ aResult += mSequence.toString();
+ else
+ {
+ WW8StructBase::Sequence aSeq(mSequence, 0, 8);
+ aResult += aSeq.toString();
+ }
+
+ aResult += "</dffrecord>";
+
+ return aResult;
+}
+
+string DffRecord::getName() const
+{
+ return "";
+}
+
+Sprm::Kind DffRecord::getKind()
+{
+ return Sprm::UNKNOWN;
+}
+
+DffBlock::DffBlock(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 nCount, sal_uInt32 nPadding)
+: WW8StructBase(rStream, nOffset, nCount), bInitialized(false),
+ mnPadding(nPadding)
+{
+}
+
+DffBlock::DffBlock(WW8StructBase * pParent, sal_uInt32 nOffset,
+ sal_uInt32 nCount, sal_uInt32 nPadding)
+: WW8StructBase(pParent, nOffset, nCount), bInitialized(false),
+ mnPadding(nPadding)
+{
+}
+
+DffBlock::DffBlock(const DffBlock & rSrc)
+: WW8StructBase(rSrc), writerfilter::Reference<Properties>(rSrc),
+ bInitialized(false), mnPadding(rSrc.mnPadding)
+{
+}
+
+void DffBlock::initChildren()
+{
+ sal_uInt32 nOffset = 0;
+ sal_uInt32 nCount = getCount();
+
+ while (nOffset < nCount)
+ {
+ sal_uInt32 nSize = 0;
+ DffRecord::Pointer_t pDffRecord
+ (createDffRecord(this, nOffset, &nSize));
+
+ if (nSize == 0)
+ break;
+
+ mRecords.push_back(pDffRecord);
+
+ nOffset += nSize + mnPadding;
+ }
+
+ bInitialized = true;
+}
+
+Records_t DffBlock::findRecords(sal_uInt32 nType, bool bRecursive, bool bAny)
+{
+ Records_t aResult;
+
+ findRecords(nType, aResult, bRecursive, bAny);
+
+ return aResult;
+}
+
+void DffBlock::findRecords
+(sal_uInt32 nType, Records_t & rRecords, bool bRecursive, bool bAny)
+{
+ Records_t::iterator aIt = begin();
+
+ while (aIt != end())
+ {
+ DffRecord::Pointer_t pPointer(*aIt);
+
+ if (bAny || pPointer->getRecordType() == nType)
+ rRecords.push_back(pPointer);
+
+ if (bRecursive)
+ pPointer->findRecords(nType, rRecords, bRecursive,
+ bAny);
+
+ ++aIt;
+ }
+}
+
+void DffBlock::resolve(Properties & rHandler)
+{
+ Records_t::iterator aIt;
+
+ for (aIt = begin(); aIt != end(); ++aIt)
+ {
+ DffRecord * pDff = aIt->get();
+ rHandler.sprm(*pDff);
+ }
+}
+
+DffRecord::Pointer_t DffBlock::getShape(sal_uInt32 nSpid)
+{
+ DffRecord::Pointer_t pResult;
+
+ Records_t aRecords = findRecords(0xf004);
+ Records_t::iterator aIt;
+ for (aIt = aRecords.begin(); aIt != aRecords.end(); ++aIt)
+ {
+ DffRecord::Pointer_t pPointer = *aIt;
+
+ Records_t aFSPs = pPointer->findRecords(0xf00a);
+ Records_t::iterator aItFSP = aFSPs.begin();
+
+ if (aItFSP != aFSPs.end())
+ {
+ DffFSP * pFSP = dynamic_cast<DffFSP *>((*aItFSP).get());
+
+ if (pFSP->get_shpid() == nSpid)
+ {
+ pResult = pPointer;
+
+ break;
+ }
+ }
+ }
+
+ return pResult;
+}
+
+DffRecord::Pointer_t DffBlock::getBlip(sal_uInt32 nBlip)
+{
+ DffRecord::Pointer_t pResult;
+
+ if (nBlip > 0)
+ {
+ nBlip--;
+
+ Records_t aRecords = findRecords(0xf007);
+
+ if (nBlip < aRecords.size())
+ {
+ pResult = aRecords[nBlip];
+ }
+ }
+
+ return pResult;
+}
+
+Records_t::iterator DffBlock::begin()
+{
+ if (! bInitialized)
+ initChildren();
+
+ return mRecords.begin();
+}
+
+Records_t::iterator DffBlock::end()
+{
+ if (! bInitialized)
+ initChildren();
+
+ return mRecords.end();
+}
+
+string DffBlock::getType() const
+{
+ return "DffBlock";
+}
+
+}}
diff --git a/writerfilter/source/doctok/Dff.hxx b/writerfilter/source/doctok/Dff.hxx
new file mode 100644
index 000000000000..b0a64f05c303
--- /dev/null
+++ b/writerfilter/source/doctok/Dff.hxx
@@ -0,0 +1,153 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_DFF_HXX
+#define INCLUDED_DFF_HXX
+
+#include <vector>
+#include <WW8StructBase.hxx>
+#include <WW8ResourceModelImpl.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+using std::vector;
+
+class DffBlock;
+
+class DffRecord : public WW8StructBase, public writerfilter::Reference<Properties>,
+ public Sprm
+{
+ bool bInitialized;
+public:
+ typedef boost::shared_ptr<DffRecord> Pointer_t;
+
+protected:
+ typedef vector<Pointer_t> Records_t;
+ Records_t mRecords;
+
+ void initChildren();
+
+public:
+
+ DffRecord(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount);
+ DffRecord(WW8StructBase * pParent, sal_uInt32 nOffset, sal_uInt32 nCount);
+ virtual ~DffRecord() {}
+
+ bool isContainer() const;
+ sal_uInt32 calcSize() const;
+
+ sal_uInt32 getVersion() const;
+ sal_uInt32 getInstance() const;
+ sal_uInt32 getRecordType() const;
+
+ virtual DffRecord * clone() const { return new DffRecord(*this); }
+
+ virtual void resolveLocal(Properties & rHandler);
+ virtual void resolveChildren(Properties & rHandler);
+
+ Records_t findRecords(sal_uInt32 nType, bool bRecursive = true,
+ bool bAny = false);
+
+ void findRecords
+ (sal_uInt32 nType, Records_t & rRecords,
+ bool bRecursive = true, bool bAny = false);
+
+ Records_t::iterator begin();
+ Records_t::iterator end();
+
+ sal_uInt32 getShapeType();
+ sal_uInt32 getShapeId();
+ sal_uInt32 getShapeBid();
+
+ /* Properties methods */
+ virtual void resolve(Properties & rHandler);
+ virtual string getType() const;
+
+ /* Sprm methods */
+ virtual sal_uInt32 getId() const { return getRecordType(); }
+ virtual Value::Pointer_t getValue();
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream();
+ virtual writerfilter::Reference<Properties>::Pointer_t getProps();
+
+ virtual string toString() const;
+ virtual string getName() const;
+
+ virtual Kind getKind();
+
+ friend class DffBlock;
+};
+
+typedef vector<DffRecord::Pointer_t> Records_t;
+
+class DffBlock : public WW8StructBase,
+ public writerfilter::Reference<Properties>
+{
+ bool bInitialized;
+ sal_uInt32 mnPadding;
+
+ Records_t mRecords;
+
+protected:
+ void initChildren();
+
+public:
+ typedef boost::shared_ptr<DffBlock> Pointer_t;
+
+ DffBlock(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount, sal_uInt32 nPadding);
+ DffBlock(WW8StructBase * pParent, sal_uInt32 nOffset, sal_uInt32 nCount, sal_uInt32 nPadding);
+ DffBlock(const DffBlock & rSrc);
+ virtual ~DffBlock() {}
+
+ Records_t findRecords(sal_uInt32 nType, bool bRecursive = true,
+ bool bAny = false);
+
+ void findRecords(sal_uInt32 nType, Records_t & rRecords,
+ bool bRecursive = true, bool bAny = false);
+
+ DffRecord::Pointer_t getShape(sal_uInt32 nSpid);
+ DffRecord::Pointer_t getBlip(sal_uInt32 nBlip);
+
+ Records_t::iterator begin();
+ Records_t::iterator end();
+
+ /* Properties methods */
+ virtual void resolve(Properties & rHandler);
+ virtual string getType() const;
+};
+
+DffRecord *
+createDffRecord(WW8StructBase * pParent, sal_uInt32 nOffset,
+ sal_uInt32 * nSize = NULL);
+DffRecord *
+createDffRecord(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 * nSize = NULL);
+
+}}
+
+#endif
diff --git a/writerfilter/source/doctok/DffImpl.cxx b/writerfilter/source/doctok/DffImpl.cxx
new file mode 100644
index 000000000000..fcb2fe6267be
--- /dev/null
+++ b/writerfilter/source/doctok/DffImpl.cxx
@@ -0,0 +1,518 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "resources.hxx"
+#include "WW8DocumentImpl.hxx"
+
+namespace writerfilter {
+namespace doctok
+{
+
+class ShapeTypeToString
+{
+ typedef boost::shared_ptr<ShapeTypeToString> Pointer_t;
+
+ static Pointer_t pInstance;
+
+ typedef map<sal_uInt32, string> Map_t;
+ Map_t mMap;
+
+protected:
+ ShapeTypeToString();
+
+public:
+ static Pointer_t Instance()
+ {
+ if (pInstance == NULL)
+ pInstance = Pointer_t(new ShapeTypeToString());
+
+ return pInstance;
+ }
+
+ string operator()(sal_uInt32 nShapeType)
+ {
+ return mMap[nShapeType];
+ }
+};
+
+ShapeTypeToString::Pointer_t ShapeTypeToString::pInstance;
+
+ShapeTypeToString::ShapeTypeToString()
+{
+ mMap[0]="NotPrimitive";
+ mMap[1]="Rectangle";
+ mMap[2]="RoundRectangle";
+ mMap[3]="Ellipse";
+ mMap[4]="Diamond";
+ mMap[5]="IsocelesTriangle";
+ mMap[6]="RightTriangle";
+ mMap[7]="Parallelogram";
+ mMap[8]="Trapezoid";
+ mMap[9]="Hexagon";
+ mMap[10]="Octagon";
+ mMap[11]="Plus";
+ mMap[12]="Star";
+ mMap[13]="Arrow";
+ mMap[14]="ThickArrow";
+ mMap[15]="HomePlate";
+ mMap[16]="Cube";
+ mMap[17]="Balloon";
+ mMap[18]="Seal";
+ mMap[19]="Arc";
+ mMap[20]="Line";
+ mMap[21]="Plaque";
+ mMap[22]="Can";
+ mMap[23]="Donut";
+ mMap[24]="TextSimple";
+ mMap[25]="TextOctagon";
+ mMap[26]="TextHexagon";
+ mMap[27]="TextCurve";
+ mMap[28]="TextWave";
+ mMap[29]="TextRing";
+ mMap[30]="TextOnCurve";
+ mMap[31]="TextOnRing";
+ mMap[32]="StraightConnector1";
+ mMap[33]="BentConnector2";
+ mMap[34]="BentConnector3";
+ mMap[35]="BentConnector4";
+ mMap[36]="BentConnector5";
+ mMap[37]="CurvedConnector2";
+ mMap[38]="CurvedConnector3";
+ mMap[39]="CurvedConnector4";
+ mMap[40]="CurvedConnector5";
+ mMap[41]="Callout1";
+ mMap[42]="Callout2";
+ mMap[43]="Callout3";
+ mMap[44]="AccentCallout1";
+ mMap[45]="AccentCallout2";
+ mMap[46]="AccentCallout3";
+ mMap[47]="BorderCallout1";
+ mMap[48]="BorderCallout2";
+ mMap[49]="BorderCallout3";
+ mMap[50]="AccentBorderCallout1";
+ mMap[51]="AccentBorderCallout2";
+ mMap[52]="AccentBorderCallout3";
+ mMap[53]="Ribbon";
+ mMap[54]="Ribbon2";
+ mMap[55]="Chevron";
+ mMap[56]="Pentagon";
+ mMap[57]="NoSmoking";
+ mMap[58]="Seal8";
+ mMap[59]="Seal16";
+ mMap[60]="Seal32";
+ mMap[61]="WedgeRectCallout";
+ mMap[62]="WedgeRRectCallout";
+ mMap[63]="WedgeEllipseCallout";
+ mMap[64]="Wave";
+ mMap[65]="FoldedCorner";
+ mMap[66]="LeftArrow";
+ mMap[67]="DownArrow";
+ mMap[68]="UpArrow";
+ mMap[69]="LeftRightArrow";
+ mMap[70]="UpDownArrow";
+ mMap[71]="IrregularSeal1";
+ mMap[72]="IrregularSeal2";
+ mMap[73]="LightningBolt";
+ mMap[74]="Heart";
+ mMap[75]="PictureFrame";
+ mMap[76]="QuadArrow";
+ mMap[77]="LeftArrowCallout";
+ mMap[78]="RightArrowCallout";
+ mMap[79]="UpArrowCallout";
+ mMap[80]="DownArrowCallout";
+ mMap[81]="LeftRightArrowCallout";
+ mMap[82]="UpDownArrowCallout";
+ mMap[83]="QuadArrowCallout";
+ mMap[84]="Bevel";
+ mMap[85]="LeftBracket";
+ mMap[86]="RightBracket";
+ mMap[87]="LeftBrace";
+ mMap[88]="RightBrace";
+ mMap[89]="LeftUpArrow";
+ mMap[90]="BentUpArrow";
+ mMap[91]="BentArrow";
+ mMap[92]="Seal24";
+ mMap[93]="StripedRightArrow";
+ mMap[94]="NotchedRightArrow";
+ mMap[95]="BlockArc";
+ mMap[96]="SmileyFace";
+ mMap[97]="VerticalScroll";
+ mMap[98]="HorizontalScroll";
+ mMap[99]="CircularArrow";
+ mMap[100]="NotchedCircularArrow";
+ mMap[101]="UturnArrow";
+ mMap[102]="CurvedRightArrow";
+ mMap[103]="CurvedLeftArrow";
+ mMap[104]="CurvedUpArrow";
+ mMap[105]="CurvedDownArrow";
+ mMap[106]="CloudCallout";
+ mMap[107]="EllipseRibbon";
+ mMap[108]="EllipseRibbon2";
+ mMap[109]="FlowChartProcess";
+ mMap[110]="FlowChartDecision";
+ mMap[111]="FlowChartInputOutput";
+ mMap[112]="FlowChartPredefinedProcess";
+ mMap[113]="FlowChartInternalStorage";
+ mMap[114]="FlowChartDocument";
+ mMap[115]="FlowChartMultidocument";
+ mMap[116]="FlowChartTerminator";
+ mMap[117]="FlowChartPreparation";
+ mMap[118]="FlowChartManualInput";
+ mMap[119]="FlowChartManualOperation";
+ mMap[120]="FlowChartConnector";
+ mMap[121]="FlowChartPunchedCard";
+ mMap[122]="FlowChartPunchedTape";
+ mMap[123]="FlowChartSummingJunction";
+ mMap[124]="FlowChartOr";
+ mMap[125]="FlowChartCollate";
+ mMap[126]="FlowChartSort";
+ mMap[127]="FlowChartExtract";
+ mMap[128]="FlowChartMerge";
+ mMap[129]="FlowChartOfflineStorage";
+ mMap[130]="FlowChartOnlineStorage";
+ mMap[131]="FlowChartMagneticTape";
+ mMap[132]="FlowChartMagneticDisk";
+ mMap[133]="FlowChartMagneticDrum";
+ mMap[134]="FlowChartDisplay";
+ mMap[135]="FlowChartDelay";
+ mMap[136]="TextPlainText";
+ mMap[137]="TextStop";
+ mMap[138]="TextTriangle";
+ mMap[139]="TextTriangleInverted";
+ mMap[140]="TextChevron";
+ mMap[141]="TextChevronInverted";
+ mMap[142]="TextRingInside";
+ mMap[143]="TextRingOutside";
+ mMap[144]="TextArchUpCurve";
+ mMap[145]="TextArchDownCurve";
+ mMap[146]="TextCircleCurve";
+ mMap[147]="TextButtonCurve";
+ mMap[148]="TextArchUpPour";
+ mMap[149]="TextArchDownPour";
+ mMap[150]="TextCirclePour";
+ mMap[151]="TextButtonPour";
+ mMap[152]="TextCurveUp";
+ mMap[153]="TextCurveDown";
+ mMap[154]="TextCascadeUp";
+ mMap[155]="TextCascadeDown";
+ mMap[156]="TextWave1";
+ mMap[157]="TextWave2";
+ mMap[158]="TextWave3";
+ mMap[159]="TextWave4";
+ mMap[160]="TextInflate";
+ mMap[161]="TextDeflate";
+ mMap[162]="TextInflateBottom";
+ mMap[163]="TextDeflateBottom";
+ mMap[164]="TextInflateTop";
+ mMap[165]="TextDeflateTop";
+ mMap[166]="TextDeflateInflate";
+ mMap[167]="TextDeflateInflateDeflate";
+ mMap[168]="TextFadeRight";
+ mMap[169]="TextFadeLeft";
+ mMap[170]="TextFadeUp";
+ mMap[171]="TextFadeDown";
+ mMap[172]="TextSlantUp";
+ mMap[173]="TextSlantDown";
+ mMap[174]="TextCanUp";
+ mMap[175]="TextCanDown";
+ mMap[176]="FlowChartAlternateProcess";
+ mMap[177]="FlowChartOffpageConnector";
+ mMap[178]="Callout90";
+ mMap[179]="AccentCallout90";
+ mMap[180]="BorderCallout90";
+ mMap[181]="AccentBorderCallout90";
+ mMap[182]="LeftRightUpArrow";
+ mMap[183]="Sun";
+ mMap[184]="Moon";
+ mMap[185]="BracketPair";
+ mMap[186]="BracePair";
+ mMap[187]="Seal4";
+ mMap[188]="DoubleWave";
+ mMap[189]="ActionButtonBlank";
+ mMap[190]="ActionButtonHome";
+ mMap[191]="ActionButtonHelp";
+ mMap[192]="ActionButtonInformation";
+ mMap[193]="ActionButtonForwardNext";
+ mMap[194]="ActionButtonBackPrevious";
+ mMap[195]="ActionButtonEnd";
+ mMap[196]="ActionButtonBeginning";
+ mMap[197]="ActionButtonReturn";
+ mMap[198]="ActionButtonDocument";
+ mMap[199]="ActionButtonSound";
+ mMap[200]="ActionButtonMovie";
+ mMap[201]="HostControl";
+ mMap[202]="TextBox";
+}
+
+// DffOPT
+
+sal_uInt32 DffOPT::get_property_count()
+{
+ return getInstance();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+DffOPT::get_property(sal_uInt32 nPos)
+{
+ WW8FOPTE * pTmp = new WW8FOPTE(this, 0x8 + nPos * WW8FOPTE::getSize());
+ pTmp->setIndex(nPos);
+
+ return writerfilter::Reference<Properties>::Pointer_t(pTmp);
+}
+
+sal_uInt32 DffOPT::get_extraoffset_count()
+{
+ return get_property_count();
+}
+
+sal_uInt32 DffOPT::get_extraoffset(sal_uInt32 pos)
+{
+ sal_uInt32 nResult;
+ sal_uInt32 nCount = get_property_count();
+
+ if (pos < nCount)
+ {
+ nResult = 0x8 + nCount * WW8FOPTE::getSize();
+
+ for (sal_uInt32 n = 0; n < pos; ++n)
+ {
+ WW8FOPTE aFOPTE(this, 0x8 + n * WW8FOPTE::getSize());
+
+ if (aFOPTE.get_fComplex())
+ {
+ sal_uInt32 nValue = aFOPTE.get_op();
+ nResult += nValue;
+ }
+ }
+ }
+ else
+ nResult = getCount();
+
+ return nResult;
+}
+
+//DffDGG
+
+sal_uInt32 DffDGG::get_fidcl_count()
+{
+ return (getCount() - 0x18) / WW8FIDCL::getSize();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+DffDGG::get_fidcl(sal_uInt32 pos)
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8FIDCL(this, 0x18 + pos * WW8FIDCL::getSize()));
+}
+
+
+// DffBSE
+
+rtl::OUString DffBSE::get_blipname()
+{
+ rtl::OUString sResult;
+ WW8FBSE aFBSE(this, 0x8);
+
+ if (aFBSE.get_cbName() > 0)
+ sResult = getString(0x24, aFBSE.get_cbName());
+
+ return sResult;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+DffBSE::get_blip()
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ WW8FBSE aFBSE(this, 8);
+ sal_uInt32 nOffset = 8 + WW8FBSE::getSize() + aFBSE.get_cbName();
+
+ if (nOffset + 8 < getCount())
+ {
+ WW8StructBase aTmp(this, nOffset, 0x8);
+
+ sal_uInt32 nCount = getCount() - 8;
+
+ if (aTmp.getU32(0x4) - 8 < nCount)
+ nCount = aTmp.getU32(0x4) - 8;
+
+ if (nCount)
+ {
+ DffRecord * pRecord = createDffRecord(this, nOffset);
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pRecord);
+ }
+ }
+ else
+ {
+ nOffset = sal::static_int_cast<sal_Int32>(aFBSE.get_foDelay());
+ if (! (nOffset & 1 << 31) && nOffset > 0 && getDocument() != NULL)
+ {
+ WW8StructBase aStructBase(*getDocument()->getDocStream(),
+ nOffset, 0x8);
+
+ DffRecord * pRecord =
+ createDffRecord(*getDocument()->getDocStream(),
+ aFBSE.get_foDelay());
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pRecord);
+ }
+ }
+
+ return pResult;
+}
+
+#if 0
+WW8BinaryObjReference::Pointer_t DffBSE::get_binary()
+{
+ WW8BinaryObjReference::Pointer_t pResult;
+
+ if (getCount() > 0x45)
+ pResult = WW8BinaryObjReference::Pointer_t
+ (new WW8BinaryObjReference(this, 0x45,
+ getCount() - 0x45));
+ else
+ {
+ WW8FBSE aFBSE(this, 0x8);
+
+ sal_Int32 nOffset = sal::static_int_cast<sal_Int32>(aFBSE.get_foDelay());
+ if (nOffset > 0 && getDocument() != NULL)
+ {
+ WW8StructBase aStructBase(*getDocument()->getDocStream(),
+ nOffset, 0x8);
+
+ sal_uInt32 nCount = aStructBase.getU32(0x4) - 0x11;
+
+ pResult = WW8BinaryObjReference::Pointer_t
+ (new WW8BinaryObjReference(*getDocument()->getDocStream(),
+ aFBSE.get_foDelay() + 0x19, nCount));
+ }
+ }
+
+ return pResult;
+}
+#endif
+
+// WW8FOPTE
+void WW8FOPTE::resolveNoAuto(Properties & rHandler)
+{
+ sal_uInt16 nId = get_pid() + 1;
+ sal_uInt32 nOp = get_op();
+ sal_uInt32 nMask = 2;
+
+ while (isBooleanDffOpt(nId))
+ {
+ WW8Value::Pointer_t pVal = createValue(getDffOptName(nId));
+ rHandler.attribute(NS_rtf::LN_shpname, *pVal);
+
+ pVal = createValue((nOp & nMask) != 0);
+ rHandler.attribute(NS_rtf::LN_shpvalue, *pVal);
+
+ --nId;
+ nMask = nMask << 1;
+ }
+}
+
+// DffFSP
+
+rtl::OUString DffFSP::get_shptypename()
+{
+ string aName = (*ShapeTypeToString::Instance())(get_shptype());
+
+ return rtl::OUString::createFromAscii(aName.c_str());
+}
+
+// DffSpContainer
+
+writerfilter::Reference<Properties>::Pointer_t
+DffSpContainer::get_blip()
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ if (getShapeType() == 75)
+ {
+ sal_uInt32 nBid = getShapeBid();
+
+ if (getDocument() != NULL && nBid > 0)
+ pResult = getDocument()->getBlip(nBid);
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+DffSpContainer::get_shptxt()
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (getShapeType() == 202)
+ {
+ sal_uInt32 nShpId = getShapeId();
+
+ if (getDocument() != NULL)
+ pResult = getDocument()->getTextboxText(nShpId);
+ }
+
+ return pResult;
+}
+
+// DffUDefProp
+
+void DffUDefProp::resolveNoAuto(Properties & rHandler)
+{
+ sal_uInt32 nOffset = 0x8;
+ sal_uInt32 nCount = getCount();
+
+ while (nOffset + 6 <= nCount)
+ {
+ sal_uInt16 nPid = getU16(nOffset);
+ sal_uInt32 nValue = getU32(nOffset + 2);
+
+ sal_uInt32 nAttrid = 0;
+ switch (nPid)
+ {
+ case 0x38f: nAttrid = NS_rtf::LN_XAlign; break;
+ case 0x390: nAttrid = NS_rtf::LN_XRelTo; break;
+ case 0x391: nAttrid = NS_rtf::LN_YAlign; break;
+ case 0x392: nAttrid = NS_rtf::LN_YRelTo; break;
+ case 0x3bf: nAttrid = NS_rtf::LN_LayoutInTableCell; break;
+ case 0x53f: nAttrid = NS_rtf::LN_Inline; break;
+ default:
+ break;
+ }
+
+ if (nAttrid != 0)
+ {
+ WW8Value::Pointer_t pVal = createValue(nValue);
+ rHandler.attribute(nAttrid, *pVal);
+ }
+
+ nOffset += 6;
+ }
+}
+
+}}
diff --git a/writerfilter/source/doctok/PLCF.hxx b/writerfilter/source/doctok/PLCF.hxx
new file mode 100644
index 000000000000..fefff12f6c11
--- /dev/null
+++ b/writerfilter/source/doctok/PLCF.hxx
@@ -0,0 +1,195 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_PLCF_HXX
+#define INCLUDED_PLCF_HXX
+
+#include <boost/shared_ptr.hpp>
+#include <WW8StructBase.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+class Empty
+{
+public:
+ typedef boost::shared_ptr<Empty> Pointer_t;
+
+ Empty() {}
+ virtual ~Empty() {}
+
+ sal_uInt32 getSize() { return 0; }
+};
+
+template <class T>
+/**
+ Plex in File
+
+ A PLCF is a concatenation of two arrays. The first array contains
+ file character positions. The second array contains elements of
+ type T. If the first array contains N elements, the second contains
+ N - 1 elements. The N-th element in the first array corresponds to
+ the N-th element of the second array.
+
+ The second array is referred to as the payload.
+ */
+class PLCF : public WW8StructBase
+{
+ /// number of entries
+ sal_uInt32 nEntryCount;
+
+ /// offset to payload
+ sal_uInt32 nPayloadOffset;
+
+ /// internal method to calculate the number of entries
+ sal_uInt32 getEntryCount_() const;
+
+public:
+ typedef boost::shared_ptr< PLCF< T > > Pointer_t;
+
+ PLCF(sal_uInt32 nLength)
+ : WW8StructBase(nLength), nEntryCount(getEntryCount_()),
+ nPayloadOffset((nEntryCount + 1) * 4)
+ {
+ }
+
+ PLCF(WW8Stream & rStream,
+ sal_Int32 nOffset, sal_Int32 nCount)
+ : WW8StructBase(rStream, nOffset, nCount),
+ nEntryCount(getEntryCount_()),
+ nPayloadOffset((nEntryCount + 1) * 4)
+ {
+ }
+
+ PLCF(const Sequence & rSequence)
+ : WW8StructBase(rSequence), nEntryCount(getEntryCount_()),
+ nPayloadOffset((nEntryCount + 1) * 4)
+ {
+ }
+
+ /**
+ Return the number of elements in the PLCF-
+ */
+ sal_uInt32 getEntryCount() const { return nEntryCount; }
+
+ /**
+ Return the file character position of a certain element.
+
+ @param nIndex the index of the element
+ */
+ sal_uInt32 getFc(sal_uInt32 nIndex) const;
+
+ /**
+ Return a C++ pointer to a certain payload entry.
+
+ @param nIndex the index of the element
+ */
+ T * getEntryPointer(sal_uInt32 nIndex) const;
+
+ /**
+ Return a shared pointer to a certain payload element.
+
+ @param nIndex the index of the element
+ */
+ typename T::Pointer_t getEntry(sal_uInt32 nIndex) const;
+
+ /**
+ Return a C++ pointer a certain payload element.
+
+ @param nFc the file character position of the element
+ */
+ T * getEntryByFc(sal_uInt32 nFc) const;
+
+ virtual void dump(OutputWithDepth<string> & out) const;
+};
+
+template <class T>
+sal_uInt32 PLCF<T>::getEntryCount_() const
+{
+ return (getCount() - 4) / (T::getSize() + 4);
+}
+
+template <class T>
+sal_uInt32 PLCF<T>::getFc(sal_uInt32 nIndex) const
+{
+ return getU32(nIndex * 4);
+}
+
+template <class T>
+T * PLCF<T>::getEntryPointer(sal_uInt32 nIndex) const
+{
+ return new T(mSequence, nPayloadOffset + nIndex * T::getSize(),
+ T::getSize());
+}
+
+template <class T>
+typename T::Pointer_t PLCF<T>::getEntry(sal_uInt32 nIndex) const
+{
+ typename T::Pointer_t pResult(getEntryPointer(nIndex));
+
+ return pResult;
+}
+
+
+template <class T>
+T * PLCF<T>::getEntryByFc(sal_uInt32 nFc) const
+{
+ T * pResult = NULL;
+
+ sal_uInt32 n = getEntryCount();
+
+ while (getFc(n) > nFc)
+ n--;
+
+ pResult = getEntryPointer(n);
+
+ return pResult;
+}
+
+template <class T>
+void PLCF<T>::dump(OutputWithDepth<string> & output_) const
+{
+ output_.addItem("<plcf>");
+ WW8StructBase::dump(output_);
+
+ sal_uInt32 nCount = getEntryCount();
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ Fc aFc = getFc(n);
+ typename T::Pointer_t pT = getEntry(n);
+
+ output_.addItem("<plcfentry cpandfc=\"" + aFc.toString() + "\">");
+ pT->dump(output_);
+ output_.addItem("</plcfentry>");
+ }
+ output_.addItem("</plcf>>");
+}
+
+}}
+
+#endif // INCLUDED_PLCF_HXX
diff --git a/writerfilter/source/doctok/WW8Annotation.cxx b/writerfilter/source/doctok/WW8Annotation.cxx
new file mode 100644
index 000000000000..aabcd5525e90
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Annotation.cxx
@@ -0,0 +1,37 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+rtl::OUString WW8ATRD::get_xstUsrInitl()
+{
+ return getString(0x0);
+}
+}}
diff --git a/writerfilter/source/doctok/WW8BinTable.hxx b/writerfilter/source/doctok/WW8BinTable.hxx
new file mode 100644
index 000000000000..4105a06b5fd4
--- /dev/null
+++ b/writerfilter/source/doctok/WW8BinTable.hxx
@@ -0,0 +1,88 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_BIN_TABLE_HXX
+#define INCLUDED_WW8_BIN_TABLE_HXX
+
+#include <boost/shared_ptr.hpp>
+#include <string>
+#include <WW8FKP.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+/**
+ A bintable.
+
+ Word uses bintables to associate FC ranges with FKPs. A bintable
+ has a list of FCs. At each FC a range begins. The length of the
+ range is given by the distance of the according CPs.
+ */
+class WW8BinTable
+{
+public:
+ virtual ~WW8BinTable() {};
+ /**
+ Shared pointer to a bintable.
+ */
+ typedef boost::shared_ptr<WW8BinTable> Pointer_t;
+
+ /**
+ Return count of entries.
+ */
+ virtual sal_uInt32 getEntryCount() const = 0;
+
+ /**
+ Return FC from bintable.
+
+ @param nIndex index in bintable to return FC from
+ */
+ virtual Fc getFc(sal_uInt32 nIndex) const = 0;
+
+ /**
+ Return page number.
+
+ @param nIndex index in bintable to return page number from
+ */
+ virtual sal_uInt32 getPageNumber(sal_uInt32 nIndex) const = 0;
+
+ /**
+ Return page number associated with FC.
+
+ @param rFc FC to return page number for
+ */
+ virtual sal_uInt32 getPageNumber(const Fc & rFc) const = 0;
+
+ /**
+ Return string representation of bintable.
+ */
+ virtual string toString() const = 0;
+};
+}}
+
+#endif // INCLUDED_WW8_BIN_TABLE_HXX
diff --git a/writerfilter/source/doctok/WW8BinTableImpl.cxx b/writerfilter/source/doctok/WW8BinTableImpl.cxx
new file mode 100644
index 000000000000..05959cf359b1
--- /dev/null
+++ b/writerfilter/source/doctok/WW8BinTableImpl.cxx
@@ -0,0 +1,106 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "WW8BinTableImpl.hxx"
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+void PageNumber::dump(OutputWithDepth<string> & /*output*/) const
+{
+}
+
+sal_uInt32 WW8BinTableImpl::getPageNumber(const Fc & rFc) const
+{
+ sal_uInt32 nResult = 0;
+
+ if (mPageMap.find(rFc) == mPageMap.end())
+ {
+#if 0
+ sal_uInt32 n = getEntryCount();
+
+ while (rFc < getFc(n))
+ {
+ --n;
+ }
+
+ nResult = getPageNumber(n);
+ mPageMap[rFc] = nResult;
+#else
+ sal_uInt32 left = 0;
+ sal_uInt32 right = getEntryCount();
+
+ while (right - left > 1)
+ {
+ sal_uInt32 middle = (right + left) / 2;
+
+ Fc aFc = getFc(middle);
+
+ if (rFc < aFc)
+ right = middle;
+ else
+ left = middle;
+
+ }
+
+ nResult = getPageNumber(left);
+ mPageMap[rFc] = nResult;
+#endif
+
+ }
+ else
+ nResult = mPageMap[rFc];
+
+ return nResult;
+}
+
+string WW8BinTableImpl::toString() const
+{
+ string aResult;
+ char sBuffer[255];
+
+ aResult += "(";
+
+ for (sal_uInt32 n = 0; n < getEntryCount(); n++)
+ {
+ if (n > 0)
+ aResult += ", ";
+
+ snprintf(sBuffer, 255, "%" SAL_PRIxUINT32, getFc(n).get());
+ aResult += sBuffer;
+ aResult += "->";
+ snprintf(sBuffer, 255, "%" SAL_PRIxUINT32, getPageNumber(n));
+ aResult += sBuffer;
+ }
+
+ aResult += ")";
+
+ return aResult;
+}
+}}
diff --git a/writerfilter/source/doctok/WW8BinTableImpl.hxx b/writerfilter/source/doctok/WW8BinTableImpl.hxx
new file mode 100644
index 000000000000..d3119c13dd20
--- /dev/null
+++ b/writerfilter/source/doctok/WW8BinTableImpl.hxx
@@ -0,0 +1,98 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_BIN_TABLE_IMPL_HXX
+#define INCLUDED_WW8_BIN_TABLE_IMPL_HXX
+
+#include <istream>
+#include <WW8BinTable.hxx>
+#include <PLCF.hxx>
+
+#include <hash_map>
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+/**
+ A number of a FKP.
+ */
+class PageNumber
+{
+ /// the page number
+ sal_uInt32 mnPageNumber;
+
+public:
+ /// Pointer to a page number
+ typedef boost::shared_ptr<PageNumber> Pointer_t;
+
+ /// get size of a page number
+ static size_t getSize() { return 4; }
+
+ PageNumber(WW8StructBase::Sequence & rSeq, sal_uInt32 nOffset,
+ sal_uInt32 /*nCount*/)
+ : mnPageNumber(getU32(rSeq, nOffset))
+ {
+ }
+
+ /// Return the page number
+ sal_uInt32 get() const { return mnPageNumber; }
+
+ virtual void dump(OutputWithDepth<string> & out) const;
+};
+
+/**
+ Implementation class for a binary table
+ */
+class WW8BinTableImpl : public WW8BinTable
+{
+ /// PLCF containing the numbers of the FKPs of the binary table
+ PLCF<PageNumber> mData;
+ mutable hash_map<Fc, sal_uInt32, FcHash> mPageMap;
+
+public:
+ WW8BinTableImpl(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 nCount)
+ : mData(rStream, nOffset, nCount)
+
+ {
+ }
+
+ virtual sal_uInt32 getEntryCount() const
+ { return mData.getEntryCount(); }
+ virtual Fc getFc(sal_uInt32 nIndex) const
+ { return mData.getFc(nIndex); }
+ virtual sal_uInt32 getPageNumber(sal_uInt32 nIndex) const
+ { return mData.getEntry(nIndex)->get(); }
+ virtual sal_uInt32 getPageNumber(const Fc & rFc) const;
+ virtual string toString() const;
+};
+
+}}
+
+#endif // INCLUDED_WW8_BIN_TABLE_IMPL_HXX
diff --git a/writerfilter/source/doctok/WW8Clx.cxx b/writerfilter/source/doctok/WW8Clx.cxx
new file mode 100644
index 000000000000..d794afd3ce60
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Clx.cxx
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <com/sun/star/io/XSeekable.hpp>
+#include <WW8Clx.hxx>
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+WW8Clx::WW8Clx(WW8Stream & rStream,
+ sal_uInt32 nOffset, sal_uInt32 nCount)
+: WW8StructBase(rStream, nOffset, nCount), nOffsetPieceTable(0)
+{
+ while (getU8(nOffsetPieceTable) != 2)
+ {
+ nOffsetPieceTable += getU16(nOffsetPieceTable + 1) + 3;
+ }
+}
+
+sal_uInt32 WW8Clx::getPieceCount() const
+{
+ return (getU32(nOffsetPieceTable + 1) - 4) / 12;
+}
+
+sal_uInt32 WW8Clx::getCp(sal_uInt32 nIndex) const
+{
+ return getU32(nOffsetPieceTable + 5 + nIndex * 4);
+}
+
+sal_uInt32 WW8Clx::getFc(sal_uInt32 nIndex) const
+{
+ sal_uInt32 nResult = getU32(nOffsetPieceTable + 5 +
+ (getPieceCount() + 1) * 4 +
+ nIndex * 8 + 2);
+
+ if (nResult & 0x40000000)
+ nResult = (nResult & ~0x40000000) / 2;
+
+ return nResult;
+}
+
+sal_Bool WW8Clx::isComplexFc(sal_uInt32 nIndex) const
+{
+ sal_Bool bResult = sal_False;
+ sal_uInt32 nTmp = getU32(nOffsetPieceTable + 5 +
+ (getPieceCount() + 1) * 4 +
+ nIndex * 8 + 2);
+ if (nTmp & 0x40000000)
+ bResult = sal_True;
+
+ return bResult;
+}
+
+void WW8Clx::dump(OutputWithDepth<string> & o) const
+{
+ WW8StructBase::dump(o);
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8Clx.hxx b/writerfilter/source/doctok/WW8Clx.hxx
new file mode 100644
index 000000000000..7085965a689a
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Clx.hxx
@@ -0,0 +1,93 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_CLX_HXX
+#define INCLUDED_WW8_CLX_HXX
+
+#include <resources.hxx>
+
+#ifndef INCLUDED_WW8_OUTPUT_WITH_DEPTH_HXX
+#include <WW8OutputWithDepth.hxx>
+#endif
+
+namespace writerfilter {
+namespace doctok
+{
+
+/**
+ Piece table as stored in a Word file.
+
+ It contains character positions (CPs) and file character positions
+ (FCs). Each CP is correlated to one FC.
+ */
+class WW8Clx : public WW8StructBase
+{
+ /// Pointer to the file information block.
+ WW8Fib::Pointer_t pFib;
+
+ /// Offset where FCs begin
+ sal_uInt32 nOffsetPieceTable;
+
+public:
+ /// Pointer to Clx.
+ typedef boost::shared_ptr<WW8Clx> Pointer_t;
+
+ WW8Clx(WW8Stream & rStream,
+ sal_uInt32 nOffset, sal_uInt32 nCount);
+
+ virtual void dump(OutputWithDepth<string> & o) const;
+
+ /**
+ Return the number of pieces.
+ */
+ sal_uInt32 getPieceCount() const;
+
+ /**
+ Return a certain character position.
+
+ @param nIndex index of the character position
+ */
+ sal_uInt32 getCp(sal_uInt32 nIndex) const;
+
+ /**
+ Return a certain file character position.
+
+ @param nIndex index of the file character position
+ */
+ sal_uInt32 getFc(sal_uInt32 nIndex) const;
+
+ /**
+ Return if a certain FC is complex.
+
+ @nIndex index of the FC
+ */
+ sal_Bool isComplexFc(sal_uInt32 nIndex) const;
+
+};
+}}
+
+#endif
diff --git a/writerfilter/source/doctok/WW8CpAndFc.cxx b/writerfilter/source/doctok/WW8CpAndFc.cxx
new file mode 100644
index 000000000000..ecf5f895e91f
--- /dev/null
+++ b/writerfilter/source/doctok/WW8CpAndFc.cxx
@@ -0,0 +1,130 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <WW8CpAndFc.hxx>
+
+#include <iterator>
+#include <algorithm>
+#include <string>
+#include <map>
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+bool operator < (const Cp & rA, const Cp & rB)
+{
+ return rA.nCp < rB.nCp;
+}
+
+bool operator == (const Cp & rA, const Cp & rB)
+{
+ return rA.nCp == rB.nCp;
+}
+
+string Cp::toString() const
+{
+ char sBuffer[256];
+
+ snprintf(sBuffer, 255, "%" SAL_PRIxUINT32 "", get());
+
+ return string(sBuffer);
+}
+
+ostream & operator << (ostream & o, const Cp & rCp)
+{
+ return o << rCp.toString();
+}
+
+bool operator < (const Fc & rA, const Fc & rB)
+{
+ return rA.mnFc < rB.mnFc;
+}
+
+bool operator == (const Fc & rA, const Fc & rB)
+{
+ return rA.mnFc == rB.mnFc;
+}
+
+string Fc::toString() const
+{
+ char sBuffer[256];
+
+ snprintf(sBuffer, 255, "(%" SAL_PRIxUINT32 ", %s)", static_cast<sal_uInt32>(get()),
+ isComplex() ? "true" : "false");
+
+ return string(sBuffer);
+}
+
+ostream & operator << (ostream & o, const Fc & rFc)
+{
+
+ return o << rFc.toString();
+}
+
+bool operator < (const CpAndFc & rA, const CpAndFc & rB)
+{
+ bool bResult = false;
+
+ if (rA.mCp < rB.mCp)
+ bResult = true;
+ else if (rA.mCp == rB.mCp && rA.mType < rB.mType)
+ bResult = true;
+
+ return bResult;
+}
+
+bool operator == (const CpAndFc & rA, const CpAndFc & rB)
+{
+ return rA.mCp == rB.mCp;
+}
+
+ostream & operator << (ostream & o, const CpAndFc & rCpAndFc)
+{
+ return o << rCpAndFc.toString();
+}
+
+ostream & operator << (ostream & o, const CpAndFcs & rCpAndFcs)
+{
+ copy(rCpAndFcs.begin(), rCpAndFcs.end(),
+ ostream_iterator<CpAndFc>(o, ", "));
+
+ char sBuffer[256];
+
+ snprintf(sBuffer, 255, "%" SAL_PRI_SIZET "u", rCpAndFcs.size());
+ o << sBuffer;
+
+ return o;
+}
+
+CpAndFc::CpAndFc(const Cp & rCp, const Fc & rFc, PropertyType eType_)
+: mCp(rCp), mFc(rFc), mType(eType_)
+{
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8CpAndFc.hxx b/writerfilter/source/doctok/WW8CpAndFc.hxx
new file mode 100644
index 000000000000..86a8b971a7d6
--- /dev/null
+++ b/writerfilter/source/doctok/WW8CpAndFc.hxx
@@ -0,0 +1,360 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_CP_AND_FC_HXX
+#define INCLUDED_WW8_CP_AND_FC_HXX
+
+#include <sal/types.h>
+#ifndef INCLUDED_DOCUMENT_HXX
+#include <doctok/WW8Document.hxx>
+#endif
+#include <set>
+#include <hash_map>
+#include <iostream>
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+template <class T>
+bool operator <= (const T & rA, const T & rB)
+{
+ return ! ( rB < rA );
+}
+
+/**
+ A character position.
+
+ This is a wrapper to make the type for WW8 character position (CP)
+ distinct from WW8 file character positions (FC).
+*/
+struct Cp
+{
+ sal_uInt32 nCp; // the WW8 character position
+
+ Cp() : nCp(0) {}
+
+ Cp(sal_uInt32 nCp_) : nCp(nCp_) {}
+
+ /**
+ Returns the WW8 character position.
+
+ @return the WW8 character position
+ */
+ sal_uInt32 get() const { return nCp; }
+
+ /**
+ Sets the WW8 character position.
+
+ @param nCp_ the WW8 character position to set
+ */
+ void set(sal_uInt32 nCp_) { nCp = nCp_; }
+
+ /**
+ Calculate CP moved backward.
+
+ None of the involved CPs is changed.
+
+ @param n amount of movement
+
+ @return CP moved @n steps backward
+ */
+ sal_uInt32 operator - (const Cp & rCp) const
+ { return nCp - rCp.nCp; }
+
+ /**
+ Calculate CP moved forward.
+
+ None of the involved CPs is changed.
+
+ @param n amount of movement
+
+ @return CP moved @n steps forward
+ */
+ Cp operator + (sal_uInt32 n) const
+ { return Cp(nCp + n); }
+
+ /**
+ Advance CP forward.
+
+ @attention The CP is altered.
+
+ @param n amount of movement
+
+ @return CP moved @n steps forward
+ */
+ Cp & operator += (sal_uInt32 n)
+ {
+ nCp += n;
+
+ return *this;
+ }
+
+ /**
+ Return string representation of CP.
+ */
+ string toString() const;
+
+ friend bool operator < (const Cp & rA, const Cp & rB);
+ friend bool operator == (const Cp & rA, const Cp & rB);
+ friend ostream & operator << (ostream & o, const Cp & rCp);
+};
+
+/**
+ A file character position.
+
+ This is a wrapper to make the type for WW8 character position (CP)
+ distinct from WW8 file character positions (FC).
+
+ \see{Cp}
+*/
+struct Fc
+{
+ sal_uInt32 mnFc; // the WW8 character position
+ bool mbComplex;
+
+ Fc() : mnFc(0), mbComplex(false) {}
+
+ Fc(sal_uInt32 nFc, bool bComplex = true)
+ : mnFc(nFc), mbComplex(bComplex)
+ {}
+
+ sal_uInt32 complexFactor() const { return mbComplex ? 1 : 2; }
+
+ /**
+ Returns the WW8 character position.
+
+ @return the WW8 character position
+ */
+ sal_uInt32 get() const { return mnFc; }
+
+ /**
+ Sets the WW8 file character position.
+
+ @param nFc the WW8 file character position to set
+ */
+ void set(sal_uInt32 nFc) { mnFc = nFc; }
+
+ /**
+ Set if the FC is complex.
+
+ @param bComplex true if FC is set to be complex
+ */
+ void setComplex(bool bComplex) { mbComplex = bComplex; }
+
+ /**
+ Return if FC is complex.
+
+ @retval true FC is complex
+ @retval false else
+ */
+ bool isComplex() const { return mbComplex; }
+
+ /**
+ Distance of FCs.
+
+ None of the involved FCs is changed.
+
+ @param rFc FC to calculate distance to
+
+ @return Distance from @a rFc to this FC
+ */
+ sal_uInt32 operator - (const Fc & rFc) const
+ { return (mnFc - rFc.mnFc) / complexFactor(); }
+
+ /**
+ Calculate FC moved backward.
+
+ None of the involved FCs is changed.
+
+ @param n amount of movement
+
+ @return FC moved @n steps backward
+ */
+ Fc operator - (sal_uInt32 n) const
+ { return Fc(mnFc - n * complexFactor(), mbComplex); }
+
+ /**
+ Calculate FC moved forward.
+
+ None of the involved FCs is changed.
+
+ @param n amount of movement
+
+ @return FC moved @n steps Forward
+ */
+ Fc operator + (sal_uInt32 n) const
+ { return Fc(mnFc + n * complexFactor(), mbComplex); }
+
+ /**
+ Return string representation of FC.
+ */
+ string toString() const;
+
+ friend bool operator < (const Fc & rA, const Fc & rB);
+ friend bool operator == (const Fc & rA, const Fc & rB);
+ friend ostream & operator << (ostream & o, const Fc & rFc);
+};
+
+/**
+ A character position and a corresponding file character position
+ paired.
+ */
+class CpAndFc
+{
+private:
+ /**
+ character position
+ */
+ Cp mCp;
+
+ /**
+ file character position
+ */
+ Fc mFc;
+
+ /**
+ property type
+ */
+ PropertyType mType;
+
+public:
+ CpAndFc() {}
+ CpAndFc(const Cp & rCp, const Fc & rFc, PropertyType eType_);
+
+ /**
+ Return character position.
+ */
+ const Cp & getCp() const { return mCp; }
+
+ /**
+ Return file character position.
+ */
+ const Fc & getFc() const { return mFc; }
+
+ /**
+ Return property type.
+ */
+ PropertyType getType() const { return mType; }
+
+ /**
+ Return if FC is complex.
+
+ @retval true FC is complex
+ @retval false else
+ */
+ bool isComplex() const { return mFc.isComplex(); }
+
+ /**
+ Return the distance to other CpAndFc.
+
+ @param rCpAndFc the other CpAndFc
+
+ @return the distance from the CP in @a rCpAndFc to the CP in
+ CpAndFc.
+ */
+ sal_uInt32 operator-(const CpAndFc & rCpAndFc) const
+ { return mCp - rCpAndFc.mCp; }
+
+ /**
+ Return string representation of the CpAndFc.
+ */
+ string toString() const;
+
+ friend bool operator < (const CpAndFc & rA, const CpAndFc & rB);
+ friend bool operator == (const CpAndFc & rA, const CpAndFc & rB);
+ friend ostream & operator << (ostream & o, const CpAndFc & rCpAndFc);
+};
+
+struct CpAndFcLess
+{
+ CpAndFcLess()
+ {
+ }
+
+ bool operator()(const CpAndFc & rA, const CpAndFc & rB) const
+ {
+ return rA < rB;
+ }
+
+ bool operator()(const CpAndFc & rA, const Cp & rB) const
+ {
+ return rA.getCp() < rB;
+ }
+
+ bool operator()(const Cp & rA, const CpAndFc & rB) const
+ {
+ return rA < rB.getCp();
+ }
+};
+
+
+typedef set<CpAndFc, CpAndFcLess> CpAndFcs;
+
+ostream & operator << (ostream & o, const CpAndFcs & rCpAndFcs);
+
+struct CpHash
+{
+ size_t operator()(const Cp & rCp) const
+ {
+ return rCp.get();
+ }
+};
+
+struct FcHash
+{
+ size_t operator()(const Fc & rFc) const
+ {
+ return rFc.get();
+ }
+};
+
+struct CpEq
+{
+ bool operator() (const Cp & rA, const Cp &rB) const
+ {
+ return rA == rB;
+ }
+};
+
+struct CpAndFcHash
+{
+ size_t operator()(const CpAndFc & rCpAndFc) const
+ {
+ CpHash aHash;
+
+ return aHash(rCpAndFc.getCp());
+ }
+};
+
+typedef hash_map<Cp, Fc, CpHash, CpEq> Cp2FcHashMap_t;
+
+} // namespace doctok
+} // namespace writerfilter
+
+#endif // INCLUDED_WW8_CP_AND_FC_HXX
diff --git a/writerfilter/source/doctok/WW8DocumentImpl.cxx b/writerfilter/source/doctok/WW8DocumentImpl.cxx
new file mode 100644
index 000000000000..fee0abc85fe7
--- /dev/null
+++ b/writerfilter/source/doctok/WW8DocumentImpl.cxx
@@ -0,0 +1,2366 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resourcemodel/exceptions.hxx>
+#include <resourcemodel/QNameToString.hxx>
+#include <WW8DocumentImpl.hxx>
+#include <WW8FKPImpl.hxx>
+#include <WW8PieceTableImpl.hxx>
+#include <WW8BinTableImpl.hxx>
+#include <WW8StreamImpl.hxx>
+#include <WW8Sttbf.hxx>
+#include <Dff.hxx>
+#include <iterator>
+#include <XNoteHelperImpl.hxx>
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <doctokLoggers.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+using namespace ::std;
+
+template <class T>
+struct PLCFHelper
+{
+ static void processPLCFCpAndFcs(WW8DocumentImpl & rDoc,
+ WW8PieceTable::Pointer_t pPieceTable,
+ typename PLCF<T>::Pointer_t pPLCF,
+ PropertyType eType,
+ sal_uInt32 nOffset)
+ {
+ sal_uInt32 nCount = pPLCF->getEntryCount();
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ Cp aCp(pPLCF->getFc(n) + nOffset);
+ CpAndFc aCpAndFc = pPieceTable->createCpAndFc(aCp, eType);
+
+ rDoc.insertCpAndFc(aCpAndFc);
+ }
+ }
+};
+
+// WW8DocumentIteratorImpl
+bool operator == (const WW8DocumentIterator & rA,
+ const WW8DocumentIterator & rB)
+{
+ return rA.equal(rB);
+}
+
+WW8DocumentIterator::~WW8DocumentIterator()
+{
+}
+
+WW8DocumentIteratorImpl::~WW8DocumentIteratorImpl()
+{
+}
+
+WW8DocumentIterator & WW8DocumentIteratorImpl::operator++()
+{
+ mCpAndFc = mpDocument->getNextCp(mCpAndFc);
+
+ return *this;
+}
+
+WW8DocumentIterator & WW8DocumentIteratorImpl::operator--()
+{
+ mCpAndFc = mpDocument->getPrevCp(mCpAndFc);
+
+ return *this;
+}
+
+bool WW8DocumentIteratorImpl::equal(const WW8DocumentIterator & rIt_) const
+{
+ const WW8DocumentIteratorImpl & rIt =
+ dynamic_cast<const WW8DocumentIteratorImpl &>(rIt_);
+
+ return mCpAndFc == rIt.mCpAndFc && mpDocument == rIt.mpDocument;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentIteratorImpl::getProperties() const
+{
+ return mpDocument->getProperties(mCpAndFc);
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentIteratorImpl::getSubDocument() const
+{
+ return mpDocument->getSubDocument(mCpAndFc);
+}
+
+WW8SED * WW8DocumentIteratorImpl::getSED() const
+{
+ return mpDocument->getSED(mCpAndFc);
+}
+
+WW8Stream::Sequence WW8DocumentIteratorImpl::getText()
+{
+ return mpDocument->getText(mCpAndFc);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentIteratorImpl::getShape() const
+{
+ return mpDocument->getShape(mCpAndFc);
+}
+
+PropertyType WW8DocumentIteratorImpl::getPropertyType() const
+{
+ return mCpAndFc.getType();
+}
+
+bool WW8DocumentIteratorImpl::isComplex() const
+{
+ return mCpAndFc.isComplex();
+}
+
+void WW8DocumentIteratorImpl::dump(ostream & o) const
+{
+ o << mCpAndFc;
+}
+
+string WW8DocumentIteratorImpl::toString() const
+{
+ return mCpAndFc.toString();
+}
+
+// WW8DocumentImpl
+
+WW8Document::~WW8Document()
+{
+}
+
+#ifdef DEBUG
+class WW8IdToString : public IdToString
+{
+public:
+ WW8IdToString() : IdToString() {}
+ virtual ~WW8IdToString() {}
+
+ virtual string toString(const Id & rId) const
+ {
+ string s((*SprmIdToString::Instance())(rId));
+
+ if (s.size() == 0)
+ s = (*QNameToString::Instance())(rId);
+
+ return s;
+ }
+};
+#endif
+
+WW8DocumentImpl::~WW8DocumentImpl()
+{
+}
+
+WW8DocumentImpl::WW8DocumentImpl(WW8Stream::Pointer_t rpStream)
+: bSubDocument(false), mfcPicLoc(0), mbPicIsData(false), mpStream(rpStream),
+mbInSection(false), mbInParagraphGroup(false), mbInCharacterGroup(false)
+{
+ mpDocStream = getSubStream(::rtl::OUString::createFromAscii
+ ("WordDocument"));
+
+ mpSummaryInformationStream = getSubStream(::rtl::OUString::createFromAscii
+ ("\5SummaryInformation"));
+
+ try
+ {
+ mpDataStream = getSubStream(::rtl::OUString::createFromAscii
+ ("Data"));
+ }
+ catch (ExceptionNotFound e)
+ {
+ }
+
+ try
+ {
+ mpCompObjStream = getSubStream(::rtl::OUString::createFromAscii
+ ("\1CompObj"));
+ }
+ catch (ExceptionNotFound e)
+ {
+ }
+
+ mpCHPFKPCache =
+ WW8FKPCache::Pointer_t(new WW8CHPFKPCacheImpl(mpDocStream, 5));
+ mpPAPFKPCache =
+ WW8FKPCache::Pointer_t(new WW8PAPFKPCacheImpl(mpDocStream, 5));
+
+ mpFib = WW8Fib::Pointer_t(new WW8Fib(*mpDocStream));
+
+ switch (mpFib->get_fWhichTblStm())
+ {
+ case 0:
+ mpTableStream = getSubStream(::rtl::OUString::createFromAscii
+ ("0Table"));
+
+ break;
+
+ case 1:
+ mpTableStream = getSubStream(::rtl::OUString::createFromAscii
+ ("1Table"));
+
+ break;
+
+ default:
+ break;
+ }
+
+ if (mpFib->get_nFib() >= 0xD9)
+ {
+ mpFibRgFcLcb2000.reset(new WW8FibRgFcLcb2000(*mpFib));
+ }
+
+ if (mpTableStream.get() == NULL)
+ throw ExceptionNotFound("Table stream not found.");
+
+ mpPieceTable =
+ WW8PieceTable::Pointer_t
+ (new WW8PieceTableImpl(*mpTableStream, mpFib->get_fcClx(),
+ mpFib->get_lcbClx()));
+
+ {
+ Cp aCp(mpPieceTable->getLastCp());
+ Fc aFc(mpPieceTable->getLastFc());
+ CpAndFc aCpAndFc(aCp, aFc, PROP_DOC);
+ mCpAndFcs.insert(aCpAndFc);
+ }
+
+ {
+ Cp aCp(mpFib->get_ccpText());
+
+ mDocumentEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mDocumentEndCpAndFc);
+
+ aCp += mpFib->get_ccpFtn();
+ mFootnoteEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mFootnoteEndCpAndFc);
+
+ aCp += mpFib->get_ccpHdd();
+ mHeaderEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mHeaderEndCpAndFc);
+
+ aCp += mpFib->get_ccpAtn();
+ mAnnotationEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mAnnotationEndCpAndFc);
+
+ aCp += mpFib->get_ccpEdn();
+ mEndnoteEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mEndnoteEndCpAndFc);
+
+ aCp += mpFib->get_ccpTxbx();
+ mTextboxEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mTextboxEndCpAndFc);
+
+ aCp += mpFib->get_ccpHdrTxbx();
+ mTextboxHeaderEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
+ PROP_DOC);
+ mCpAndFcs.insert(mTextboxHeaderEndCpAndFc);
+ }
+
+ mpBinTablePAPX =
+ WW8BinTable::Pointer_t(new WW8BinTableImpl
+ (*mpTableStream,
+ mpFib->get_fcPlcfbtePapx(),
+ mpFib->get_lcbPlcfbtePapx()));
+
+ //clog << "BinTable(PAP):" << mpBinTablePAPX->toString();
+
+ parseBinTableCpAndFcs(*mpBinTablePAPX, PROP_PAP);
+
+ mpBinTableCHPX =
+ WW8BinTable::Pointer_t(new WW8BinTableImpl
+ (*mpTableStream,
+ mpFib->get_fcPlcfbteChpx(),
+ mpFib->get_lcbPlcfbteChpx()));
+
+ //clog << "BinTable(CHP):" << mpBinTableCHPX->toString();
+
+ parseBinTableCpAndFcs(*mpBinTableCHPX, PROP_CHP);
+
+ mpSEDs = PLCF<WW8SED>::Pointer_t(new PLCF<WW8SED>
+ (*mpTableStream,
+ mpFib->get_fcPlcfsed(),
+ mpFib->get_lcbPlcfsed()));
+
+ //mpSEDs->dump(clog);
+
+ {
+ PLCFHelper<WW8SED>::processPLCFCpAndFcs
+ (*this, mpPieceTable, mpSEDs, PROP_SEC, 0);
+ }
+
+ sal_uInt32 nHeaders = getHeaderCount();
+
+ if (nHeaders > 0)
+ {
+ mpHeaderOffsets = WW8StructBase::Pointer_t
+ (new WW8StructBase(*mpTableStream,
+ mpFib->get_fcPlcfhdd(),
+ mpFib->get_lcbPlcfhdd()));
+
+ {
+ for (sal_uInt32 n = 0; n <= nHeaders; ++n)
+ {
+ CpAndFc aCpAndFc(getHeaderCpAndFc(n));
+
+ mCpAndFcs.insert(aCpAndFc);
+ }
+ }
+ }
+
+ if (mpFib->get_lcbPlcffndTxt() > 0)
+ {
+ WW8StructBase::Pointer_t pCps
+ (new WW8StructBase(*mpTableStream,
+ mpFib->get_fcPlcffndTxt(),
+ mpFib->get_lcbPlcffndTxt()));
+
+ PLCF<WW8FRD>::Pointer_t pRefs
+ (new PLCF<WW8FRD>(*mpTableStream,
+ mpFib->get_fcPlcffndRef(),
+ mpFib->get_lcbPlcffndRef()));
+
+ mpFootnoteHelper = XNoteHelper<WW8FRD>::Pointer_t
+ (new XNoteHelper<WW8FRD>(pCps, pRefs, mpPieceTable, this,
+ PROP_FOOTNOTE, getDocumentEndCp()));
+
+ mpFootnoteHelper->init();
+ }
+
+ if (mpFib->get_lcbPlcfendTxt() > 0)
+ {
+ WW8StructBase::Pointer_t pCps
+ (new WW8StructBase(*mpTableStream,
+ mpFib->get_fcPlcfendTxt(),
+ mpFib->get_lcbPlcfendTxt()));
+
+ PLCF<WW8FRD>::Pointer_t pRefs
+ (new PLCF<WW8FRD>(*mpTableStream,
+ mpFib->get_fcPlcfendRef(),
+ mpFib->get_lcbPlcfendRef()));
+
+ mpEndnoteHelper = XNoteHelper<WW8FRD>::Pointer_t
+ (new XNoteHelper<WW8FRD>(pCps, pRefs, mpPieceTable, this,
+ PROP_ENDNOTE, getAnnotationEndCp()));
+
+ mpEndnoteHelper->init();
+ }
+
+ if (mpFib->get_lcbPlcfandTxt() > 0)
+ {
+ WW8StructBase::Pointer_t pCps
+ (new WW8StructBase(*mpTableStream,
+ mpFib->get_fcPlcfandTxt(),
+ mpFib->get_lcbPlcfandTxt()));
+
+ PLCF<WW8ATRD>::Pointer_t pRefs
+ (new PLCF<WW8ATRD>(*mpTableStream,
+ mpFib->get_fcPlcfandRef(),
+ mpFib->get_lcbPlcfandRef()));
+
+ mpAnnotationHelper = XNoteHelper<WW8ATRD>::Pointer_t
+ (new XNoteHelper<WW8ATRD>(pCps, pRefs, mpPieceTable, this,
+ PROP_ANNOTATION, getHeaderEndCp()));
+
+ mpAnnotationHelper->init();
+ }
+
+ if (mpFib->get_lcbSttbfbkmk() > 0)
+ {
+ PLCF<WW8BKF>::Pointer_t pStartCps
+ (new PLCF<WW8BKF>(*mpTableStream, mpFib->get_fcPlcfbkf(),
+ mpFib->get_lcbPlcfbkf()));
+
+ WW8StructBase::Pointer_t pEndCps
+ (new WW8StructBase(*mpTableStream, mpFib->get_fcPlcfbkl(),
+ mpFib->get_lcbPlcfbkl()));
+
+ WW8Sttbf::Pointer_t pNames
+ (new WW8Sttbf(*mpTableStream, mpFib->get_fcSttbfbkmk(),
+ mpFib->get_lcbSttbfbkmk()));
+
+ mpBookmarkHelper = BookmarkHelper::Pointer_t
+ (new BookmarkHelper(pStartCps, pEndCps, pNames, mpPieceTable, this));
+
+ mpBookmarkHelper->init();
+ }
+
+ {
+ PLCF<WW8FLD>::Pointer_t pPlcffldMom;
+
+ if (mpFib->get_lcbPlcffldMom() > 0)
+ {
+ pPlcffldMom = PLCF<WW8FLD>::Pointer_t
+ (new PLCF<WW8FLD>(*mpTableStream,
+ mpFib->get_fcPlcffldMom(),
+ mpFib->get_lcbPlcffldMom()));
+
+ mpFieldHelper = FieldHelper::Pointer_t
+ (new FieldHelper(pPlcffldMom,
+ this));
+
+ mpFieldHelper->init();
+ }
+ }
+
+ PLCF<WW8FSPA>::Pointer_t pPlcspaMom;
+ if (mpFib->get_lcbPlcspaMom() > 0)
+ {
+ pPlcspaMom = PLCF<WW8FSPA>::Pointer_t
+ (new PLCF<WW8FSPA>
+ (*mpTableStream, mpFib->get_fcPlcspaMom(),
+ mpFib->get_lcbPlcspaMom()));
+ }
+
+ PLCF<WW8FSPA>::Pointer_t pPlcspaHdr;
+ if (mpFib->get_lcbPlcspaHdr() > 0)
+ {
+ pPlcspaHdr = PLCF<WW8FSPA>::Pointer_t
+ (new PLCF<WW8FSPA>
+ (*mpTableStream, mpFib->get_fcPlcspaHdr(),
+ mpFib->get_lcbPlcspaHdr()));
+ }
+
+ mpShapeHelper = ShapeHelper::Pointer_t
+ (new ShapeHelper(pPlcspaMom, pPlcspaHdr, this));
+
+ mpShapeHelper->init();
+
+ PLCF<WW8BKD>::Pointer_t pPlcbkdMother;
+ if (mpFib->get_fcBkdMother() > 0 && mpFib->get_lcbBkdMother() > 0)
+ {
+ pPlcbkdMother = PLCF<WW8BKD>::Pointer_t
+ (new PLCF<WW8BKD>
+ (*mpTableStream, mpFib->get_fcBkdMother(),
+ mpFib->get_lcbBkdMother()));
+ }
+
+ mpBreakHelper = BreakHelper::Pointer_t
+ (new BreakHelper(pPlcbkdMother, this));
+
+ mpBreakHelper->init();
+
+ if (mpFib->get_fcDggInfo() != 0 && mpFib->get_lcbDggInfo() > 0)
+ {
+ mpDffBlock = DffBlock::Pointer_t
+ (new DffBlock(*mpTableStream, mpFib->get_fcDggInfo(),
+ mpFib->get_lcbDggInfo(), 1));
+
+ mpDffBlock->setDocument(this);
+ }
+
+ if (mpFib->get_lcbPlcftxbxTxt() > 0)
+ {
+ mpTextBoxStories = PLCF<WW8FTXBXS>::Pointer_t
+ (new PLCF<WW8FTXBXS>(*mpTableStream,
+ mpFib->get_fcPlcftxbxTxt(),
+ mpFib->get_lcbPlcftxbxTxt()));
+
+ PLCFHelper<WW8FTXBXS>::processPLCFCpAndFcs
+ (*this, mpPieceTable, mpTextBoxStories, PROP_DOC,
+ mEndnoteEndCpAndFc.getCp().get());
+ }
+
+ if (mCpAndFcs.size() > 0)
+ {
+ mCpAndFcStart = *mCpAndFcs.begin();
+ mCpAndFcEnd = getDocumentEndCp();
+ }
+}
+
+bool WW8DocumentImpl::isSpecial(sal_uInt32 nChar)
+{
+ bool bResult = false;
+
+ if (nChar <= 8)
+ bResult = true;
+ else if (nChar >= 10)
+ {
+ if (nChar == 12)
+ bResult= true;
+ else if (nChar <= 16)
+ bResult = true;
+ else if (nChar >= 22)
+ {
+ if (nChar <= 30)
+ bResult = true;
+ else if (nChar >= 33)
+ {
+ if (nChar <= 39)
+ bResult = true;
+ else if (nChar == 41)
+ bResult = true;
+ }
+ }
+ }
+
+ return bResult;
+}
+
+WW8DocumentImpl::WW8DocumentImpl(const WW8DocumentImpl & rSrc,
+ const CpAndFc & rStart, const CpAndFc & rEnd)
+: bSubDocument(true), mfcPicLoc(0), mbPicIsData(false)
+{
+ Assign(rSrc);
+
+ mCpAndFcStart = rStart;
+ mCpAndFcEnd = rEnd;
+}
+
+WW8DocumentImpl & WW8DocumentImpl::Assign(const WW8DocumentImpl & rSrc)
+{
+ mCpAndFcs = rSrc.mCpAndFcs;
+
+ mpCHPFKPCache = rSrc.mpCHPFKPCache;
+ mpPAPFKPCache = rSrc.mpPAPFKPCache;
+
+ mpStream = rSrc.mpStream;
+ mpTableStream = rSrc.mpTableStream;
+ mpDataStream = rSrc.mpDataStream;
+ mpDocStream = rSrc.mpDocStream;
+ mpCompObjStream = rSrc.mpCompObjStream;
+
+ mpPieceTable = rSrc.mpPieceTable;
+
+ mpBinTableCHPX = rSrc.mpBinTableCHPX;
+ mpBinTablePAPX = rSrc.mpBinTablePAPX;
+
+ mpSEDs = rSrc.mpSEDs;
+
+ mpFib = rSrc.mpFib;
+
+ mpHeaderOffsets = rSrc.mpHeaderOffsets;
+ mpFootnoteHelper = rSrc.mpFootnoteHelper;
+ mpEndnoteHelper = rSrc.mpEndnoteHelper;
+ mpAnnotationHelper = rSrc.mpAnnotationHelper;
+ mpShapeHelper = rSrc.mpShapeHelper;
+ mpBreakHelper = rSrc.mpBreakHelper;
+
+ mpBookmarkHelper = rSrc.mpBookmarkHelper;
+
+ mpDffBlock = rSrc.mpDffBlock;
+ mpTextBoxStories = rSrc.mpTextBoxStories;
+
+ mDocumentEndCpAndFc = rSrc.mDocumentEndCpAndFc;
+ mFootnoteEndCpAndFc = rSrc.mFootnoteEndCpAndFc;
+
+ return *this;
+}
+
+string WW8DocumentImpl::getType() const
+{
+ return "WW8DocumentImpl";
+}
+
+void WW8DocumentImpl::parseBinTableCpAndFcs(WW8BinTable & rTable,
+ PropertyType eType_)
+{
+ //clog << "<bintable type=\"" << propertyTypeToString(eType_) << "\">" << endl;
+ for (sal_uInt32 i = 0; i < rTable.getEntryCount(); i++)
+ {
+#if 0
+ char sBuffer[255];
+ snprintf(sBuffer, 255, "%ld", i);
+ char sBufferPageNum[255];
+ snprintf(sBufferPageNum, 255, "%ld", rTable.getPageNumber(i));
+#endif
+ Fc aFcFromTable(rTable.getFc(i));
+
+ if (aFcFromTable < mpPieceTable->getFirstFc())
+ aFcFromTable = mpPieceTable->getFirstFc();
+
+ bool bComplex = mpPieceTable->isComplex(aFcFromTable);
+ aFcFromTable.setComplex(bComplex);
+
+ //clog << "<entry fc=\"" << aFcFromTable.toString() << "\">" << endl;
+
+ try
+ {
+ Cp aCpFromTable(mpPieceTable->fc2cp(aFcFromTable));
+ CpAndFc aCpAndFcFromTable(aCpFromTable, aFcFromTable, eType_);
+
+ mCpAndFcs.insert(aCpAndFcFromTable);
+
+ WW8FKP::Pointer_t pFKP;
+
+ switch (eType_)
+ {
+ case PROP_CHP:
+ pFKP = getFKPCHPX(rTable.getPageNumber(i),
+ aCpAndFcFromTable.isComplex());
+
+ break;
+
+ case PROP_PAP:
+ pFKP = getFKPPAPX(rTable.getPageNumber(i),
+ aCpAndFcFromTable.isComplex());
+
+ break;
+ default:
+ break;
+ }
+
+ for (sal_uInt32 n = 0; n < pFKP->getEntryCount(); n++)
+ {
+ Fc aFc = pFKP->getFc(n);
+
+ if (aFc < mpPieceTable->getFirstFc())
+ aFc = mpPieceTable->getFirstFc();
+
+ bool bComplexFKP = mpPieceTable->isComplex(aFc);
+ aFc.setComplex(bComplexFKP);
+
+ //clog << "<fkpentry fc=\"" << aFc.toString() << "\"/>" << endl;
+
+ try
+ {
+ Cp aCp = mpPieceTable->fc2cp(aFc);
+
+ CpAndFc aCpAndFc(aCp, aFc, eType_);
+
+ mCpAndFcs.insert(aCpAndFc);
+
+ //clog << aCpAndFc << endl;
+ }
+ catch (ExceptionNotFound e)
+ {
+ clog << e.getText() << endl;
+ }
+ }
+ }
+ catch (ExceptionNotFound e)
+ {
+ clog << e.getText() << endl;
+ }
+
+ //clog << "</entry>" << endl;
+ }
+
+ //clog << "</bintable>" << endl;
+}
+
+WW8Stream::Pointer_t WW8DocumentImpl::getSubStream
+(const ::rtl::OUString & sId) const
+{
+ return mpStream->getSubStream(sId);
+}
+
+WW8Document::Pointer_t WW8DocumentImpl::getSubDocument(SubDocumentId /*nId*/)
+{
+ return WW8Document::Pointer_t(new WW8DocumentImpl(*this));
+}
+
+WW8DocumentIterator::Pointer_t
+WW8DocumentImpl::getIterator(const CpAndFc & rCpAndFc)
+{
+ return WW8DocumentIterator::Pointer_t
+ (new WW8DocumentIteratorImpl(this, rCpAndFc));
+}
+
+WW8DocumentIterator::Pointer_t WW8DocumentImpl::begin()
+{
+ return getIterator(getFirstCp());
+}
+
+WW8DocumentIterator::Pointer_t WW8DocumentImpl::end()
+{
+ return getIterator(getLastCp());
+}
+
+WW8Stream::Pointer_t WW8DocumentImpl::getDocStream() const
+{
+ return mpDocStream;
+}
+
+WW8Stream::Pointer_t WW8DocumentImpl::getDataStream() const
+{
+ return mpDataStream;
+}
+
+sal_uInt32 WW8DocumentImpl::getByteLength(const CpAndFc & rCpAndFc) const
+{
+ CpAndFc aEnd = getNextCp(rCpAndFc);
+
+ sal_uInt32 nResult = 3;
+
+ if (rCpAndFc < aEnd)
+ nResult = (aEnd - rCpAndFc) *
+ (mpPieceTable->isComplex(rCpAndFc.getCp()) ? 1 : 2);
+
+ return nResult;
+}
+
+WW8Stream::Sequence
+WW8DocumentImpl::getText(const CpAndFc & rStart)
+{
+ return mpDocStream->get(rStart.getFc().get(), getByteLength(rStart));
+}
+
+const CpAndFc & WW8DocumentImpl::getFirstCp() const
+{
+ return mCpAndFcStart;
+}
+
+const CpAndFc & WW8DocumentImpl::getLastCp() const
+{
+ return mCpAndFcEnd;
+}
+
+CpAndFc WW8DocumentImpl::getDocumentEndCp() const
+{
+ return mDocumentEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getFootnodeEndCp() const
+{
+ return mFootnoteEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getHeaderEndCp() const
+{
+ return mHeaderEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getAnnotationEndCp() const
+{
+ return mAnnotationEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getEndnoteEndCp() const
+{
+ return mEndnoteEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getTextboxEndCp() const
+{
+ return mTextboxEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getTextboxHeaderEndCp() const
+{
+ return mTextboxHeaderEndCpAndFc;
+}
+
+CpAndFc WW8DocumentImpl::getNextCp(const CpAndFc & rCpAndFc) const
+{
+ CpAndFc aResult = mCpAndFcEnd;
+ CpAndFcs::const_iterator aIt = mCpAndFcs.find(rCpAndFc);
+
+ if (aIt != mCpAndFcs.end())
+ {
+ aIt++;
+
+ if (aIt != mCpAndFcs.end())
+ aResult = *aIt;
+ }
+ else
+ throw ExceptionNotFound("getNextCp: " + rCpAndFc.toString());
+
+ return aResult;
+}
+
+CpAndFc WW8DocumentImpl::getPrevCp(const CpAndFc & rCpAndFc) const
+{
+ CpAndFc aResult = mCpAndFcStart;
+
+ CpAndFcs::const_iterator aIt = mCpAndFcs.find(CpAndFc(rCpAndFc));
+
+ if (aIt != mCpAndFcs.end() && aIt != mCpAndFcs.begin())
+ {
+ aIt--;
+
+ aResult = *aIt;
+ }
+ else
+ throw ExceptionNotFound("getPrevCp: " + rCpAndFc.toString());
+
+ return aResult;
+}
+
+WW8FKP::Pointer_t WW8DocumentImpl::getFKP(const CpAndFc & rCpAndFc)
+{
+ WW8FKP::Pointer_t pResult;
+
+ sal_uInt32 nPageNumber = 0;
+
+ switch (rCpAndFc.getType())
+ {
+ case PROP_PAP:
+ {
+ nPageNumber =
+ mpBinTablePAPX->getPageNumber(rCpAndFc.getFc());
+
+ pResult = getFKPPAPX(nPageNumber, rCpAndFc.isComplex());
+ }
+ break;
+ case PROP_CHP:
+ {
+ nPageNumber =
+ mpBinTableCHPX->getPageNumber(rCpAndFc.getFc());
+
+ pResult = getFKPCHPX(nPageNumber, rCpAndFc.isComplex());
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (pResult.get() != NULL)
+ pResult->setDocument(this);
+
+ return pResult;
+}
+
+WW8FKP::Pointer_t WW8DocumentImpl::getFKPCHPX(sal_uInt32 nIndex,
+ bool bComplex)
+{
+ return mpCHPFKPCache->get(nIndex, bComplex);
+}
+
+WW8FKP::Pointer_t WW8DocumentImpl::getFKPPAPX(sal_uInt32 nIndex,
+ bool bComplex)
+{
+ return mpPAPFKPCache->get(nIndex, bComplex);
+}
+
+writerfilter::Reference<Properties>::Pointer_t WW8DocumentImpl::getProperties
+(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ switch (rCpAndFc.getType())
+ {
+ case PROP_CHP:
+ case PROP_PAP:
+ {
+ try
+ {
+ WW8FKP::Pointer_t pFKP = getFKP(rCpAndFc);
+
+ pResult = pFKP->getProperties(rCpAndFc.getFc());
+ }
+ catch (ExceptionOutOfBounds e)
+ {
+ }
+ }
+
+ break;
+
+ case PROP_SEC:
+ {
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (getSED(rCpAndFc));
+ }
+
+ break;
+
+ case PROP_FOOTNOTE:
+ {
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (mpFootnoteHelper->getRef(rCpAndFc));
+ }
+ break;
+
+ case PROP_ENDNOTE:
+ {
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (mpEndnoteHelper->getRef(rCpAndFc));
+ }
+ break;
+
+ case PROP_ANNOTATION:
+ {
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (mpAnnotationHelper->getRef(rCpAndFc));
+ }
+ break;
+
+ case PROP_BOOKMARKSTART:
+ case PROP_BOOKMARKEND:
+ {
+ pResult = getBookmark(rCpAndFc);
+ }
+
+ break;
+ case PROP_FLD:
+ {
+ pResult = getField(rCpAndFc);
+
+ mpFLD = mpFieldHelper->getWW8FLD(rCpAndFc);
+ }
+
+ break;
+ case PROP_SHP:
+ {
+ pResult = getShape(rCpAndFc);
+ }
+ break;
+ case PROP_BRK:
+ {
+ pResult = getBreak(rCpAndFc);
+ }
+ break;
+ default:
+ break;
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getSubDocument(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ switch (rCpAndFc.getType())
+ {
+ case PROP_FOOTNOTE:
+ pResult = getFootnote(rCpAndFc);
+ break;
+
+ case PROP_ENDNOTE:
+ pResult = getEndnote(rCpAndFc);
+ break;
+
+ case PROP_ANNOTATION:
+ pResult = getAnnotation(rCpAndFc);
+ break;
+
+ default:
+ break;
+ }
+
+ return pResult;
+}
+
+WW8SED * WW8DocumentImpl::getSED(const CpAndFc & rCpAndFc) const
+{
+ WW8SED * pResult = mpSEDs->getEntryByFc(rCpAndFc.getCp().get());
+
+ pResult->setDoc(const_cast<const WW8DocumentImpl *>(this));
+
+ return pResult;
+}
+
+writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getListTplcs() const
+{
+ writerfilter::Reference<Table>::Pointer_t pResult;
+
+ if (mpFibRgFcLcb2000.get() != NULL &&
+ mpFibRgFcLcb2000->get_fcSttbRgtplc() != 0 &&
+ mpFibRgFcLcb2000->get_lcbSttbRgtplc() != 0)
+ {
+ WW8SttbRgtplc * pSttbRgtplc =
+ new WW8SttbRgtplc(*mpTableStream,
+ mpFibRgFcLcb2000->get_fcSttbRgtplc(),
+ mpFibRgFcLcb2000->get_lcbSttbRgtplc());
+
+ pResult = writerfilter::Reference<Table>::Pointer_t(pSttbRgtplc);
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getListTable() const
+{
+ writerfilter::Reference<Table>::Pointer_t pResult;
+
+ if (mpFib->get_fcPlcfLst() != 0 && mpFib->get_lcbPlcfLst() > 0)
+ {
+ try
+ {
+ WW8ListTable * pList = new WW8ListTable(*mpTableStream,
+ mpFib->get_fcPlcfLst(),
+ mpFib->get_fcPlfLfo() -
+ mpFib->get_fcPlcfLst());
+
+ pList->setPayloadOffset(mpFib->get_lcbPlcfLst());
+ pList->initPayload();
+
+ pResult = writerfilter::Reference<Table>::Pointer_t(pList);
+ }
+ catch (ExceptionOutOfBounds aException) {
+ }
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getLFOTable() const
+{
+ writerfilter::Reference<Table>::Pointer_t pResult;
+
+ if (mpFib->get_fcPlfLfo() != 0 && mpFib->get_lcbPlfLfo() > 0)
+ {
+ try
+ {
+ WW8LFOTable * pLFOs = new WW8LFOTable(*mpTableStream,
+ mpFib->get_fcPlfLfo(),
+ mpFib->get_lcbPlfLfo());
+
+ pLFOs->setPayloadOffset(mpFib->get_lcbPlcfLst());
+ pLFOs->initPayload();
+
+ pResult = writerfilter::Reference<Table>::Pointer_t(pLFOs);
+ }
+ catch (Exception e)
+ {
+ clog << e.getText() << endl;
+ }
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getFontTable() const
+{
+ writerfilter::Reference<Table>::Pointer_t pResult;
+
+ if (mpFib->get_fcSttbfffn() != 0 && mpFib->get_lcbSttbfffn() > 0)
+ {
+ WW8FontTable * pFonts = new WW8FontTable(*mpTableStream,
+ mpFib->get_fcSttbfffn(),
+ mpFib->get_lcbSttbfffn());
+
+ pFonts->initPayload();
+
+ pResult = writerfilter::Reference<Table>::Pointer_t(pFonts);
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getStyleSheet() const
+{
+ writerfilter::Reference<Table>::Pointer_t pResult;
+
+ if (mpFib->get_lcbStshf() > 0)
+ {
+ WW8StyleSheet * pStyles = new WW8StyleSheet(*mpTableStream,
+ mpFib->get_fcStshf(),
+ mpFib->get_lcbStshf());
+
+ pStyles->initPayload();
+
+ pResult = writerfilter::Reference<Table>::Pointer_t(pStyles);
+ }
+
+ return pResult;
+}
+
+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;
+ sal_uInt32 nLcbPlcfhdd = mpFib->get_lcbPlcfhdd();
+
+ if (nLcbPlcfhdd > 4)
+ nResult = (nLcbPlcfhdd / 4) - 1;
+
+ return nResult;
+}
+
+CpAndFc WW8DocumentImpl::getHeaderCpAndFc(sal_uInt32 nPos)
+{
+ sal_uInt32 nCount = getHeaderCount();
+
+ // There are getHeaderCount() + 1 entries in mpHeaderOffsets => greater
+ if (nPos > nCount)
+ throw ExceptionNotFound("getHeaderCpAndFc");
+
+ if (nPos == nCount)
+ return mHeaderEndCpAndFc;
+ else
+ {
+ Cp aCp(getFootnodeEndCp().getCp() + mpHeaderOffsets->getU32(nPos * 4));
+ Fc aFc(mpPieceTable->cp2fc(aCp));
+ CpAndFc aCpAndFc(aCp, aFc, PROP_DOC);
+
+ return aCpAndFc;
+ }
+
+}
+
+writerfilter::Reference<Stream>::Pointer_t WW8DocumentImpl::getHeader(sal_uInt32 nPos)
+{
+ // There are getHeaderCount() headers => greater or equal
+ if (nPos >= getHeaderCount())
+ throw ExceptionNotFound("getHeader");
+
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ CpAndFc aCpAndFcStart(getHeaderCpAndFc(nPos));
+ CpAndFc aCpAndFcEnd(getHeaderCpAndFc(nPos + 1));
+
+#if 0
+ sal_uInt32 nEquals = 1;
+ while (aCpAndFcEnd == aCpAndFcStart && nPos + nEquals < getHeaderCount())
+ {
+ ++nEquals;
+
+ aCpAndFcEnd = getHeaderCpAndFc(nPos + nEquals);
+ }
+#endif
+
+ if (aCpAndFcStart < aCpAndFcEnd)
+ pResult = writerfilter::Reference<Stream>::Pointer_t
+ (new WW8DocumentImpl(*this, aCpAndFcStart, aCpAndFcEnd));
+
+ return pResult;
+}
+
+sal_uInt32 WW8DocumentImpl::getFootnoteCount() const
+{
+ return (mpFootnoteHelper.get() != NULL) ? mpFootnoteHelper->getCount() : 0;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getFootnote(sal_uInt32 nPos)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (! bSubDocument)
+ pResult = mpFootnoteHelper->get(nPos);
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getFootnote(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (! bSubDocument)
+ pResult = mpFootnoteHelper->get(rCpAndFc);
+
+ return pResult;
+}
+
+sal_uInt32 WW8DocumentImpl::getEndnoteCount() const
+{
+ return mpEndnoteHelper.get() != NULL ? mpEndnoteHelper->getCount() : 0;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getEndnote(sal_uInt32 nPos)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (! bSubDocument)
+ pResult = mpEndnoteHelper->get(nPos);
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getEndnote(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (! bSubDocument)
+ pResult = mpEndnoteHelper->get(rCpAndFc);
+
+ return pResult;
+}
+
+sal_uInt32 WW8DocumentImpl::getAnnotationCount() const
+{
+ return mpAnnotationHelper.get() != NULL ?
+ mpAnnotationHelper->getCount() : 0;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getAnnotation(sal_uInt32 nPos)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (! bSubDocument)
+ pResult = mpAnnotationHelper->get(nPos);
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getAnnotation(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (! bSubDocument)
+ pResult = mpAnnotationHelper->get(rCpAndFc);
+
+ return pResult;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentImpl::getBookmark(const CpAndFc & rCpAndFc) const
+{
+ return mpBookmarkHelper->getBookmark(rCpAndFc);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentImpl::getShape(const CpAndFc & rCpAndFc) const
+{
+ return mpShapeHelper->getShape(rCpAndFc);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentImpl::getShape(sal_uInt32 nSpid)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+ DffRecord::Pointer_t pShape = mpDffBlock->getShape(nSpid);
+
+ if (pShape.get() != NULL)
+ {
+ DffSpContainer * pTmp = new DffSpContainer(*pShape);
+ pTmp->setDocument(this);
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pTmp);
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentImpl::getBreak(const CpAndFc & rCpAndFc) const
+{
+ return mpBreakHelper->getBreak(rCpAndFc);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentImpl::getBlip(sal_uInt32 nBid)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ if (mpDffBlock != NULL)
+ {
+ DffRecord::Pointer_t pDffRecord(mpDffBlock->getBlip(nBid));
+
+ if (pDffRecord.get() != NULL)
+ {
+ DffBSE * pBlip = new DffBSE(*pDffRecord);
+
+ if (pBlip != NULL)
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pBlip);
+ }
+ }
+
+ return pResult;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8DocumentImpl::getField(const CpAndFc & rCpAndFc) const
+{
+ return mpFieldHelper->getField(rCpAndFc);
+}
+
+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;
+}
+
+sal_uInt32 WW8DocumentImpl::getPicLocation() const
+{
+ return mfcPicLoc;
+}
+
+void WW8DocumentImpl::setPicLocation(sal_uInt32 fcPicLoc)
+{
+ mfcPicLoc = fcPicLoc;
+}
+
+bool WW8DocumentImpl::isPicData()
+{
+ return mbPicIsData;
+}
+
+void WW8DocumentImpl::setPicIsData(bool bPicIsData)
+{
+ mbPicIsData = bPicIsData;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+WW8DocumentImpl::getTextboxText(sal_uInt32 nShpId) const
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (mpTextBoxStories.get() != NULL)
+ {
+ sal_uInt32 nCount = mpTextBoxStories->getEntryCount();
+
+ sal_uInt32 n = 0;
+ while (n < nCount)
+ {
+ WW8FTXBXS * pTextboxStory = mpTextBoxStories->getEntryPointer(n);
+
+ if (pTextboxStory->get_lid() == nShpId)
+ break;
+
+ ++n;
+ }
+
+ if (n < nCount)
+ {
+ Cp aCpStart(mpTextBoxStories->getFc(n));
+ aCpStart += getEndnoteEndCp().getCp().get();
+ CpAndFc aCpAndFcStart =
+ mpPieceTable->createCpAndFc(aCpStart, PROP_DOC);
+ Cp aCpEnd(mpTextBoxStories->getFc(n + 1));
+ aCpEnd += getEndnoteEndCp().getCp().get();
+ CpAndFc aCpAndFcEnd = mpPieceTable->createCpAndFc(aCpEnd, PROP_DOC);
+
+ pResult = writerfilter::Reference<Stream>::Pointer_t
+ (new WW8DocumentImpl(*this, aCpAndFcStart, aCpAndFcEnd));
+ }
+ }
+
+ return pResult;
+}
+
+Id lcl_headerQName(sal_uInt32 nIndex)
+{
+ Id qName = NS_rtf::LN_header;
+
+ if (nIndex > 5)
+ {
+ switch ((nIndex - 6) % 6)
+ {
+ case 0:
+ qName = NS_rtf::LN_headerl;
+
+ break;
+ case 1:
+ qName = NS_rtf::LN_headerr;
+
+ break;
+ case 2:
+ qName = NS_rtf::LN_footerl;
+
+ break;
+ case 3:
+ qName = NS_rtf::LN_footerr;
+
+ break;
+ case 4:
+ qName = NS_rtf::LN_headerf;
+
+ break;
+ case 5:
+ qName = NS_rtf::LN_footerf;
+
+ break;
+ }
+ }
+
+ return qName;
+}
+
+Fc WW8DocumentImpl::cp2fc(const Cp & cp) const
+{
+ return mpPieceTable->cp2fc(cp);
+}
+
+Cp WW8DocumentImpl::fc2cp(const Fc & fc) const
+{
+ return mpPieceTable->fc2cp(fc);
+}
+
+CpAndFc WW8DocumentImpl::getCpAndFc(const Cp & cp, PropertyType type) const
+{
+ Fc aFc = cp2fc(cp);
+
+ return CpAndFc(cp, aFc, type);
+}
+
+CpAndFc WW8DocumentImpl::getCpAndFc(const Fc & fc, PropertyType type) const
+{
+ Cp aCp = fc2cp(fc);
+
+ return CpAndFc(aCp, fc, type);
+}
+
+void WW8DocumentImpl::resolvePicture(Stream & rStream)
+{
+ WW8Stream::Pointer_t pStream = getDataStream();
+
+ if (pStream.get() != NULL)
+ {
+ WW8StructBase aStruct(*pStream, mfcPicLoc, 4);
+ sal_uInt32 nCount = aStruct.getU32(0);
+
+ {
+ WW8PICF * pPicf = new WW8PICF(*pStream, mfcPicLoc, nCount);
+ pPicf->setDocument(this);
+
+ writerfilter::Reference<Properties>::Pointer_t pProps(pPicf);
+
+ rStream.props(pProps);
+ }
+ }
+}
+
+void WW8DocumentImpl::resolveSpecialChar(sal_uInt32 nChar, Stream & rStream)
+{
+ switch (nChar)
+ {
+ case 0x1:
+ resolvePicture(rStream);
+ break;
+ default:
+ break;
+ }
+}
+
+void WW8DocumentImpl::text(Stream & rStream, const sal_uInt8 * data, size_t len)
+{
+#ifdef DEBUG_ELEMENT
+ ::rtl::OUString sText( (const sal_Char*) data, len, RTL_TEXTENCODING_MS_1252 );
+ debug_logger->startElement("text");
+ debug_logger->chars(OUStringToOString(sText, RTL_TEXTENCODING_ASCII_US).getStr());
+ debug_logger->endElement("text");
+#endif
+ rStream.text(data, len);
+}
+
+void WW8DocumentImpl::utext(Stream & rStream, const sal_uInt8 * data, size_t len)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("utext");
+
+ ::rtl::OUString sText;
+ ::rtl::OUStringBuffer aBuffer = ::rtl:: OUStringBuffer(len);
+ aBuffer.append( (const sal_Unicode *) data, len);
+ sText = aBuffer.makeStringAndClear();
+
+ debug_logger->chars(OUStringToOString(sText, RTL_TEXTENCODING_ASCII_US).getStr());
+ debug_logger->endElement("utext");
+#endif
+ rStream.utext(data, len);
+}
+
+
+void WW8DocumentImpl::resolveText(WW8DocumentIterator::Pointer_t pIt,
+ Stream & rStream)
+{
+ WW8Stream::Sequence aSeq = pIt->getText();
+
+ sal_uInt32 nCount = aSeq.getCount();
+ bool bComplex = pIt->isComplex();
+
+ /*
+ Assumption: Special characters are always at the beginning or end of a
+ run.
+ */
+ if (nCount > 0)
+ {
+ if (nCount == 1)
+ bComplex = true;
+
+ if (bComplex)
+ {
+ sal_uInt32 nStartIndex = 0;
+ sal_uInt32 nEndIndex = nCount - 1;
+
+ sal_uInt32 nCharFirst = aSeq[0];
+ sal_uInt32 nCharLast = aSeq[nEndIndex];
+
+ if (isSpecial(nCharFirst))
+ {
+ nStartIndex += 1;
+ resolveSpecialChar(nCharFirst, rStream);
+ text(rStream, &aSeq[0], 1);
+ }
+
+ if (!isSpecial(nCharLast))
+ nEndIndex += 1;
+
+ if (nStartIndex < nEndIndex)
+ {
+ sal_uInt32 nChars = nEndIndex - nStartIndex;
+ text(rStream, &aSeq[nStartIndex], nChars);
+
+ if (isSpecial(nCharLast))
+ {
+ resolveSpecialChar(nCharLast, rStream);
+ text(rStream, &aSeq[nEndIndex], 1);
+ }
+ }
+ }
+ else
+ {
+ sal_uInt32 nStartIndex = 0;
+ sal_uInt32 nEndIndex = nCount - 2;
+
+ sal_uInt32 nCharFirst = aSeq[0] + (aSeq[1] << 8);
+ sal_uInt32 nCharLast = aSeq[nEndIndex] + (aSeq[nEndIndex + 1]);
+
+ if (isSpecial(nCharFirst))
+ {
+ nStartIndex += 2;
+ resolveSpecialChar(nCharFirst, rStream);
+ utext(rStream, &aSeq[0], 1);
+ }
+
+ if (!isSpecial(nCharLast))
+ nEndIndex += 2;
+
+ if (nStartIndex < nEndIndex)
+ {
+ sal_uInt32 nChars = (nEndIndex - nStartIndex) / 2;
+ utext(rStream, &aSeq[nStartIndex], nChars);
+
+ if (isSpecial(nCharLast))
+ {
+ resolveSpecialChar(nCharLast, rStream);
+ utext(rStream, &aSeq[nEndIndex], 1);
+ }
+ }
+ }
+ }
+}
+
+void WW8DocumentImpl::startCharacterGroup(Stream & rStream)
+{
+ if (mbInCharacterGroup)
+ endCharacterGroup(rStream);
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("charactergroup");
+#endif
+
+ rStream.startCharacterGroup();
+ mbInCharacterGroup = true;
+}
+
+void WW8DocumentImpl::endCharacterGroup(Stream & rStream)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("charactergroup");
+#endif
+
+ rStream.endCharacterGroup();
+ mbInCharacterGroup = false;
+}
+
+void WW8DocumentImpl::startParagraphGroup(Stream & rStream)
+{
+ if (mbInParagraphGroup)
+ endParagraphGroup(rStream);
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("paragraphgroup");
+#endif
+
+ rStream.startParagraphGroup();
+ mbInParagraphGroup = true;
+}
+
+void WW8DocumentImpl::endParagraphGroup(Stream & rStream)
+{
+ if (mbInCharacterGroup)
+ endCharacterGroup(rStream);
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("paragraphgroup");
+#endif
+ rStream.endParagraphGroup();
+ mbInParagraphGroup = false;
+}
+
+void WW8DocumentImpl::startSectionGroup(Stream & rStream)
+{
+ if (mbInSection)
+ endSectionGroup(rStream);
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("sectiongroup");
+#endif
+
+ rStream.startSectionGroup();
+ mbInSection = true;
+}
+
+void WW8DocumentImpl::endSectionGroup(Stream & rStream)
+{
+ if (mbInParagraphGroup)
+ endParagraphGroup(rStream);
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("sectiongroup");
+#endif
+ rStream.endSectionGroup();
+ mbInSection = false;
+}
+
+void WW8DocumentImpl::resolve(Stream & rStream)
+{
+ if (! bSubDocument)
+ {
+
+ //mpPieceTable->dump(clog);
+
+ //copy(mCpAndFcs.begin(), mCpAndFcs.end(), ostream_iterator<CpAndFc>(clog, ", "));
+
+ //mpDocStream->dump(output);
+
+ //output.addItem(mTextboxHeaderEndCpAndFc.toString());
+
+#if 1
+ output.addItem("<substream-names>");
+ output.addItem(mpStream->getSubStreamNames());
+ output.addItem("</substream-names>");
+
+ if (mpDocStream.get() != NULL)
+ {
+ mpDocStream->dump(output);
+ }
+
+ if (mpSummaryInformationStream.get() != NULL)
+ {
+ mpSummaryInformationStream->dump(output);
+ }
+#endif
+
+ writerfilter::Reference<Properties>::Pointer_t pFib
+ (new WW8Fib(*mpFib));
+ rStream.props(pFib);
+
+ if (mpFibRgFcLcb2000.get() != NULL)
+ {
+ writerfilter::Reference<Properties>::Pointer_t pFibRgFcLcb2000
+ (new WW8FibRgFcLcb2000(*mpFibRgFcLcb2000));
+ rStream.props(pFibRgFcLcb2000);
+ }
+
+#if 0
+ if (mpTextBoxStories.get() != NULL)
+ {
+ output.addItem("<textbox.boxes>");
+ mpTextBoxStories->dump(output);
+ output.addItem("</textbox.boxes>");
+ }
+#endif
+ if (mpFib->get_lcbPlcftxbxBkd() > 0)
+ {
+ PLCF<WW8BKD> aPLCF(*mpTableStream,
+ mpFib->get_fcPlcftxbxBkd(),
+ mpFib->get_lcbPlcftxbxBkd());
+#if 0
+ output.addItem("<textbox.breaks>");
+ aPLCF.dump(output);
+ output.addItem("</textbox.breaks>");
+#endif
+ }
+
+ if (mpDffBlock.get() != NULL)
+ {
+ DffBlock * pTmp = new DffBlock(*mpDffBlock);
+ //pTmp->dump(clog);
+ writerfilter::Reference<Properties>::Pointer_t pDffBlock =
+ writerfilter::Reference<Properties>::Pointer_t(pTmp);
+
+ rStream.props(pDffBlock);
+ }
+
+ {
+ rStream.info("headers");
+ sal_uInt32 nHeaderCount = getHeaderCount();
+ for (sal_uInt32 n = 0; n < nHeaderCount; ++n)
+ {
+ rStream.info(getHeaderCpAndFc(n).toString());
+ }
+ rStream.info("/headers");
+ }
+
+#if 0
+ {
+ sal_uInt32 nFootnoteCount = getFootnoteCount();
+ for (sal_uInt32 n = 0; n < nFootnoteCount; ++n)
+ {
+ //clog << "<footnote num=\"" << n << "\"/>" << endl;
+
+ writerfilter::Reference<Stream>::Pointer_t pFootnote(getFootnote(n));
+
+ if (pFootnote.get() != NULL)
+ rStream.substream(NS_rtf::LN_footnote, pFootnote);
+ }
+ }
+ {
+ sal_uInt32 nEndnoteCount = getEndnoteCount();
+ for (sal_uInt32 n = 0; n < nEndnoteCount; ++n)
+ {
+ //clog << "<endnote num=\"" << n << "\"/>" << endl;
+
+ writerfilter::Reference<Stream>::Pointer_t pEndnote(getEndnote(n));
+
+ if (pEndnote.get() != NULL)
+ rStream.substream(NS_rtf::LN_endnote, pEndnote);
+ }
+ }
+#endif
+
+ writerfilter::Reference<Table>::Pointer_t pSttbRgtplc = getListTplcs();
+
+ if (pSttbRgtplc.get() != NULL)
+ rStream.table(NS_rtf::LN_SttbRgtplc, pSttbRgtplc);
+
+ writerfilter::Reference<Table>::Pointer_t pFontTable = getFontTable();
+
+ if (pFontTable.get() != NULL)
+ rStream.table(NS_rtf::LN_FONTTABLE, pFontTable);
+
+ try
+ {
+ writerfilter::Reference<Table>::Pointer_t pStyleSheet = getStyleSheet();
+
+ if (pStyleSheet.get() != NULL)
+ rStream.table(NS_rtf::LN_STYLESHEET, pStyleSheet);
+ }
+ catch (Exception e)
+ {
+ clog << e.getText() << endl;
+ }
+
+ 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)
+ rStream.table(NS_rtf::LN_LISTTABLE, pListTable);
+
+ writerfilter::Reference<Table>::Pointer_t pLFOTable = getLFOTable();
+
+ if (pLFOTable.get() != NULL)
+ rStream.table(NS_rtf::LN_LFOTABLE, pLFOTable);
+ }
+
+ WW8DocumentIterator::Pointer_t pIt = begin();
+ WW8DocumentIterator::Pointer_t pItEnd = end();
+
+ mbInParagraphGroup = false;
+ mbInCharacterGroup = false;
+ mbInSection = false;
+
+ sal_uInt32 nSectionIndex = 0;
+
+ rStream.info(pIt->toString());
+ rStream.info(pItEnd->toString());
+
+ while (! pIt->equal(*pItEnd))
+ {
+ writerfilter::Reference<Properties>::Pointer_t
+ pProperties(pIt->getProperties());
+
+ switch (pIt->getPropertyType())
+ {
+ case PROP_FOOTNOTE:
+ {
+ rStream.info(pIt->toString());
+ writerfilter::Reference<Stream>::Pointer_t
+ pFootnote(pIt->getSubDocument());
+
+ if (pFootnote.get() != NULL)
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("substream");
+#endif
+ rStream.substream(NS_rtf::LN_footnote, pFootnote);
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("substream");
+#endif
+ }
+ }
+ break;
+ case PROP_ENDNOTE:
+ {
+ rStream.info(pIt->toString());
+ writerfilter::Reference<Stream>::Pointer_t
+ pEndnote(pIt->getSubDocument());
+
+ if (pEndnote.get() != NULL)
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("substream");
+#endif
+ rStream.substream(NS_rtf::LN_endnote, pEndnote);
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("substream");
+#endif
+ }
+ }
+ break;
+ case PROP_ANNOTATION:
+ {
+ rStream.info(pIt->toString());
+ writerfilter::Reference<Stream>::Pointer_t
+ pAnnotation(pIt->getSubDocument());
+
+ if (pAnnotation.get() != NULL)
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("substream");
+#endif
+ rStream.substream(NS_rtf::LN_annotation, pAnnotation);
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("substream");
+#endif
+ }
+ }
+ break;
+ case PROP_CHP:
+ {
+ startCharacterGroup(rStream);
+ }
+
+ break;
+ case PROP_PAP:
+ {
+ startParagraphGroup(rStream);
+ rStream.info(pIt->toString());
+ }
+
+ break;
+ case PROP_SEC:
+ {
+ startSectionGroup(rStream);
+ rStream.info(pIt->toString());
+
+ if (nSectionIndex == 0)
+ rStream.props(getDocumentProperties());
+
+ sal_uInt32 nHeaderStartIndex = 6 + nSectionIndex * 6;
+ sal_uInt32 nHeaderEndIndex = nHeaderStartIndex + 6;
+
+ if (nHeaderStartIndex >= getHeaderCount())
+ nHeaderStartIndex = getHeaderCount();
+
+ if (nHeaderEndIndex >= getHeaderCount())
+ nHeaderEndIndex = getHeaderCount();
+
+ for (sal_uInt32 n = nHeaderStartIndex; n < nHeaderEndIndex; ++n)
+ {
+ writerfilter::Reference<Stream>::Pointer_t
+ pHeader(getHeader(n));
+
+ Id qName = lcl_headerQName(n);
+
+ if (pHeader.get() != NULL)
+ rStream.substream(qName, pHeader);
+ }
+
+ ++nSectionIndex;
+ }
+
+ break;
+ default:
+ rStream.info(pIt->toString());
+ }
+
+ if (pProperties.get() != NULL)
+ {
+#ifdef DEBUG_PROPERTIES
+ PropertySetToTagHandler aHandler(IdToString::Pointer_t(new WW8IdToString()));
+ pProperties->resolve(aHandler);
+ debug_logger->addTag(aHandler.getTag());
+#endif
+
+ rStream.props(pProperties);
+ }
+
+ if (pIt->getPropertyType() == PROP_PAP)
+ {
+ startCharacterGroup(rStream);
+ }
+
+ resolveText(pIt, rStream);
+
+ ++(*pIt);
+ }
+
+ if (mbInCharacterGroup)
+ endCharacterGroup(rStream);
+
+ if (mbInParagraphGroup)
+ endParagraphGroup(rStream);
+
+ if (mbInSection)
+ endSectionGroup(rStream);
+
+}
+
+WW8Stream::Pointer_t
+WW8DocumentFactory::createStream(uno::Reference<uno::XComponentContext> rContext,
+ uno::Reference<io::XInputStream> rStream)
+{
+ return WW8Stream::Pointer_t(new WW8StreamImpl(rContext, rStream));
+}
+
+WW8Document *
+WW8DocumentFactory::createDocument(WW8Stream::Pointer_t rpStream)
+{
+ return new WW8DocumentImpl(rpStream);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8SED::get_sepx()
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ if (get_fcSepx() != 0xffffffff)
+ {
+ WW8StructBase aTmp(*mpDoc->getDocStream(), get_fcSepx(), 2);
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (new WW8PropertySetImpl
+ (*mpDoc->getDocStream(), get_fcSepx() + 2,
+ (sal_uInt32) aTmp.getU16(0), false));
+ }
+
+ return pResult;
+}
+
+void WW8DocumentImpl::insertCpAndFc(const CpAndFc & rCpAndFc)
+{
+ mCpAndFcs.insert(rCpAndFc);
+}
+
+string propertyTypeToString(PropertyType nType)
+{
+ string result;
+
+ switch (nType)
+ {
+ case PROP_SHP:
+ result = "SHP";
+
+ break;
+ case PROP_FLD:
+ result = "FLD";
+
+ break;
+ case PROP_BOOKMARKSTART:
+ result = "BOOKMARKSTART";
+
+ break;
+ case PROP_BOOKMARKEND:
+ result = "BOOKMARKEND";
+
+ break;
+ case PROP_ENDNOTE:
+ result = "ENDNOTE";
+
+ break;
+ case PROP_FOOTNOTE:
+ result = "FOOTNOTE";
+
+ break;
+ case PROP_ANNOTATION:
+ result = "ANNOTATION";
+
+ break;
+ case PROP_DOC:
+ result = "DOC";
+
+ break;
+
+ case PROP_SEC:
+ result = "SEC";
+
+ break;
+
+ case PROP_PAP:
+ result = "PAP";
+
+ break;
+
+ case PROP_CHP:
+ result = "CHP";
+
+ break;
+ default:
+ break;
+ }
+
+ return result;
+}
+
+string CpAndFc::toString() const
+{
+ string result;
+
+ result += "(";
+ result += getCp().toString();
+ result += ", ";
+ result += getFc().toString();
+ result += ", ";
+
+ result += propertyTypeToString(getType());
+
+ result += ")";
+
+ return result;
+}
+
+
+// Bookmark
+
+Bookmark::Bookmark(writerfilter::Reference<Properties>::Pointer_t pBKF,
+ rtl::OUString & rName)
+: mpBKF(pBKF), mName(rName)
+{
+}
+
+void Bookmark::resolve(Properties & rHandler)
+{
+ mpBKF->resolve(rHandler);
+
+ WW8Value::Pointer_t pValue = createValue(mName);
+ rHandler.attribute(NS_rtf::LN_BOOKMARKNAME, *pValue);
+}
+
+string Bookmark::getType() const
+{
+ return "Bookmark";
+}
+
+// BookmarkHelper
+
+CpAndFc BookmarkHelper::getStartCpAndFc(sal_uInt32 nPos)
+{
+ Cp aCp(mpStartCps->getFc(nPos));
+ Fc aFc(mpPieceTable->cp2fc(aCp));
+ CpAndFc aCpAndFc(aCp, aFc, PROP_BOOKMARKSTART);
+
+ return aCpAndFc;
+}
+
+CpAndFc BookmarkHelper::getEndCpAndFc(sal_uInt32 nPos)
+{
+ Cp aCp(mpEndCps->getU32(nPos * 4));
+ Fc aFc(mpPieceTable->cp2fc(aCp));
+ CpAndFc aCpAndFc(aCp, aFc, PROP_BOOKMARKEND);
+
+ return aCpAndFc;
+}
+
+rtl::OUString BookmarkHelper::getName(sal_uInt32 nPos)
+{
+ return mpNames->getEntry(nPos);
+}
+
+sal_uInt32 BookmarkHelper::getIndex(const CpAndFc & rCpAndFc)
+{
+ sal_uInt32 nResult = mpStartCps->getEntryCount();
+
+ sal_uInt32 nCp = rCpAndFc.getCp().get();
+
+ sal_uInt32 n;
+ switch (rCpAndFc.getType())
+ {
+ case PROP_BOOKMARKSTART:
+ {
+ sal_uInt32 nStartsCount = mpStartCps->getEntryCount();
+
+ for (n = 0; n < nStartsCount; ++n)
+ {
+ if (nCp == mpStartCps->getFc(n))
+ {
+ nResult = n;
+
+ break;
+ }
+ }
+
+ if (n == nStartsCount)
+ throw ExceptionNotFound("BookmarkHelper::getIndex");
+ }
+
+ break;
+
+ case PROP_BOOKMARKEND:
+ {
+ sal_uInt32 nEndsCount = mpEndCps->getCount() / 4;
+ sal_uInt32 nIndex = nEndsCount;
+
+ for (n = 0; n < nEndsCount; ++n)
+ {
+ if (nCp == mpEndCps->getU16(n * 4))
+ {
+ nIndex = n;
+
+ break;
+ }
+ }
+
+ if (n == nEndsCount)
+ throw ExceptionNotFound("BookmarkHelper::getIndex");
+
+ {
+ {
+ sal_uInt32 nStartsCount = mpStartCps->getEntryCount();
+ for (n = 0; n < nStartsCount; ++n)
+ {
+ WW8BKF::Pointer_t pBKF(mpStartCps->getEntry(n));
+
+ if (pBKF->get_ibkl() ==
+ sal::static_int_cast<sal_Int32>(nIndex))
+ {
+ nResult = n;
+
+ break;
+ }
+ }
+
+ if (n == nStartsCount)
+ throw ExceptionNotFound("BookmarkHelper::getIndex");
+ }
+ }
+ }
+
+ break;
+ default:
+ break;
+ }
+
+ return nResult;
+}
+
+void BookmarkHelper::init()
+{
+ {
+ sal_uInt32 nStartsCount = mpStartCps->getEntryCount();
+
+ for (sal_uInt32 n = 0; n < nStartsCount; ++n)
+ mpDoc->insertCpAndFc(getStartCpAndFc(n));
+ }
+
+ {
+ sal_uInt32 nEndsCount = mpEndCps->getCount() / 4;
+
+ for (sal_uInt32 n = 0; n < nEndsCount; ++n)
+ mpDoc->insertCpAndFc(getEndCpAndFc(n));
+ }
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+BookmarkHelper::getBKF(const CpAndFc & rCpAndFc)
+{
+ sal_uInt32 nIndex = getIndex(rCpAndFc);
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (mpStartCps->getEntryPointer(nIndex));
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+BookmarkHelper::getBookmark(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ try
+ {
+ rtl::OUString aName = getName(rCpAndFc);
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (new Bookmark(getBKF(rCpAndFc), aName));
+ }
+ catch (ExceptionNotFound e)
+ {
+ clog << e.getText() << endl;
+ }
+
+ return pResult;
+}
+
+rtl::OUString BookmarkHelper::getName(const CpAndFc & rCpAndFc)
+{
+ rtl::OUString sResult;
+
+ sal_uInt32 nIndex = getIndex(rCpAndFc);
+
+ sResult = getName(nIndex);
+
+ return sResult;
+}
+
+template <class T, class Helper>
+struct ProcessPLCF2Map
+{
+ void process(typename PLCF<T>::Pointer_t pPlcf,
+ typename Helper::Map_t & rMap,
+ PropertyType type,
+ WW8DocumentImpl * pDoc)
+ {
+ if (pPlcf.get() != NULL)
+ {
+ sal_uInt32 nCount = pPlcf->getEntryCount();
+
+ for (sal_uInt32 n = 0; n < nCount; n++)
+ {
+ Cp aCp(pPlcf->getFc(n));
+ CpAndFc aCpAndFc(pDoc->getCpAndFc(aCp, type));
+ typename T::Pointer_t pT = pPlcf->getEntry(n);
+
+ rMap[aCpAndFc] = pT;
+ }
+ }
+ }
+};
+
+FieldHelper::FieldHelper(PLCF<WW8FLD>::Pointer_t pPlcffldMom,
+ WW8DocumentImpl * pDoc)
+: mpDoc(pDoc)
+{
+ ProcessPLCF2Map<WW8FLD, FieldHelper> process;
+ process.process(pPlcffldMom, mMap, PROP_FLD, pDoc);
+}
+
+void FieldHelper::init()
+{
+ Map_t::iterator aIt;
+
+ for (aIt = mMap.begin(); aIt != mMap.end(); aIt++)
+ {
+ mpDoc->insertCpAndFc(aIt->first);
+ }
+}
+
+WW8FLD::Pointer_t FieldHelper::getWW8FLD(const CpAndFc & rCpAndFc)
+{
+ WW8FLD::Pointer_t pFld = mMap[rCpAndFc];
+
+ return pFld;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+FieldHelper::getField(const CpAndFc & rCpAndFc)
+{
+ WW8FLD::Pointer_t pFLD = getWW8FLD(rCpAndFc);
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8FLD(*pFLD));
+}
+
+ShapeHelper::ShapeHelper(PLCF<WW8FSPA>::Pointer_t pPlcspaMom,
+ PLCF<WW8FSPA>::Pointer_t pPlcspaHdr,
+ WW8DocumentImpl * pDoc)
+: mpDoc(pDoc)
+{
+ ProcessPLCF2Map<WW8FSPA, ShapeHelper> process;
+ process.process(pPlcspaMom, mMap, PROP_SHP, pDoc);
+ process.process(pPlcspaHdr, mMap, PROP_SHP, pDoc);
+}
+
+void ShapeHelper::init()
+{
+ Map_t::iterator aIt;
+
+ for (aIt = mMap.begin(); aIt != mMap.end(); aIt++)
+ {
+ mpDoc->insertCpAndFc(aIt->first);
+ aIt->second->setDocument(mpDoc);
+ }
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+ShapeHelper::getShape(const CpAndFc & rCpAndFc)
+{
+ WW8FSPA::Pointer_t pFSPA = mMap[rCpAndFc];
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8FSPA(*pFSPA));
+}
+
+BreakHelper::BreakHelper(PLCF<WW8BKD>::Pointer_t pPlcfbkdMom,
+ WW8DocumentImpl * pDoc)
+: mpDoc(pDoc)
+{
+ ProcessPLCF2Map<WW8BKD, BreakHelper> process;
+ process.process(pPlcfbkdMom, mMap, PROP_BRK, pDoc);
+}
+
+void BreakHelper::init()
+{
+ Map_t::iterator aIt;
+
+ for (aIt = mMap.begin(); aIt != mMap.end(); aIt++)
+ {
+ mpDoc->insertCpAndFc(aIt->first);
+ }
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+BreakHelper::getBreak(const CpAndFc & rCpAndFc)
+{
+ WW8BKD::Pointer_t pBKD = mMap[rCpAndFc];
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8BKD(*pBKD));
+}
+
+
+}}
diff --git a/writerfilter/source/doctok/WW8DocumentImpl.hxx b/writerfilter/source/doctok/WW8DocumentImpl.hxx
new file mode 100644
index 000000000000..a1f7e8abb2b4
--- /dev/null
+++ b/writerfilter/source/doctok/WW8DocumentImpl.hxx
@@ -0,0 +1,848 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_DOCUMENT_IMPL_HXX
+#define INCLUDED_WW8_DOCUMENT_IMPL_HXX
+
+#include <set>
+#include <WW8PieceTable.hxx>
+#include <WW8BinTable.hxx>
+#include <resources.hxx>
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_HXX
+#include <resourcemodel/WW8ResourceModel.hxx>
+#endif
+#include <PLCF.hxx>
+#include <WW8Sttbf.hxx>
+#include <XNoteHelper.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+class WW8DocumentImpl;
+
+/**
+ A bookmark.
+*/
+class Bookmark : public writerfilter::Reference<Properties>
+{
+ /// bookmark first descriptor
+ writerfilter::Reference<Properties>::Pointer_t mpBKF;
+
+ /// name of bookmark
+ rtl::OUString mName;
+
+public:
+ Bookmark(writerfilter::Reference<Properties>::Pointer_t pBKF,
+ rtl::OUString & rName);
+
+ /**
+ Resolve bookmark to handler.
+
+ @param rHandler handler to send events to
+ */
+ virtual void resolve(Properties & rHandler);
+
+ virtual string getType() const;
+};
+
+/**
+ A helper for bookmarks.
+ */
+class BookmarkHelper
+{
+ /// PLCF containing Cps and BKFs for the bookmarks
+ PLCF<WW8BKF>::Pointer_t mpStartCps;
+
+ /// Cps of the ends of bookmarks
+ WW8StructBase::Pointer_t mpEndCps;
+
+ /// STTBF containing the names of bookmarks
+ WW8Sttbf::Pointer_t mpNames;
+
+ /// piece table for converting CPs to FCs
+ WW8PieceTable::Pointer_t mpPieceTable;
+
+ /// document to insert CpAndFcs to
+ WW8DocumentImpl * mpDoc;
+
+ /**
+ Return start CpAndFc for a bookmark.
+
+ @param nPos index of the bookmark
+ */
+ CpAndFc getStartCpAndFc(sal_uInt32 nPos);
+
+ /**
+ Return end CpAndFc for a bookmark.
+
+ @param nPos index of the bookmark
+ */
+ CpAndFc getEndCpAndFc(sal_uInt32 nPos);
+
+ /**
+ Return the name of a bookmark.
+
+ @param nPos index of the bookmark
+ */
+ rtl::OUString getName(sal_uInt32 nPos);
+
+ /**
+ Return index of a bookmark.
+
+ @param rCpAndFc CpAndFc of the bookmark
+ */
+ sal_uInt32 getIndex(const CpAndFc & rCpAndFc);
+
+public:
+ typedef boost::shared_ptr<BookmarkHelper> Pointer_t;
+
+ BookmarkHelper(PLCF<WW8BKF>::Pointer_t pStartCps,
+ WW8StructBase::Pointer_t pEndCps,
+ WW8Sttbf::Pointer_t pNames,
+ WW8PieceTable::Pointer_t pPieceTable,
+ WW8DocumentImpl * pDoc)
+ : mpStartCps(pStartCps), mpEndCps(pEndCps), mpNames(pNames),
+ mpPieceTable(pPieceTable), mpDoc(pDoc)
+ {
+ }
+
+ /**
+ Initialize.
+
+ Inserts CpAndFcs for the bookmark starts and ends into the
+ document.
+ */
+ void init();
+
+ /**
+ Return BKF of a bookmark.
+
+ @param rCpAndFc CpAndFc of the bookmark
+ */
+ writerfilter::Reference<Properties>::Pointer_t getBKF
+ (const CpAndFc & rCpAndFc);
+
+ /**
+ Return the name of a bookmark.
+
+ @param rCpAndFc CpAndFc of the bookmark
+ */
+ rtl::OUString getName(const CpAndFc & rCp);
+
+ /**
+ Return bookmark.
+ @param rCpAndFc CpAndFc of the bookmark
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getBookmark(const CpAndFc & rCpAndFc);
+};
+
+/**
+ Helper for shapes.
+ */
+class ShapeHelper
+{
+public:
+ typedef hash_map<CpAndFc, WW8FSPA::Pointer_t, CpAndFcHash> Map_t;
+
+private:
+ WW8DocumentImpl * mpDoc;
+ Map_t mMap;
+
+public:
+ typedef boost::shared_ptr<ShapeHelper> Pointer_t;
+ ShapeHelper(PLCF<WW8FSPA>::Pointer_t pPlcspaMom,
+ PLCF<WW8FSPA>::Pointer_t pPlcspaHdr,
+ WW8DocumentImpl * pDoc);
+
+ void init();
+
+ writerfilter::Reference<Properties>::Pointer_t
+ getShape(const CpAndFc & rCpAndFc);
+
+};
+
+/**
+ Helper for fields.
+ */
+class FieldHelper
+{
+public:
+ typedef hash_map<CpAndFc, WW8FLD::Pointer_t,
+ CpAndFcHash> Map_t;
+
+private:
+ WW8DocumentImpl * mpDoc;
+ Map_t mMap;
+public:
+
+ typedef boost::shared_ptr<FieldHelper> Pointer_t;
+ FieldHelper(PLCF<WW8FLD>::Pointer_t pPlcffldMom,
+ WW8DocumentImpl * pDoc);
+
+ void init();
+
+ writerfilter::Reference<Properties>::Pointer_t
+ getField(const CpAndFc & rCpAndFc);
+
+ WW8FLD::Pointer_t getWW8FLD(const CpAndFc & rCpAndFc);
+};
+
+/**
+ Helper for Breaks.
+*/
+class BreakHelper
+{
+public:
+ typedef hash_map<CpAndFc, WW8BKD::Pointer_t,
+ CpAndFcHash> Map_t;
+private:
+ WW8DocumentImpl * mpDoc;
+ Map_t mMap;
+public:
+ typedef boost::shared_ptr<BreakHelper> Pointer_t;
+ BreakHelper(PLCF<WW8BKD>::Pointer_t pPlcfbkdMom,
+ WW8DocumentImpl * pDoc);
+
+ void init();
+
+ writerfilter::Reference<Properties>::Pointer_t
+ getBreak(const CpAndFc & rCpAndFc);
+};
+
+/**
+ Implementation class for document.
+ */
+class WW8DocumentImpl : public WW8Document
+{
+ /// true if the document is contained in another document
+ bool bSubDocument;
+
+ /// picture location
+ sal_uInt32 mfcPicLoc;
+
+ /// true if FFDATA structure is found at offset mfcPicLoc in data stream
+ bool mbPicIsData;
+
+ /// current field descriptor
+ WW8FLD::Pointer_t mpFLD;
+
+ /// CpAndFcs in the document where properties change
+ CpAndFcs mCpAndFcs;
+
+ /// CpAndFc pointing to the start of the document
+ CpAndFc mCpAndFcStart;
+
+ /// CpAndFc pointing to the end of the document
+ CpAndFc mCpAndFcEnd;
+
+ /// pointer to the cache of FKPs containing character properties
+ WW8FKPCache::Pointer_t mpCHPFKPCache;
+
+ /// pointer to the cache of FPKs containing paragraph properties
+ WW8FKPCache::Pointer_t mpPAPFKPCache;
+
+ /// pointer to the stream containing the whole document
+ WW8Stream::Pointer_t mpStream;
+
+ /// pointer to the substream of the document containing table like
+ /// structures
+ WW8Stream::Pointer_t mpTableStream;
+
+ /// pointer to the substream of the document containing the
+ /// document contents and formatting information
+ WW8Stream::Pointer_t mpDocStream;
+
+ /// pointer to the data stream of the document
+ WW8Stream::Pointer_t mpDataStream;
+
+ /// pointer to the compound object stream of the document
+ WW8Stream::Pointer_t mpCompObjStream;
+
+ /// pointer to the summayry information stream of the document
+ WW8Stream::Pointer_t mpSummaryInformationStream;
+
+ /// pointer to the piece table
+ WW8PieceTable::Pointer_t mpPieceTable;
+
+ /// pointer to the bin table for paragraph properties
+ WW8BinTable::Pointer_t mpBinTablePAPX;
+
+ /// pointer to the bin table for character properties
+ WW8BinTable::Pointer_t mpBinTableCHPX;
+
+ /// PLCF containing the section descriptions
+ PLCF<WW8SED>::Pointer_t mpSEDs;
+
+ /// pointer to the file information block
+ WW8Fib::Pointer_t mpFib;
+
+ /// pointer to the file information block for post 2000 documents
+ WW8FibRgFcLcb2000::Pointer_t mpFibRgFcLcb2000;
+
+ /// pointer to the offsets of headers/footers
+ WW8StructBase::Pointer_t mpHeaderOffsets;
+
+ /// pointer to the helper for footnotes
+ XNoteHelper<WW8FRD>::Pointer_t mpFootnoteHelper;
+
+ /// pointer to the helper for endnotes
+ XNoteHelper<WW8FRD>::Pointer_t mpEndnoteHelper;
+
+ /// pointer to the helper for annotations
+ XNoteHelper<WW8ATRD>::Pointer_t mpAnnotationHelper;
+
+ /// pointer to the helper for bookmarks
+ BookmarkHelper::Pointer_t mpBookmarkHelper;
+
+ /// pointer to the helper for fields
+ FieldHelper::Pointer_t mpFieldHelper;
+
+ /// pointer to the helper for shapes
+ ShapeHelper::Pointer_t mpShapeHelper;
+
+ /// pointer to the helper for breaks
+ BreakHelper::Pointer_t mpBreakHelper;
+
+
+ /// cache for the Cp where main text flow end
+ CpAndFc mDocumentEndCpAndFc;
+
+ /// cache for the Cp where footnotes section ends
+ CpAndFc mFootnoteEndCpAndFc;
+
+ /// cache for the Cp where header section ends
+ CpAndFc mHeaderEndCpAndFc;
+
+ /// cache for the Cp where annotation section ends
+ CpAndFc mAnnotationEndCpAndFc;
+
+ /// cache for the Cp where endnote section ends
+ CpAndFc mEndnoteEndCpAndFc;
+
+ /// cache for the Cp where textbox section ends
+ CpAndFc mTextboxEndCpAndFc;
+
+ /// cache for the Cp where textbox in header section ends
+ CpAndFc mTextboxHeaderEndCpAndFc;
+
+ /// DffBlock of document
+ DffBlock::Pointer_t mpDffBlock;
+
+ /// Textbox stories
+ PLCF<WW8FTXBXS>::Pointer_t mpTextBoxStories;
+
+ bool mbInSection;
+ bool mbInParagraphGroup;
+ bool mbInCharacterGroup;
+
+ bool isSpecial(sal_uInt32 nChar);
+
+ WW8Stream::Pointer_t getSubStream(const ::rtl::OUString & sId) const;
+
+ /**
+ Parse bin table and create CpAndFcs for all points in the
+ document where properties of the given type change.
+
+ @param rTable bin table to parse
+ @param eType_ type of CpAndFcs to create
+ */
+ void parseBinTableCpAndFcs(WW8BinTable & rTable, PropertyType eType_);
+
+ void startCharacterGroup(Stream & rStream);
+ void endCharacterGroup(Stream & rStream);
+ void startParagraphGroup(Stream & rStream);
+ void endParagraphGroup(Stream & rStream);
+ void startSectionGroup(Stream & rStream);
+ void endSectionGroup(Stream & rStream);
+ void text(Stream & rStream, const sal_uInt8 * data, size_t len);
+ void utext(Stream & rStream, const sal_uInt8 * data, size_t len);
+
+public:
+ WW8DocumentImpl(WW8Stream::Pointer_t rpStream);
+ WW8DocumentImpl(const WW8DocumentImpl & rSrc,
+ const CpAndFc & rStart, const CpAndFc & rEnd);
+ virtual ~WW8DocumentImpl();
+
+ virtual WW8DocumentImpl & Assign(const WW8DocumentImpl & rSrc);
+
+ virtual string getType() const;
+
+ virtual WW8Document::Pointer_t getSubDocument(SubDocumentId nId);
+ virtual WW8DocumentIterator::Pointer_t getIterator
+ (const CpAndFc & rCpAndFc);
+ virtual WW8DocumentIterator::Pointer_t begin();
+ virtual WW8DocumentIterator::Pointer_t end();
+
+ virtual WW8Stream::Sequence getText(const CpAndFc & rStart);
+
+ /**
+ Returns the document stream.
+ */
+
+ WW8Stream::Pointer_t getDocStream() const;
+
+ /**
+ Returns the data stream.
+ */
+ WW8Stream::Pointer_t getDataStream() const;
+
+ /**
+ Returns distance in bytes to next CpAndFc.
+
+ @param rCpAndFc CpAndFc to start at
+ */
+ sal_uInt32 getByteLength(const CpAndFc & rCpAndFc) const;
+
+ /**
+ Returns first character position in document.
+ */
+ const CpAndFc & getFirstCp() const;
+
+ /**
+ Returns last character position in document.
+ */
+ const CpAndFc & getLastCp() const;
+
+ /**
+ Returns next character position with change in properties.
+
+ @param rCpAndFc position to start at
+ */
+ CpAndFc getNextCp(const CpAndFc & rCpAndFc) const;
+
+ /**
+ Returns previous character position with change in properties.
+
+ @param rCpAndFc position to start at
+ */
+ CpAndFc getPrevCp(const CpAndFc & rCpAndFc) const;
+
+ /**
+ Returns character position where main text flow ends.
+ */
+ CpAndFc getDocumentEndCp() const;
+
+ /**
+ Returns character position where footnotes end.
+ */
+ CpAndFc getFootnodeEndCp() const;
+
+ /**
+ Returns character position where headers end.
+ */
+ CpAndFc getHeaderEndCp() const;
+
+ /**
+ Returns character position where annatations end.
+ */
+ CpAndFc getAnnotationEndCp() const;
+
+ /**
+ Returns character position where endnotes end.
+ */
+ CpAndFc getEndnoteEndCp() const;
+
+ /**
+ Returns character position where textboxes end.
+ */
+ CpAndFc getTextboxEndCp() const;
+
+ /**
+ Returns character positoion where textboxes in headers end.
+ */
+ CpAndFc getTextboxHeaderEndCp() const;
+
+ /**
+ Insert CpAndFc to set of CpAndFcs.
+
+ @param rCpAndFc CpAndFc to insert
+ */
+ void insertCpAndFc(const CpAndFc & rCpAndFc);
+
+ /**
+ Return FKP for certain CpAndFc.
+
+ @param rCpAndFc CpAndFc for which the FKP is looked for
+ */
+ WW8FKP::Pointer_t getFKP(const CpAndFc & rCpAndFc);
+
+ /**
+ Return FKP containing character properties.
+
+ @param nIndex index of FKP to return
+ @param bComplex true if FKP contains complex FCs
+ */
+ WW8FKP::Pointer_t getFKPCHPX(sal_uInt32 nIndex, bool bComplex);
+
+ /**
+ Return FKP containing paragraph properties.
+
+ @param nIndex index of FKP to return
+ @param bComplex true if FKP contains complex FCs
+ */
+ WW8FKP::Pointer_t getFKPPAPX(sal_uInt32 nIndex, bool bComplex);
+
+ /**
+ Return property set valid at a certain CpAndFc.
+
+ @param rCpAndFc CpAndFc to look at
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getProperties(const CpAndFc & rCpAndFc);
+
+ /**
+ Return subdocument referenced at a certain point in document.
+
+ @param rCpAndFc CpAndFc where subdocument is referenced
+ */
+ writerfilter::Reference<Stream>::Pointer_t
+ getSubDocument(const CpAndFc & rCpAndFc);
+
+ /**
+ Return section description at a certain CpAndFc.
+
+ @param rCpAndFc CpAndFc to look at
+ */
+ WW8SED * getSED(const CpAndFc & rCpAndFc) const;
+
+ /**
+ Return reference to list plcs.
+ */
+ writerfilter::Reference<Table>::Pointer_t getListTplcs() const;
+
+ /**
+ Return reference to list table.
+ */
+ writerfilter::Reference<Table>::Pointer_t getListTable() const;
+
+ /**
+ Return reference to table of list level overrides.
+ */
+ writerfilter::Reference<Table>::Pointer_t getLFOTable() const;
+
+ /**
+ Return reference to font table.
+ */
+ writerfilter::Reference<Table>::Pointer_t getFontTable() const;
+
+ /**
+ Return reference to style sheet.
+ */
+ writerfilter::Reference<Table>::Pointer_t getStyleSheet() const;
+
+ /**
+ Return reference to associated data.
+ */
+ writerfilter::Reference<Table>::Pointer_t getAssocTable() const;
+
+ /**
+ Return count of headers/footers.
+ */
+ sal_uInt32 getHeaderCount() const;
+
+ /**
+ Return CpAndFc for a header or footer.
+
+ @param nPos index in the list of headers and footers
+ */
+ CpAndFc getHeaderCpAndFc(sal_uInt32 nPos);
+
+ /**
+ Return subdocument for header/footer.
+
+ @param nPos index in the list of headers and footers
+ */
+ writerfilter::Reference<Stream>::Pointer_t getHeader(sal_uInt32 nPos);
+
+ /**
+ Return count of footnotes.
+ */
+ sal_uInt32 getFootnoteCount() const;
+
+ /**
+ Return subdocument for footnote.
+
+ @param nPos index of the footnote
+ */
+ writerfilter::Reference<Stream>::Pointer_t getFootnote(sal_uInt32 nPos);
+
+ /**
+ Return subdocument for footnote at a certain position in document.
+
+ @param rCpAndFc position in document
+ */
+ writerfilter::Reference<Stream>::Pointer_t getFootnote
+ (const CpAndFc & rCpAndFc);
+
+ /**
+ Return count of endnotes.
+ */
+ sal_uInt32 getEndnoteCount() const;
+
+ /**
+ Return subdocument for an endnote.
+
+ @param nPos index of the endnote
+ */
+ writerfilter::Reference<Stream>::Pointer_t getEndnote(sal_uInt32 nPos);
+
+ /**
+ Return subdocument for an endnote.
+
+ @param rCpAndFc CpAndFc where endnote is referenced
+ */
+ writerfilter::Reference<Stream>::Pointer_t getEndnote
+ (const CpAndFc & rCpAndFc);
+
+ /**
+ Return count of annotations.
+ */
+ sal_uInt32 getAnnotationCount() const;
+
+ /**
+ Return subdocument for an annotation.
+
+ @param nPos index of the annotation
+ */
+ writerfilter::Reference<Stream>::Pointer_t getAnnotation(sal_uInt32 nPos);
+
+ /**
+ Return subdocument for an annotation.
+
+ @param rCpAndFc CpAndFc where annotation is referenced
+ */
+ writerfilter::Reference<Stream>::Pointer_t getAnnotation
+ (const CpAndFc & rCpAndFc);
+
+ /**
+ Return bookmark.
+
+ @param rCpAndFc CpAndFc where bookmark begins or ends
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getBookmark(const CpAndFc & rCpAndFc) const;
+
+ /**
+ Return shape.
+
+ @param rCpAndFc CpAndFc of the shape
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getShape(const CpAndFc & rCpAndFc) const;
+
+ writerfilter::Reference<Properties>::Pointer_t
+ getShape(sal_uInt32 nSpid);
+
+ /**
+ Return blip.
+
+ @param nBlib number of the blip to return
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getBlip(sal_uInt32 nBlib);
+
+ /**
+ Return break descriptor.
+
+ @param rCpAndFc CpAndFc of the break
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getBreak(const CpAndFc & rCpAndFc) const;
+
+
+ /**
+ Return field.
+
+ @param rCpAndFc CpAndFc of the field
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getField(const CpAndFc & rCpAndFc) const;
+
+ /**
+ Return document properties.
+
+ */
+ writerfilter::Reference<Properties>::Pointer_t
+ getDocumentProperties() const;
+
+ /**
+ Return current field descriptor.
+ */
+ WW8FLD::Pointer_t getCurrentFLD() const;
+
+ /**
+ Return stream of text box.
+
+ @param nShpId shape id of text box
+ */
+ writerfilter::Reference<Stream>::Pointer_t
+ getTextboxText(sal_uInt32 nShpId) const;
+
+ /**
+ Return file character position according to a character
+ position.
+
+ @param cp the character position
+ */
+ Fc cp2fc(const Cp & cp) const;
+
+ /**
+ Return the character position according to file character
+ position.
+
+ @param fc the file character position
+ */
+ Cp fc2cp(const Fc & fc) const;
+
+ /**
+ Return CpAndFc related to character position.
+
+ @param cp the character position
+ */
+ CpAndFc getCpAndFc(const Cp & cp, PropertyType type = PROP_DOC) const;
+
+ /**
+ Return CpAndFc related to file character position.
+
+ @param fc the file character position
+ */
+ CpAndFc getCpAndFc(const Fc & fc, PropertyType type = PROP_DOC) const;
+
+ sal_uInt32 getPicLocation() const;
+ void setPicLocation(sal_uInt32 fcPicLoc);
+
+ bool isPicData();
+ void setPicIsData(bool bPicIsData);
+
+ /**
+ Create events for the document.
+
+ @param rHandler handler to send the events to
+ */
+ void resolve(Stream & rHandler);
+
+ /**
+ Resolve text.
+
+ The text of the given iterator is split at special
+ characters. Each run of non-special characters is send as one
+ event. Each run of special characters is send as one event.
+
+ @param pIt iterator whose text is to be resolved
+ @param rStream handler for the events
+ */
+ void resolveText(WW8DocumentIterator::Pointer_t pIt, Stream & rStream);
+
+ /**
+ Resolve the picture at mfcPicLoc.
+
+ @param rStream
+ */
+ void resolvePicture(Stream & rStream);
+
+ /**
+ Resolve special char.
+
+ @param nChar the special char
+ @param rStream the stream handler to resolve the special char to
+ */
+ void resolveSpecialChar(sal_uInt32 nChar, Stream & rStream);
+};
+
+/**
+ Implentation class for an iterator in a document.
+ */
+class WW8DocumentIteratorImpl : public WW8DocumentIterator
+{
+ /// pointer to the document
+ WW8DocumentImpl * mpDocument;
+
+ /// CpAndFc the iterator is pointing to
+ CpAndFc mCpAndFc;
+
+public:
+ WW8DocumentIteratorImpl(WW8DocumentImpl * pDocument,
+ const CpAndFc & rCpAndFc)
+ : mpDocument(pDocument), mCpAndFc(rCpAndFc)
+ {
+ }
+
+ virtual ~WW8DocumentIteratorImpl();
+
+ /**
+ Increase the iterator to the next character position.
+ */
+ WW8DocumentIterator & operator++();
+
+ /**
+ Decrease the iterator to the previous character position.
+ */
+ WW8DocumentIterator & operator--();
+
+ virtual writerfilter::Reference<Properties>::Pointer_t getProperties()
+ const;
+ //void setAttributes(const IAttributeSet & aAttributeSet);
+
+ virtual writerfilter::Reference<Stream>::Pointer_t getSubDocument() const;
+
+ /** Return if the text the iterator points to is complex.
+
+ @attention The definition of a complex run of text in Word is
+ counter-intuitive: Complex runs use 8-bit encoding for characters,
+ non-complex ones use 16 bits.
+ */
+ bool isComplex() const;
+ virtual PropertyType getPropertyType() const;
+
+ virtual WW8Stream::Sequence getText();
+ virtual bool equal(const WW8DocumentIterator & rIt) const;
+
+ virtual string toString() const;
+ virtual void dump(ostream & o) const;
+
+ /**
+ Return pointer to the shape at character position the iterator
+ is pointing to.
+ */
+ virtual writerfilter::Reference<Properties>::Pointer_t getShape() const;
+
+ /**
+ Return pointer to section description at character position the
+ iterator points to.
+ */
+ WW8SED * getSED() const;
+};
+
+/**
+ Return string for property type.
+ */
+string propertyTypeToString(PropertyType nType);
+
+}}
+#endif // INCLUDED_WW8_DOCUMENT_IMPL_HXX
diff --git a/writerfilter/source/doctok/WW8FKP.hxx b/writerfilter/source/doctok/WW8FKP.hxx
new file mode 100644
index 000000000000..af0af1b8e303
--- /dev/null
+++ b/writerfilter/source/doctok/WW8FKP.hxx
@@ -0,0 +1,133 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_FKP_HXX
+#define INCLUDED_WW8_FKP_HXX
+
+#ifndef INCLUDES_WW8_CP_AND_FC_HXX
+#include <WW8CpAndFc.hxx>
+#endif
+#ifndef INCLUDE_WW8_STRUCT_BASE_HXX
+#include <WW8StructBase.hxx>
+#endif
+
+namespace writerfilter {
+namespace doctok
+{
+
+/**
+ A formated diskpage (FKP).
+
+ Formatted diskpages are used by Word to store runs of SPRMs (single
+ property modifier). A FKP contains a list of file character
+ positions (FC). For each FC there is an entry containing the run of
+ SPRMs stored for that FC.
+ */
+class WW8FKP : public WW8StructBase
+{
+public:
+ /**
+ Shared pointer to an FKP.
+ */
+ typedef boost::shared_ptr<WW8FKP> Pointer_t;
+
+ /**
+ Create FKP from stream.
+
+ @param rStream stream to create FKP from
+ @param nOffset offset in stream where the FKP starts.
+ */
+ WW8FKP(WW8Stream & rStream, sal_uInt32 nOffset)
+ : WW8StructBase(rStream, nOffset, 512)
+ {
+ }
+
+ /**
+ Return count of entries.
+ */
+ virtual sal_uInt32 getEntryCount() const = 0;
+
+ /**
+ Return an FC.
+
+ @param nIndex index of the FC to return
+ */
+ virtual Fc getFc(sal_uInt32 nIndex) const = 0;
+
+ /**
+ Returns the first FC of the FKP.
+ */
+ virtual Fc getFirstFc() const = 0;
+
+ /**
+ Returns the last FC of the FKP.
+ */
+ virtual Fc getLastFc() const = 0;
+
+ /**
+ Check if an FKP contains an FC.
+
+ @param rFc FC to look for
+
+ @retval true FKP contains FC
+ @retval false else
+ */
+ virtual bool contains(const Fc & rFc) const = 0;
+
+ /**
+ Return properties stored in an FKP for a FC.
+
+ @param rFc FC to look for
+ */
+ virtual writerfilter::Reference<Properties>::Pointer_t
+ getProperties(const Fc & rFc)
+ const = 0;
+};
+
+/**
+ Cache providing FKPs.
+ */
+class WW8FKPCache
+{
+public:
+ /**
+ Shared pointer to cache.
+ */
+ typedef boost::shared_ptr<WW8FKPCache> Pointer_t;
+
+ virtual ~WW8FKPCache();
+
+ /**
+ Return FKP.
+
+ @param nPageNumber number of page to return
+ */
+ virtual WW8FKP::Pointer_t get(sal_uInt32 nPageNumber, bool bComplex) = 0;
+};
+}}
+
+#endif // INCLUDED_WW8_FKP_HXX
diff --git a/writerfilter/source/doctok/WW8FKPImpl.cxx b/writerfilter/source/doctok/WW8FKPImpl.cxx
new file mode 100644
index 000000000000..354159bced0c
--- /dev/null
+++ b/writerfilter/source/doctok/WW8FKPImpl.cxx
@@ -0,0 +1,240 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "WW8FKPImpl.hxx"
+#include "WW8PropertySetImpl.hxx"
+
+namespace writerfilter {
+namespace doctok
+{
+#if 0
+sal_uInt32 WW8FKPImpl::getIndex(const Fc & rFc) const
+{
+ sal_uInt32 nLeft = 0;
+ sal_uInt32 nRight = getEntryCount();
+
+ while (nRight - nLeft > 1)
+ {
+ sal_uInt32 nMiddle = (nLeft + nRight) / 2;
+ Fc aFcMiddle = getFc(nMiddle);
+
+ if (! (rFc < aFcMiddle))
+ {
+ nLeft = nMiddle;
+ }
+ else
+ {
+ nRight = nMiddle;
+ }
+ }
+
+ return nLeft;
+}
+#else
+sal_uInt32 WW8FKPImpl::getIndex(const Fc & rFc) const
+{
+ sal_uInt32 nResult = getEntryCount();
+
+ while (rFc < getFc(nResult))
+ nResult--;
+
+ return nResult;
+}
+#endif
+
+
+writerfilter::Reference<Properties>::Pointer_t WW8CHPFKPImpl::getProperties(const Fc & rFc) const
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ sal_uInt32 n = getIndex(rFc);
+
+ sal_uInt16 nOffset = 2 * getU8(getRgb() + n);
+
+ if (nOffset > getRgb() + getEntryCount())
+ {
+ sal_uInt16 nCbChpx = getU8(nOffset);
+
+ if (nCbChpx > 1 && nOffset + nCbChpx + 1 <= 511)
+ {
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (new WW8PropertySetImpl(*this, nOffset + 1, nCbChpx));
+ }
+ }
+#if 0
+ else
+ {
+ clog << "outsider!!!" << endl;
+ }
+#endif
+
+ return pResult;
+}
+
+void WW8CHPFKPImpl::dump(OutputWithDepth<string> & o) const
+{
+ o.addItem("<fkp type='CHP'>");
+
+ sal_uInt32 nCount = getEntryCount();
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer),
+ "<fkpentry fc='%" SAL_PRIxUINT32 "' offsetInFkp='%x'/>",
+ getFc(n).get(), 2 * getU8(getRgb() + n));
+
+ o.addItem(sBuffer);
+ }
+
+ WW8StructBase::dump(o);
+ o.addItem("</fkp>");
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8PAPFKPImpl::getProperties(const Fc & rFc) const
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ sal_uInt32 n = getIndex(rFc);
+
+ sal_uInt16 nOffset = 2 * getU8(getRgb() + n * 13);
+
+ if (nOffset != 0)
+ {
+ if (nOffset > getRgb() + getEntryCount() * 13)
+ {
+ sal_uInt32 nOffsetIStd = nOffset + 1;
+ sal_uInt16 nCbPapx = getU8(nOffset) * 2;
+
+ if (nCbPapx == 0)
+ {
+ nOffsetIStd = nOffset + 2;
+ nCbPapx = getU8(nOffset + 1) * 2 + 2;
+ }
+
+ sal_uInt32 nOffsetEnd = nOffset + nCbPapx;
+ //sal_uInt32 nOffsetSprms = nOffsetIStd + 2;
+
+ if (nCbPapx > 1 && nOffset + nCbPapx <= 511)
+ {
+ pResult = writerfilter::Reference<Properties>::Pointer_t
+ (new WW8PropertySetImpl(*this, nOffsetIStd,
+ nOffsetEnd - nOffsetIStd,
+ true));
+ }
+ }
+#if 0
+ else
+ {
+ clog << "outsider!!!" << endl;
+ }
+#endif
+ }
+
+ return pResult;
+}
+
+void WW8PAPFKPImpl::dump(OutputWithDepth<string> & o) const
+{
+ o.addItem("<fkp type='PAP'>");
+
+ sal_uInt32 nCount = getEntryCount();
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer),
+ "<fkpentry fc='%" SAL_PRIxUINT32 "' offsetInFKP='%x'/>",
+ getFc(n).get(), 2 * getU8(getRgb() + n * 13));
+
+ o.addItem(sBuffer);
+ }
+
+ WW8StructBase::dump(o);
+
+ o.addItem("</fkp>");
+}
+
+bool operator < (const PageNumberAndFKP & rA,
+ const PageNumberAndFKP & rB)
+{
+ return rA.mnPageNumber < rB.mnPageNumber;
+}
+
+WW8FKPCache::~WW8FKPCache()
+{
+}
+
+WW8FKP::Pointer_t WW8FKPCacheImpl::get(sal_uInt32 nPageNumber,
+ bool bComplex)
+{
+ WW8FKP::Pointer_t pResult;
+
+ PageNumbersAndFKPs::iterator aIt;
+ aIt = mPageNumbersAndFKPs.find
+ (PageNumberAndFKP(nPageNumber, WW8FKP::Pointer_t()));
+
+ if (aIt != mPageNumbersAndFKPs.end())
+ pResult = aIt->getFKP();
+ else
+ {
+ if (mPageNumbersAndFKPs.size() > mnCacheSize)
+ {
+ PageNumbersAndFKPs::iterator aItDel =
+ mPageNumbersAndFKPs.find
+ (PageNumberAndFKP(mPageNumbers.front(),
+ WW8FKP::Pointer_t()));
+
+ mPageNumbersAndFKPs.erase(aItDel);
+ mPageNumbers.pop_front();
+ }
+
+ pResult = createFKP(nPageNumber, bComplex);
+
+ PageNumberAndFKP aPageNumberAndFKP(nPageNumber, pResult);
+ mPageNumbersAndFKPs.insert(aPageNumberAndFKP);
+ mPageNumbers.push_back(nPageNumber);
+ }
+
+ return pResult;
+}
+
+WW8FKP::Pointer_t WW8CHPFKPCacheImpl::createFKP(sal_uInt32 nPageNumber,
+ bool bComplex)
+{
+ return WW8FKP::Pointer_t(new WW8CHPFKPImpl
+ (*mpStream, nPageNumber, bComplex));
+}
+
+WW8FKP::Pointer_t WW8PAPFKPCacheImpl::createFKP(sal_uInt32 nPageNumber,
+ bool bComplex)
+{
+ return WW8FKP::Pointer_t(new WW8PAPFKPImpl
+ (*mpStream, nPageNumber, bComplex));
+}
+}}
diff --git a/writerfilter/source/doctok/WW8FKPImpl.hxx b/writerfilter/source/doctok/WW8FKPImpl.hxx
new file mode 100644
index 000000000000..a7e59a33b1b2
--- /dev/null
+++ b/writerfilter/source/doctok/WW8FKPImpl.hxx
@@ -0,0 +1,214 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_FKP_IMPL_HXX
+#define INCLUDED_WW8_FKP_IMPL_HXX
+
+#include <set>
+#include <deque>
+#include <WW8FKP.hxx>
+
+#ifndef INCLUDED_OUTPUT_WITH_DEPTH_HXX
+#include <resourcemodel/OutputWithDepth.hxx>
+#endif
+
+namespace writerfilter {
+namespace doctok
+{
+/**
+ Implementation class for formatted disk pages.
+ */
+class WW8FKPImpl : public WW8FKP
+{
+ sal_uInt32 mnPageNumber;
+ bool mbComplex;
+
+public:
+ WW8FKPImpl(WW8Stream & rStream, sal_uInt32 nPageNumber, bool bComplex)
+ : WW8FKP(rStream, nPageNumber * 512), mnPageNumber(nPageNumber),
+ mbComplex(bComplex)
+ {
+ }
+
+ virtual sal_uInt32 getPageNumber() const { return mnPageNumber; }
+
+ virtual sal_uInt32 getEntryCount() const { return getU8(511); }
+ virtual sal_uInt32 getRgb() const { return 4 * (getEntryCount() + 1); }
+ virtual Fc getFc(sal_uInt32 nIndex) const
+ { return Fc(getU32(nIndex * 4), mbComplex); }
+ virtual Fc getFirstFc() const { return getFc(0); }
+ virtual Fc getLastFc() const { return getFc(getEntryCount()); }
+
+ virtual bool contains(const Fc & rFc) const
+ { return getFirstFc() <= rFc && rFc < getLastFc(); }
+
+ virtual sal_uInt32 getIndex(const Fc & rFc) const;
+
+ friend bool operator < (const WW8FKPImpl & rA,
+ const WW8FKPImpl & rB);
+};
+
+/**
+ Implementation class for formatted disk pages containing character
+ properties.
+ */
+class WW8CHPFKPImpl : public WW8FKPImpl
+{
+public:
+ WW8CHPFKPImpl(WW8Stream & rStream, sal_uInt32 nPageNumber,
+ bool bComplex)
+ : WW8FKPImpl(rStream, nPageNumber, bComplex)
+ {
+ }
+
+ virtual writerfilter::Reference<Properties>::Pointer_t
+ getProperties(const Fc & rFc) const;
+
+ virtual void dump(OutputWithDepth<string> & o) const;
+};
+
+/**
+ Implementation class for formatted disk pages containing paragraph
+ properties.
+ */
+class WW8PAPFKPImpl : public WW8FKPImpl
+{
+public:
+ WW8PAPFKPImpl(WW8Stream & rStream, sal_uInt32 nPageNumber,
+ bool bComplex)
+ : WW8FKPImpl(rStream, nPageNumber, bComplex)
+ {
+ }
+
+ virtual writerfilter::Reference<Properties>::Pointer_t
+ getProperties(const Fc & rFc) const;
+
+ virtual void dump(OutputWithDepth<string> & o) const;
+};
+
+/**
+ Tuple of page number and formattet disk page.
+ */
+class PageNumberAndFKP
+{
+ /// page number
+ sal_uInt32 mnPageNumber;
+
+ /// pointer to formatted disk page
+ WW8FKP::Pointer_t mpFKP;
+
+public:
+ PageNumberAndFKP(sal_uInt32 nPageNumber, WW8FKP::Pointer_t pFKP)
+ : mnPageNumber(nPageNumber), mpFKP(pFKP)
+ {
+ }
+
+ /**
+ Return page number.
+ */
+ sal_uInt32 getPageNumber() const { return mnPageNumber; }
+
+ /**
+ Return formatted disk page.
+ */
+ const WW8FKP::Pointer_t getFKP() const { return mpFKP; }
+
+ friend bool operator < (const PageNumberAndFKP & rA,
+ const PageNumberAndFKP & rB);
+};
+
+/**
+ Cache for formatted disk pages.
+ */
+class WW8FKPCacheImpl : public WW8FKPCache
+{
+ /// size of the cache
+ sal_uInt32 mnCacheSize;
+
+ /// set of tuples of page number and FKP
+ typedef set<PageNumberAndFKP> PageNumbersAndFKPs;
+
+ ///
+ typedef deque<sal_uInt32> PageNumbers;
+
+ PageNumbers mPageNumbers;
+ PageNumbersAndFKPs mPageNumbersAndFKPs;
+
+protected:
+ WW8Stream::Pointer_t mpStream;
+ virtual WW8FKP::Pointer_t createFKP(sal_uInt32 nPageNumber,
+ bool bComplex) = 0;
+
+public:
+ WW8FKPCacheImpl(WW8Stream::Pointer_t rpStream, sal_uInt32 nCacheSize)
+ : mnCacheSize(nCacheSize), mpStream(rpStream)
+ {
+ }
+
+ virtual ~WW8FKPCacheImpl()
+ {
+ }
+
+ WW8FKP::Pointer_t get(sal_uInt32 nPageNumber, bool bComplex);
+};
+
+class WW8CHPFKPCacheImpl : public WW8FKPCacheImpl
+{
+ virtual WW8FKP::Pointer_t createFKP(sal_uInt32 nPageNumber,
+ bool bComplex);
+
+public:
+ WW8CHPFKPCacheImpl(WW8Stream::Pointer_t rpStream,
+ sal_uInt32 nCacheSize)
+ : WW8FKPCacheImpl(rpStream, nCacheSize)
+ {
+ }
+
+ virtual ~WW8CHPFKPCacheImpl()
+ {
+ }
+};
+
+class WW8PAPFKPCacheImpl : public WW8FKPCacheImpl
+{
+ virtual WW8FKP::Pointer_t createFKP(sal_uInt32 nPageNumber,
+ bool bComplex);
+
+public:
+ WW8PAPFKPCacheImpl(WW8Stream::Pointer_t rpStream,
+ sal_uInt32 nCacheSize)
+ : WW8FKPCacheImpl(rpStream, nCacheSize)
+ {
+ }
+
+ virtual ~WW8PAPFKPCacheImpl()
+ {
+ }
+};
+}}
+
+#endif // INCLUDED_WW8_FKP_IMPL_HXX
diff --git a/writerfilter/source/doctok/WW8FontTable.cxx b/writerfilter/source/doctok/WW8FontTable.cxx
new file mode 100644
index 000000000000..7391763f347e
--- /dev/null
+++ b/writerfilter/source/doctok/WW8FontTable.cxx
@@ -0,0 +1,113 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok {
+
+void WW8FontTable::initPayload()
+{
+ sal_uInt32 nCount = getU8(0);
+
+ sal_uInt32 nOffset = 1;
+
+ while (nCount > 0)
+ {
+ entryOffsets.push_back(nOffset);
+
+ sal_uInt32 nFFNSize = getU8(nOffset) + 1;
+
+ if (nFFNSize > 1)
+ nCount--;
+
+ nOffset += nFFNSize;
+ }
+
+ entryOffsets.push_back(nOffset);
+ mnPlcfPayloadOffset = nOffset;
+}
+
+sal_uInt32 WW8FontTable::getEntryCount()
+{
+ return entryOffsets.size() - 1;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8FontTable::getEntry(sal_uInt32 nIndex)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ sal_uInt32 nCount = entryOffsets[nIndex + 1] - entryOffsets[nIndex];
+
+ if (nCount > 1)
+ {
+ WW8Font * pFont = new WW8Font(this,
+ entryOffsets[nIndex], nCount);
+
+ pFont->setIndex(nIndex);
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pFont);
+ }
+
+ return pResult;
+}
+
+sal_uInt32 WW8Font::get_f()
+{
+ return mnIndex;
+}
+
+rtl::OUString WW8Font::get_xszFfn()
+{
+ sal_uInt32 nOffset = 0x28;
+ sal_uInt32 nCount = get_cbFfnM1() - nOffset;
+
+ Sequence aSeq(mSequence, nOffset, nCount);
+
+ rtl_uString * pNew = 0;
+ rtl_uString_newFromStr
+ (&pNew, reinterpret_cast<const sal_Unicode *>(&aSeq[0]));
+
+ return rtl::OUString(pNew);
+}
+
+rtl::OUString WW8Font::get_altName()
+{
+ sal_uInt32 nOffset = 0x28 + get_ixchSzAlt();
+ sal_uInt32 nCount = get_cbFfnM1() - nOffset;
+
+ Sequence aSeq(mSequence, nOffset, nCount);
+
+ rtl_uString * pNew = 0;
+ rtl_uString_newFromStr
+ (&pNew, reinterpret_cast<const sal_Unicode *>(&aSeq[0]));
+
+ return rtl::OUString(pNew);
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8LFOTable.cxx b/writerfilter/source/doctok/WW8LFOTable.cxx
new file mode 100644
index 000000000000..1197ef7f190d
--- /dev/null
+++ b/writerfilter/source/doctok/WW8LFOTable.cxx
@@ -0,0 +1,128 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "resources.hxx"
+
+namespace writerfilter {
+namespace doctok {
+
+void WW8LFOTable::initPayload()
+{
+ sal_uInt32 nCount = getEntryCount();
+
+ sal_uInt32 nOffset = 4;
+ sal_uInt32 nOffsetLFOData = mnPlcfPayloadOffset;
+
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ WW8LFO aLFO(this, nOffset);
+
+ entryOffsets.push_back(nOffset);
+ nOffset += WW8LFO::getSize();
+
+ payloadOffsets.push_back(nOffsetLFOData);
+ payloadIndices.push_back(n);
+
+ nOffsetLFOData += 4;
+
+ sal_uInt32 nLvls = aLFO.get_clfolvl();
+
+ for (sal_uInt32 k = 0; k < nLvls; ++k)
+ {
+ WW8LFOLevel aLevel(this, nOffsetLFOData);
+ nOffsetLFOData += aLevel.calcSize();
+ }
+ }
+
+ entryOffsets.push_back(nOffset);
+ payloadOffsets.push_back(nOffsetLFOData);
+}
+
+sal_uInt32 WW8LFOTable::getEntryCount()
+{
+ return getU32(0);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8LFOTable::getEntry(sal_uInt32 nIndex)
+{
+ WW8LFO * pLFO = new WW8LFO(this, entryOffsets[nIndex]);
+
+ pLFO->setIndex(nIndex);
+
+ return writerfilter::Reference<Properties>::Pointer_t(pLFO);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8LFO::get_LFOData()
+{
+ WW8LFOTable * pLFOTable = dynamic_cast<WW8LFOTable *>(mpParent);
+ sal_uInt32 nPayloadOffset = pLFOTable->getPayloadOffset(mnIndex);
+ sal_uInt32 nPayloadSize = pLFOTable->getPayloadSize(mnIndex);
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8LFOData(mpParent, nPayloadOffset, nPayloadSize));
+}
+
+/*
+writerfilter::Reference<Properties>::Pointer_t
+WW8LFO::get_lfolevel(sal_uInt32 nIndex)
+{
+ WW8LFOTable * pLFOTable = dynamic_cast<WW8LFOTable *>(mpParent);
+ sal_uInt32 nPayloadIndex = pLFOTable->getPayloadIndex(mnIndex) + nIndex;
+ sal_uInt32 nPayloadOffset = pLFOTable->getPayloadOffset(nPayloadIndex);
+ sal_uInt32 nPayloadSize = pLFOTable->getPayloadSize(nPayloadIndex);
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8LFOLevel(mpParent, nPayloadOffset, nPayloadSize));
+}
+*/
+
+void WW8LFOLevel::resolveNoAuto(Properties & /*rHandler*/)
+{
+
+}
+
+sal_uInt32 WW8LFOLevel::calcSize()
+{
+ sal_uInt32 nResult = WW8LFOLevel::getSize();
+
+ if (get_fFormatting())
+ {
+ WW8ListLevel aLevel(mpParent, mnOffsetInParent + nResult);
+
+ nResult += aLevel.calcSize();
+
+ sal_uInt32 nXstSize = mpParent->getU16(mnOffsetInParent + nResult);
+
+ nResult += (nXstSize + 1) * 2;
+ }
+
+ return nResult;
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8ListTable.cxx b/writerfilter/source/doctok/WW8ListTable.cxx
new file mode 100644
index 000000000000..15ef3039d8da
--- /dev/null
+++ b/writerfilter/source/doctok/WW8ListTable.cxx
@@ -0,0 +1,150 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+#include <WW8ResourceModelImpl.hxx>
+
+namespace writerfilter {
+namespace doctok {
+
+void WW8ListTable::initPayload()
+{
+ sal_uInt32 nCount = getEntryCount();
+
+ sal_uInt32 nOffset = 2;
+ sal_uInt32 nOffsetLevel = mnPlcfPayloadOffset;
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ WW8List aList(this, nOffset);
+
+ entryOffsets.push_back(nOffset);
+ payloadIndices.push_back(payloadOffsets.size());
+ nOffset += WW8List::getSize();
+
+ sal_uInt32 nLvlCount = aList.get_fSimpleList() ? 1 : 9;
+
+ for (sal_uInt32 i = 0; i < nLvlCount; ++i)
+ {
+ WW8ListLevel aLevel(this, nOffsetLevel);
+
+ payloadOffsets.push_back(nOffsetLevel);
+
+ nOffsetLevel += aLevel.calcSize();
+ }
+
+ if (nOffsetLevel > getCount())
+ {
+ nOffsetLevel = getCount();
+
+ break;
+ }
+ }
+
+ payloadOffsets.push_back(nOffsetLevel);
+ entryOffsets.push_back(nOffset);
+}
+
+sal_uInt32 WW8ListTable::getEntryCount()
+{
+ return getU16(0);
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8ListTable::getEntry(sal_uInt32 nIndex)
+{
+ WW8List * pList = new WW8List(this, entryOffsets[nIndex]);
+
+ pList->setIndex(nIndex);
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (pList);
+}
+
+sal_uInt32 WW8List::get_listlevel_count()
+{
+ if (get_fSimpleList())
+ return 1;
+
+ return 9;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8List::get_listlevel(sal_uInt32 nIndex)
+{
+ WW8ListTable * pListTable = dynamic_cast<WW8ListTable *>(mpParent);
+ sal_uInt32 nPayloadIndex = pListTable->getPayloadIndex(mnIndex) + nIndex;
+ sal_uInt32 nPayloadOffset = pListTable->getPayloadOffset(nPayloadIndex);
+ sal_uInt32 nPayloadSize = pListTable->getPayloadSize(nPayloadIndex);
+
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8ListLevel(mpParent, nPayloadOffset, nPayloadSize));
+}
+
+::rtl::OUString WW8ListLevel::get_xst()
+{
+ sal_uInt32 nOffset = WW8ListLevel::getSize();
+
+ nOffset += get_cbGrpprlPapx();
+ nOffset += get_cbGrpprlChpx();
+
+ return getString(nOffset);
+}
+
+void WW8ListLevel::resolveNoAuto(Properties & rHandler)
+{
+ sal_uInt32 nOffset = getSize();
+
+ {
+ WW8PropertySet::Pointer_t pSet
+ (new WW8PropertySetImpl(*this, nOffset, get_cbGrpprlPapx()));
+
+ WW8PropertiesReference aRef(pSet);
+ aRef.resolve(rHandler);
+ }
+
+ nOffset += get_cbGrpprlPapx();
+
+ {
+ WW8PropertySet::Pointer_t pSet
+ (new WW8PropertySetImpl(*this, nOffset, get_cbGrpprlChpx()));
+
+ WW8PropertiesReference aRef(pSet);
+ aRef.resolve(rHandler);
+ }
+}
+
+sal_uInt32 WW8ListLevel::calcSize()
+{
+ sal_uInt32 nResult = WW8ListLevel::getSize();
+
+ nResult += get_cbGrpprlPapx();
+ nResult += get_cbGrpprlChpx();
+ nResult += 2 + getU16(nResult) * 2;
+
+ return nResult;
+}
+}}
diff --git a/writerfilter/source/doctok/WW8OutputWithDepth.cxx b/writerfilter/source/doctok/WW8OutputWithDepth.cxx
new file mode 100644
index 000000000000..c795ec11bb56
--- /dev/null
+++ b/writerfilter/source/doctok/WW8OutputWithDepth.cxx
@@ -0,0 +1,49 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <iostream>
+#include "WW8OutputWithDepth.hxx"
+
+namespace writerfilter {
+namespace doctok
+{
+
+using namespace ::std;
+
+WW8OutputWithDepth::WW8OutputWithDepth()
+: OutputWithDepth<string>("<tablegroup>", "</tablegroup>")
+{
+}
+
+void WW8OutputWithDepth::output(const string & str) const
+{
+ cout << str << endl;
+}
+
+WW8OutputWithDepth output;
+
+}}
diff --git a/writerfilter/source/doctok/WW8OutputWithDepth.hxx b/writerfilter/source/doctok/WW8OutputWithDepth.hxx
new file mode 100644
index 000000000000..2165abab4a65
--- /dev/null
+++ b/writerfilter/source/doctok/WW8OutputWithDepth.hxx
@@ -0,0 +1,53 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_OUTPUT_WITH_DEPTH
+#define INCLUDED_WW8_OUTPUT_WITH_DEPTH
+
+#include <resourcemodel/OutputWithDepth.hxx>
+
+#include <string>
+
+using namespace ::std;
+
+namespace writerfilter {
+namespace doctok
+{
+class WW8OutputWithDepth : public OutputWithDepth<string>
+{
+protected:
+ void output(const string & output) const;
+public:
+ WW8OutputWithDepth();
+ virtual ~WW8OutputWithDepth() { finalize(); }
+};
+
+extern WW8OutputWithDepth output;
+
+}}
+
+#endif // INCLUDED_WW8_OUTPUT_WITH_DEPTH
diff --git a/writerfilter/source/doctok/WW8Picture.cxx b/writerfilter/source/doctok/WW8Picture.cxx
new file mode 100644
index 000000000000..3e2f6d1ced25
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Picture.cxx
@@ -0,0 +1,208 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+#include <WW8DocumentImpl.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+void WW8PICF::resolveNoAuto(Properties & rHandler)
+{
+ WW8Stream::Pointer_t pStream = getDocument()->getDataStream();
+
+ {
+ writerfilter::Reference<Properties>::Pointer_t pContent;
+ if (getDocument()->isPicData())
+ {
+ WW8Value::Pointer_t pValue = createValue(get_ffdata());
+ rHandler.attribute(NS_rtf::LN_ffdata, *pValue);
+ }
+ else
+ {
+ WW8Value::Pointer_t pValue = createValue(get_DffRecord());
+ rHandler.attribute(NS_rtf::LN_DffRecord, *pValue);
+ }
+ }
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8PICF::get_DffRecord()
+{
+ writerfilter::Reference<Properties>::Pointer_t
+ pRet(new DffBlock(this, get_cbHeader(), getCount() - get_cbHeader(),
+ 0));
+ return pRet;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8PICF::get_ffdata()
+{
+ writerfilter::Reference<Properties>::Pointer_t
+ pRet(new WW8FFDATA(this, get_cbHeader(), getCount() - get_cbHeader()));
+
+ WW8StructBase::Pointer_t pStruct
+ (new WW8StructBase(this, get_cbHeader(),
+ getCount() - get_cbHeader()));
+
+ pStruct->dump(output);
+
+ return pRet;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8FSPA::get_shape()
+{
+ return getDocument()->getShape(get_spid());
+}
+
+void WW8FFDATA::resolveNoAuto(Properties & rHandler)
+{
+ WW8DocumentImpl * pDocument = getDocument();
+
+ if (pDocument != NULL)
+ {
+ WW8FLD::Pointer_t pFLD = pDocument->getCurrentFLD();
+ WW8Value::Pointer_t pValue = createValue(pFLD->get_flt());
+
+ rHandler.attribute(NS_rtf::LN_FLT, *pValue);
+
+ }
+}
+
+sal_uInt32 WW8FFDATA::get_FLT()
+{
+ sal_uInt32 nResult = 0;
+
+ WW8DocumentImpl * pDocument = getDocument();
+
+ if (pDocument != NULL)
+ {
+ WW8FLD::Pointer_t pFLD = pDocument->getCurrentFLD();
+
+ if (pFLD.get() != NULL)
+ nResult = pFLD->get_flt();
+ }
+
+ return nResult;
+}
+
+static sal_uInt32 lcl_FFDATA_default_offset(WW8FFDATA & rRef)
+{
+ return 0xa + (rRef.getU16(0xa) + 2) * 2;
+}
+
+static sal_uInt32 lcl_FFDATA_formatting_offset(WW8FFDATA & rRef)
+{
+ sal_uInt32 nResult = lcl_FFDATA_default_offset(rRef);
+
+ switch (rRef.get_FLT())
+ {
+ case 71: // forms checkbox
+ case 83: // forms listbox
+ nResult += 2;
+ break;
+ default:
+ nResult += (rRef.getU16(nResult) + 2) * 2;
+ break;
+ }
+
+ return nResult;;
+}
+
+static sal_uInt32 lcl_FFDATA_help_offset(WW8FFDATA & rRef)
+{
+ sal_uInt32 nResult = lcl_FFDATA_formatting_offset(rRef);
+
+ nResult += (rRef.getU16(nResult) + 2) * 2;
+
+ return nResult;;
+}
+
+static sal_uInt32 lcl_FFDATA_tooltip_offset(WW8FFDATA & rRef)
+{
+ sal_uInt32 nResult = lcl_FFDATA_help_offset(rRef);
+
+ nResult += (rRef.getU16(nResult) + 2) * 2;
+
+ return nResult;;
+}
+
+rtl::OUString WW8FFDATA::get_default()
+{
+ rtl::OUString sResult;
+
+ sal_uInt32 nOffset = lcl_FFDATA_default_offset(*this);
+ switch (get_FLT())
+ {
+ case 70:
+ sResult = getString(nOffset);
+
+ break;
+ default:
+ break;
+ }
+
+ return sResult;
+}
+
+rtl::OUString WW8FFDATA::get_formatting()
+{
+ return getString(lcl_FFDATA_formatting_offset(*this));
+}
+
+rtl::OUString WW8FFDATA::get_help()
+{
+ return getString(lcl_FFDATA_help_offset(*this));
+}
+
+rtl::OUString WW8FFDATA::get_tooltip()
+{
+ rtl::OUString sResult;
+
+ sResult = getString(lcl_FFDATA_tooltip_offset(*this));
+
+ return sResult;
+}
+
+sal_uInt16 WW8FFDATA::get_checked()
+{
+ sal_uInt16 nResult = 0;
+
+ switch (get_FLT())
+ {
+ case 71:
+ nResult = getU16(lcl_FFDATA_default_offset(*this));
+ break;
+ default:
+ break;
+ }
+
+ return nResult;
+}
+}}
diff --git a/writerfilter/source/doctok/WW8PieceTable.hxx b/writerfilter/source/doctok/WW8PieceTable.hxx
new file mode 100644
index 000000000000..9e09dd448f88
--- /dev/null
+++ b/writerfilter/source/doctok/WW8PieceTable.hxx
@@ -0,0 +1,175 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_PIECE_TABLE_HXX
+#define INCLUDED_WW8_PIECE_TABLE_HXX
+
+#include <sal/types.h>
+#include <doctok/WW8Document.hxx>
+
+#include <boost/shared_ptr.hpp>
+#include <iostream>
+
+namespace writerfilter {
+namespace doctok {
+
+using namespace ::std;
+
+struct Cp;
+struct Fc;
+class CpAndFc;
+
+/**
+ The piece table of a Word document.
+
+ The piece table associates character positions (CP) and File
+ character positions (FC). In a FC based view the piece table
+ defines intervals of FCs that contain consecutive text.
+
+ CPs and FCs can be complex, i.e. the associated text is stored in
+ bytes. Otherwise the text encoding is UTF-16.
+ */
+class WW8PieceTable
+{
+public:
+ virtual ~WW8PieceTable() {}
+ /**
+ Shared pointer to piece table
+ */
+ typedef boost::shared_ptr<WW8PieceTable> Pointer_t;
+
+ /**
+ Convert CP to FC.
+
+ @param aCpIn CP to convert
+
+ @return FC associated with CP
+ */
+ virtual Fc cp2fc(const Cp & aCpIn) const = 0;
+
+ /**
+ Convert FC to CP.
+
+ @param aFcIn FC to convert
+
+ @return CP associated with FC
+ */
+ virtual Cp fc2cp(const Fc & aFcIn) const = 0;
+
+ /**
+ Check if CP is complex.
+
+ @param aCp CP to check
+ @retval true CP is complex
+ @retval false else
+ */
+ virtual bool isComplex(const Cp & aCp) const = 0;
+
+ /**
+ Check if FC is complex.
+
+ @param aFc FC to check
+ @retval true FC is complex
+ @retval false else
+ */
+ virtual bool isComplex(const Fc & aFc) const = 0;
+
+ /**
+ Return number of entries.
+ */
+ virtual sal_uInt32 getCount() const = 0;
+
+ /**
+ Return first CP.
+ */
+ virtual Cp getFirstCp() const = 0;
+
+ /**
+ Return first FC.
+ */
+ virtual Fc getFirstFc() const = 0;
+
+ /**
+ Return last CP.
+ */
+ virtual Cp getLastCp() const = 0;
+
+ /**
+ Return last FC.
+ */
+ virtual Fc getLastFc() const = 0;
+
+ /**
+ Return CP at index.
+
+ @param nIndex index of CP to return
+ */
+ virtual Cp getCp(sal_uInt32 nIndex) const = 0;
+
+ /**
+ Return FC at index.
+
+ @param nIndex index of FC to return
+ */
+ virtual Fc getFc(sal_uInt32 nIndex) const = 0;
+
+ /**
+ Create CpAndFc from Cp.
+
+ @param rCp the Cp
+
+ @return CpAndFc containing rCp and corresponding Fc
+ */
+ virtual CpAndFc createCpAndFc(const Cp & rCp, PropertyType eType) const = 0;
+
+ /**
+ Create CpAndFc from Fc.
+
+ @param rFc the Fc
+
+ @return CpAndFc containing rFc and corresponding Cp
+ */
+ virtual CpAndFc createCpAndFc(const Fc & rFc, PropertyType eType) const = 0;
+
+ /**
+ Dump piece table.
+
+ @param o stream to dump to
+ */
+ virtual void dump(ostream & o) const = 0;
+};
+
+/**
+ Dump piece table.
+
+ @param o stream to dump to
+ @param rPieceTable piece table to dump
+*/
+ostream & operator << (ostream & o, const WW8PieceTable & rPieceTable);
+}}
+
+#endif // INCLUDED_WW8_PIECE_TABLE_HXX
diff --git a/writerfilter/source/doctok/WW8PieceTableImpl.cxx b/writerfilter/source/doctok/WW8PieceTableImpl.cxx
new file mode 100644
index 000000000000..869964aac67e
--- /dev/null
+++ b/writerfilter/source/doctok/WW8PieceTableImpl.cxx
@@ -0,0 +1,299 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <algorithm>
+#include <iterator>
+
+#ifndef INCLUDED_DOCTOK_EXCEPTIONS
+#include <resourcemodel/exceptions.hxx>
+#endif
+#include <WW8PieceTableImpl.hxx>
+#include <WW8Clx.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+ostream & operator << (ostream & o, const WW8PieceTable & rPieceTable)
+{
+ rPieceTable.dump(o);
+
+ return o;
+}
+
+WW8PieceTableImpl::WW8PieceTableImpl(WW8Stream & rStream,
+ sal_uInt32 nOffset,
+ sal_uInt32 nCount)
+{
+ WW8Clx aClx(rStream, nOffset, nCount);
+
+ sal_uInt32 nPieceCount = aClx.getPieceCount();
+
+ if (nPieceCount > 0)
+ {
+ for (sal_uInt32 n = 0; n < nPieceCount; n++)
+ {
+ Cp aCp(aClx.getCp(n));
+ Fc aFc(aClx.getFc(n), aClx.isComplexFc(n));
+
+ CpAndFc aCpAndFc(aCp, aFc, PROP_DOC);
+
+ mEntries.push_back(aCpAndFc);
+ }
+
+ CpAndFc aBack = mEntries.back();
+ Cp aCp(aClx.getCp(aClx.getPieceCount()));
+ Fc aFc(aBack.getFc() + (aCp - aBack.getCp()));
+
+ CpAndFc aCpAndFc(aCp, aFc, PROP_DOC);
+
+ mEntries.push_back(aCpAndFc);
+ }
+}
+
+sal_uInt32 WW8PieceTableImpl::getCount() const
+{
+ return mEntries.size();
+}
+
+WW8PieceTableImpl::tEntries::const_iterator
+WW8PieceTableImpl::findCp(const Cp & rCp) const
+{
+ tEntries::const_iterator aResult = mEntries.end();
+ tEntries::const_iterator aEnd = mEntries.end();
+
+ for (tEntries::const_iterator aIt = mEntries.begin(); aIt != aEnd;
+ aIt++)
+ {
+ if (aIt->getCp() <= rCp)
+ {
+ aResult = aIt;
+
+ //break;
+ }
+ }
+
+ return aResult;
+}
+
+WW8PieceTableImpl::tEntries::const_iterator
+WW8PieceTableImpl::findFc(const Fc & rFc) const
+{
+ tEntries::const_iterator aResult = mEntries.end();
+ tEntries::const_iterator aEnd = mEntries.end();
+
+ if (mEntries.size() > 0)
+ {
+ if (rFc < mEntries.begin()->getFc())
+ aResult = mEntries.begin();
+ else
+ {
+ for (tEntries::const_iterator aIt = mEntries.begin();
+ aIt != aEnd; aIt++)
+ {
+ if (aIt->getFc() <= rFc)
+ {
+ tEntries::const_iterator aItNext = aIt;
+ aItNext++;
+
+ if (aItNext != aEnd)
+ {
+ sal_uInt32 nOffset = rFc.get() - aIt->getFc().get();
+ sal_uInt32 nLength = aItNext->getCp() - aIt->getCp();
+
+ if (! aIt->isComplex())
+ nLength *= 2;
+
+ if (nOffset < nLength)
+ {
+ aResult = aIt;
+
+ break;
+ }
+ }
+
+ }
+ }
+ }
+ }
+
+ return aResult;
+}
+
+Cp WW8PieceTableImpl::getFirstCp() const
+{
+ Cp aResult;
+
+ if (getCount() > 0)
+ aResult = getCp(0);
+ else
+ throw ExceptionNotFound("WW8PieceTableImpl::getFirstCp");
+
+ return aResult;
+}
+
+Fc WW8PieceTableImpl::getFirstFc() const
+{
+ Fc aResult;
+
+ if (getCount() > 0)
+ aResult = getFc(0);
+ else
+ throw ExceptionNotFound(" WW8PieceTableImpl::getFirstFc");
+
+ return aResult;
+}
+
+Cp WW8PieceTableImpl::getLastCp() const
+{
+ Cp aResult;
+
+ if (getCount() > 0)
+ aResult = getCp(getCount() - 1);
+ else
+ throw ExceptionNotFound("WW8PieceTableImpl::getLastCp");
+
+ return aResult;
+}
+
+Fc WW8PieceTableImpl::getLastFc() const
+{
+ Fc aResult;
+
+ if (getCount() > 0)
+ aResult = getFc(getCount() - 1);
+ else
+ throw ExceptionNotFound("WW8PieceTableImpl::getLastFc");
+
+ return aResult;
+}
+
+Cp WW8PieceTableImpl::getCp(sal_uInt32 nIndex) const
+{
+ return mEntries[nIndex].getCp();
+}
+
+Fc WW8PieceTableImpl::getFc(sal_uInt32 nIndex) const
+{
+ return mEntries[nIndex].getFc();
+}
+
+Cp WW8PieceTableImpl::fc2cp(const Fc & rFc) const
+{
+ Cp cpResult;
+
+ if (mEntries.size() > 0)
+ {
+ Fc aFc;
+
+ if (rFc < mEntries.begin()->getFc())
+ aFc = mEntries.begin()->getFc();
+ else
+ aFc = rFc;
+
+ tEntries::const_iterator aIt = findFc(aFc);
+
+ if (aIt != mEntries.end())
+ {
+ cpResult = aIt->getCp() + (aFc - aIt->getFc());
+ }
+ else
+ throw ExceptionNotFound("WW8PieceTableImpl::fc2cp: " + aFc.toString());
+ }
+
+ return cpResult;
+}
+
+Fc WW8PieceTableImpl::cp2fc(const Cp & rCp) const
+{
+ Fc aResult;
+
+ Cp2FcHashMap_t::iterator aItCp = mCp2FcCache.find(rCp);
+
+ if (aItCp == mCp2FcCache.end())
+ {
+ tEntries::const_iterator aIt = findCp(rCp);
+
+ if (aIt != mEntries.end())
+ {
+ aResult = aIt->getFc() + (rCp - aIt->getCp());
+ mCp2FcCache[rCp] = aResult;
+ }
+ else
+ throw ExceptionNotFound
+ ("WW8PieceTableImpl::cp2fc: " + rCp.toString());
+ }
+ else
+ aResult = mCp2FcCache[rCp];
+
+ return aResult;
+}
+
+bool WW8PieceTableImpl::isComplex(const Cp & rCp) const
+{
+ bool bResult = false;
+
+ tEntries::const_iterator aIt = findCp(rCp);
+
+ if (aIt != mEntries.end())
+ bResult = aIt->isComplex();
+
+ return bResult;
+}
+
+bool WW8PieceTableImpl::isComplex(const Fc & rFc) const
+{
+ bool bResult = false;
+
+ tEntries::const_iterator aIt = findFc(rFc);
+
+ if (aIt != mEntries.end())
+ bResult = aIt->isComplex();
+
+ return bResult;
+}
+
+CpAndFc WW8PieceTableImpl::createCpAndFc
+(const Cp & rCp, PropertyType eType) const
+{
+ return CpAndFc(rCp, cp2fc(rCp), eType);
+}
+
+CpAndFc WW8PieceTableImpl::createCpAndFc
+(const Fc & rFc, PropertyType eType) const
+{
+ return CpAndFc(fc2cp(rFc), rFc, eType);
+}
+
+void WW8PieceTableImpl::dump(ostream & o) const
+{
+ o << "<piecetable>" << endl;
+ copy(mEntries.begin(), mEntries.end(), ostream_iterator<CpAndFc>(o, "\n"));
+ o << "</piecetable>" << endl;
+}
+}}
diff --git a/writerfilter/source/doctok/WW8PieceTableImpl.hxx b/writerfilter/source/doctok/WW8PieceTableImpl.hxx
new file mode 100644
index 000000000000..3d7a5e9ede79
--- /dev/null
+++ b/writerfilter/source/doctok/WW8PieceTableImpl.hxx
@@ -0,0 +1,75 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_PIECE_TABLE_IMPL_HXX
+#define INCLUDED_WW8_PIECE_TABLE_IMPL_HXX
+
+#include <vector>
+#include <WW8CpAndFc.hxx>
+#ifndef INCLUDE_WW8_PIECE_TABLE_HXX
+#include <WW8PieceTable.hxx>
+#endif
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+class WW8PieceTableImpl : public WW8PieceTable
+{
+ typedef std::vector<CpAndFc> tEntries;
+ tEntries mEntries;
+
+ tEntries::const_iterator findCp(const Cp & rCp) const;
+ tEntries::const_iterator findFc(const Fc & rFc) const;
+
+ mutable Cp2FcHashMap_t mCp2FcCache;
+
+public:
+ WW8PieceTableImpl(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 nCount);
+
+ virtual Fc cp2fc(const Cp & aCpIn) const;
+ virtual Cp fc2cp(const Fc & aFcIn) const;
+ virtual bool isComplex(const Cp & aCp) const;
+ virtual bool isComplex(const Fc & aFc) const;
+
+ virtual sal_uInt32 getCount() const;
+ virtual Cp getFirstCp() const;
+ virtual Fc getFirstFc() const;
+ virtual Cp getLastCp() const;
+ virtual Fc getLastFc() const;
+ virtual Cp getCp(sal_uInt32 nIndex) const;
+ virtual Fc getFc(sal_uInt32 nIndex) const;
+ virtual CpAndFc createCpAndFc(const Cp & rCp, PropertyType eType) const;
+ virtual CpAndFc createCpAndFc(const Fc & rFc, PropertyType eType) const;
+
+ virtual void dump(ostream & o) const;
+};
+}}
+
+#endif // INCLUDED_WW8_PIECE_TABLE_IMPL_HXX
diff --git a/writerfilter/source/doctok/WW8PropertySetImpl.cxx b/writerfilter/source/doctok/WW8PropertySetImpl.cxx
new file mode 100644
index 000000000000..7b0cf28282c7
--- /dev/null
+++ b/writerfilter/source/doctok/WW8PropertySetImpl.cxx
@@ -0,0 +1,432 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "WW8DocumentImpl.hxx"
+#include "WW8ResourceModelImpl.hxx"
+#include <doctok/resourceids.hxx>
+#include <resourcemodel/QNameToString.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+
+bool operator != (const WW8PropertySetIterator & rA,
+ const WW8PropertySetIterator & rB)
+{
+ return ! (rA.equal(rB));
+}
+
+WW8Property::~WW8Property()
+{
+}
+
+WW8PropertySet::~WW8PropertySet()
+{
+}
+
+WW8PropertySetIterator::~WW8PropertySetIterator()
+{
+}
+
+WW8PropertyImpl::WW8PropertyImpl(WW8Stream & rStream,
+ sal_uInt32 nOffset, sal_uInt32 nCount)
+: WW8StructBase(rStream, nOffset, nCount)
+{
+}
+
+WW8PropertyImpl::WW8PropertyImpl(const WW8StructBase & rBase,
+ sal_uInt32 nOffset,
+ sal_uInt32 nCount)
+: WW8StructBase(rBase, nOffset, nCount)
+{
+}
+
+WW8PropertyImpl::WW8PropertyImpl(WW8StructBase * pBase,
+ sal_uInt32 nOffset,
+ sal_uInt32 nCount)
+: WW8StructBase(pBase, nOffset, nCount)
+{
+}
+
+WW8PropertyImpl::~WW8PropertyImpl()
+{
+}
+
+sal_uInt32 WW8PropertyImpl::getParam() const
+{
+ sal_uInt32 nResult = 0;
+
+ switch (get_spra())
+ {
+ case 0:
+ case 1:
+ nResult = getU8(2);
+
+ break;
+
+ case 2:
+ case 4:
+ case 5:
+ nResult = getU16(2);
+
+ break;
+
+ case 3:
+ nResult = getU32(2);
+
+ break;
+
+ case 7:
+ nResult = getU16(2) + (getU8(4) << 16);
+
+ break;
+
+ default:
+ break;
+ }
+
+ return nResult;
+}
+
+WW8Stream::Sequence WW8PropertyImpl::getParams() const
+{
+ return WW8Stream::Sequence(mSequence, 2, getCount() - 2);
+}
+
+sal_uInt32 WW8PropertyImpl::getByteLength() const
+{
+ sal_uInt32 nParamSize = 0;
+
+ switch (get_spra())
+ {
+ case 0:
+ case 1:
+ nParamSize = 1;
+
+ break;
+
+ case 2:
+ case 4:
+ case 5:
+ nParamSize = 2;
+
+ break;
+
+ case 3:
+ nParamSize = 4;
+
+ break;
+
+ case 7:
+ nParamSize = 3;
+
+ break;
+ default:
+ switch (getId())
+ {
+ case 0xd608:
+ nParamSize = getU16(2) + 1;
+ break;
+ default:
+ nParamSize = getU8(2) + 1;
+ break;
+ }
+
+ break;
+ }
+
+ return nParamSize + 2;
+}
+
+sal_uInt32 WW8PropertyImpl::getParamOffset() const
+{
+ sal_uInt32 nReturn = 0;
+
+ if (get_spra() == 6)
+ nReturn = 1;
+
+ switch (getId())
+ {
+ case 0xd608:
+ case 0xd609:
+ nReturn = 3;
+
+ break;
+
+ default:
+ break;
+ }
+
+ return nReturn;
+}
+
+void WW8PropertyImpl::dump(OutputWithDepth<string> & o) const
+{
+ o.addItem(toString());
+}
+
+string WW8PropertyImpl::toString() const
+{
+ string aResult;
+
+ aResult += "<sprmcommon";
+
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), " id=\"%" SAL_PRIuUINT32 "\"", getId());
+ aResult += sBuffer;
+ aResult += " name=\"";
+ aResult += (*SprmIdToString::Instance())(getId());
+ aResult += "\"";
+ snprintf(sBuffer, sizeof(sBuffer), " sgc=\"%x\"", get_sgc());
+ aResult += sBuffer;
+ snprintf(sBuffer, sizeof(sBuffer), " spra=\"%x\"", get_spra());
+ aResult += sBuffer;
+ snprintf(sBuffer, sizeof(sBuffer), " size=\"%" SAL_PRIxUINT32 "\"", getByteLength());
+ aResult += sBuffer;
+ snprintf(sBuffer, sizeof(sBuffer), " param=\"%" SAL_PRIxUINT32 "\"", getParam());
+ aResult += sBuffer;
+ aResult += ">\n";
+
+ aResult += mSequence.toString();
+
+ aResult += "</sprmcommon>";
+
+ return aResult;
+}
+
+WW8PropertySetImpl::WW8PropertySetImpl(WW8Stream & rStream,
+ sal_uInt32 nOffset,
+ sal_uInt32 nCount,
+ bool bPap)
+: WW8StructBase(rStream, nOffset, nCount), mbPap(bPap)
+{
+}
+
+WW8PropertySetImpl::WW8PropertySetImpl(const WW8StructBase & rBase,
+ sal_uInt32 nOffset,
+ sal_uInt32 nCount,
+ bool bPap)
+: WW8StructBase(rBase, nOffset, nCount), mbPap(bPap)
+{
+}
+
+WW8PropertySetImpl::~WW8PropertySetImpl()
+{
+}
+
+bool WW8PropertySetImpl::isPap() const
+{
+ return mbPap;
+}
+
+sal_uInt32 WW8PropertySetImpl::get_istd() const
+{
+ sal_uInt32 nResult = 0;
+
+ if (mbPap)
+ nResult = getU16(0);
+
+ return nResult;
+}
+
+WW8PropertySetIterator::Pointer_t WW8PropertySetImpl::begin()
+{
+ return WW8PropertySetIterator::Pointer_t
+ (new WW8PropertySetIteratorImpl(this, mbPap ? 2 : 0));
+}
+
+WW8PropertySetIterator::Pointer_t WW8PropertySetImpl::end()
+{
+ return WW8PropertySetIterator::Pointer_t
+ (new WW8PropertySetIteratorImpl(this, getCount()));
+}
+
+WW8PropertySetIteratorImpl::~WW8PropertySetIteratorImpl()
+{
+}
+
+WW8Property::Pointer_t
+WW8PropertySetImpl::getAttribute(sal_uInt32 nOffset) const
+{
+ WW8PropertyImpl aTmpAttr(*this, nOffset, 3);
+
+ sal_uInt32 nLength = aTmpAttr.getByteLength();
+
+ if (nOffset + nLength > getCount())
+ nLength = getCount() - nOffset;
+
+ return WW8Property::Pointer_t
+ (new WW8PropertyImpl(*this, nOffset, nLength));
+}
+
+void WW8PropertySetImpl::dump(OutputWithDepth<string> & o) const
+{
+ WW8StructBase::dump(o);
+
+ WW8PropertySetIterator::Pointer_t pIt =
+ const_cast<WW8PropertySetImpl *>(this)->begin();
+ WW8PropertySetIterator::Pointer_t pItEnd =
+ const_cast<WW8PropertySetImpl *>(this)->end();
+
+ while((*pIt) != (*pItEnd))
+ {
+ WW8Property::Pointer_t pAttr = pIt->get();
+
+ pAttr->dump(o);
+ ++(*pIt);
+ }
+}
+
+void WW8PropertySetImpl::dots(ostream & o)
+{
+ WW8PropertySetIterator::Pointer_t pIt = begin();
+ WW8PropertySetIterator::Pointer_t pItEnd = end();
+
+ while((*pIt) != (*pItEnd))
+ {
+ WW8Property::Pointer_t pAttr = pIt->get();
+
+ o << "." << endl;
+
+ ++(*pIt);
+ }
+}
+
+string WW8PropertySetImpl::getType() const
+{
+ return "WW8PropertySetImpl";
+}
+
+void WW8PropertySetImpl::resolveLocal(Sprm & sprm, Properties & rHandler)
+{
+ switch (sprm.getId())
+ {
+ case 0x6a03:
+ {
+ Value::Pointer_t pValue = sprm.getValue();
+ getDocument()->setPicLocation(pValue->getInt());
+ getDocument()->setPicIsData(false);
+ }
+ break;
+ case 0x806:
+ {
+ getDocument()->setPicIsData(true);
+ }
+ break;
+ case 0x6646:
+ {
+ WW8Stream::Pointer_t pStream = getDocument()->getDataStream();
+
+ if (pStream.get() != NULL)
+ {
+ Value::Pointer_t pValue = sprm.getValue();
+ sal_uInt32 nOffset = pValue->getInt();
+ WW8StructBase aStruct(*pStream, nOffset, 2);
+ sal_uInt16 nCount = aStruct.getU16(0);
+
+ {
+ WW8PropertySetImpl * pPropSet =
+ new WW8PropertySetImpl(*pStream, nOffset + 2, nCount);
+
+ pPropSet->resolve(rHandler);
+ }
+ }
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void WW8PropertySetImpl::resolve(Properties & rHandler)
+{
+ if (getCount() >= (isPap() ? 5U : 3U))
+ {
+ WW8PropertySetIterator::Pointer_t pIt = begin();
+ WW8PropertySetIterator::Pointer_t pItEnd = end();
+
+ if (isPap())
+ {
+ WW8Value::Pointer_t pValue = createValue(getU16(0));
+ rHandler.attribute(NS_rtf::LN_ISTD, *pValue);
+ }
+
+ while((*pIt) != (*pItEnd))
+ {
+ WW8Sprm aSprm(pIt->get());
+
+ rHandler.sprm(aSprm);
+
+ resolveLocal(aSprm, rHandler);
+
+ ++(*pIt);
+ }
+ }
+}
+
+WW8PropertySetIterator & WW8PropertySetIteratorImpl::operator++ ()
+{
+ WW8Property::Pointer_t pTmpAttr = mpAttrSet->getAttribute(mnOffset);
+
+ mnOffset += dynamic_cast<WW8PropertyImpl *>(pTmpAttr.get())->
+ getByteLength();
+
+ if (mnOffset > mpAttrSet->getCount() ||
+ mpAttrSet->getCount() - mnOffset < 3)
+ mnOffset = mpAttrSet->getCount();
+
+ return *this;
+}
+
+WW8Property::Pointer_t WW8PropertySetIteratorImpl::get() const
+{
+ return mpAttrSet->getAttribute(mnOffset);
+}
+
+bool WW8PropertySetIteratorImpl::equal
+(const WW8PropertySetIterator & rIt) const
+{
+ const WW8PropertySetIteratorImpl & rMyIt =
+ dynamic_cast<const WW8PropertySetIteratorImpl &>(rIt);
+
+ return mpAttrSet == rMyIt.mpAttrSet && mnOffset == rMyIt.mnOffset;
+}
+
+string WW8PropertySetIteratorImpl::toString() const
+{
+ string sResult = "";
+
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "(%" SAL_PRIuUINT32 ")", mnOffset);
+ sResult += sBuffer;
+
+ return sResult;
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8PropertySetImpl.hxx b/writerfilter/source/doctok/WW8PropertySetImpl.hxx
new file mode 100644
index 000000000000..2f7bb0f34708
--- /dev/null
+++ b/writerfilter/source/doctok/WW8PropertySetImpl.hxx
@@ -0,0 +1,145 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_PROPERTY_SET_IMPL_HXX
+#define INCLUDED_WW8_PROEPRTY_SET_IMPL_HXX
+
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <doctok/WW8Document.hxx>
+#include <WW8StructBase.hxx>
+#include <WW8OutputWithDepth.hxx>
+
+#include <map>
+
+namespace writerfilter {
+namespace doctok
+{
+
+class WW8PropertyImpl : public WW8Property, public WW8StructBase
+{
+ sal_uInt8 get_ispmd() const
+ { return sal::static_int_cast<sal_uInt8>(getId() & 0xff); }
+ bool get_fSpec() const { return (getId() & 0x100) != 0; }
+ sal_uInt8 get_sgc() const
+ { return sal::static_int_cast<sal_uInt8>((getId() >> 10) & 0x7); }
+ sal_uInt8 get_spra() const
+ { return sal::static_int_cast<sal_uInt8>((getId() >> 13) & 0x7); }
+
+public:
+ WW8PropertyImpl(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount);
+ WW8PropertyImpl(const WW8StructBase & rBase, sal_uInt32 nOffset,
+ sal_uInt32 nCount);
+
+ WW8PropertyImpl(WW8StructBase * pBase, sal_uInt32 nOffset,
+ sal_uInt32 nCount);
+
+ virtual ~WW8PropertyImpl();
+
+ sal_uInt32 getId() const { return getU16(0); }
+ sal_uInt32 getParam() const;
+ WW8Stream::Sequence getParams() const;
+
+ sal_uInt32 getByteLength() const;
+ sal_uInt32 getParamOffset() const;
+
+ virtual void dump(OutputWithDepth<string> & o) const;
+ string toString() const;
+};
+
+class WW8PropertySetImpl : public WW8PropertySet, public WW8StructBase,
+ public ::writerfilter::Reference<Properties>
+{
+ bool mbPap;
+
+public:
+ typedef boost::shared_ptr<WW8PropertySet> Pointer_t;
+
+ WW8PropertySetImpl(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 nCount, bool bPap = false);
+
+ WW8PropertySetImpl(const WW8StructBase & rBase, sal_uInt32 nOffset,
+ sal_uInt32 nCount, bool bPap = false);
+
+ virtual ~WW8PropertySetImpl();
+
+ virtual WW8PropertySetIterator::Pointer_t begin();
+ virtual WW8PropertySetIterator::Pointer_t end();
+
+ virtual void dump(OutputWithDepth<string> & o) const;
+ virtual void dots(ostream & o);
+
+ virtual string getType() const;
+
+ virtual WW8Property::Pointer_t getAttribute(sal_uInt32 nOffset) const;
+
+ virtual bool isPap() const;
+ virtual sal_uInt32 get_istd() const;
+
+ virtual void insert(const WW8PropertySet::Pointer_t /*pSet*/) {}
+
+ virtual void resolve(Properties & rHandler);
+
+ /**
+ Get and distribute information from sprm that is used
+ internally by the document.
+
+ @param rSprm sprm to process
+ @param rHandler property handler to resolve huge papx (sprm 0x6646) to
+ */
+ virtual void resolveLocal(Sprm & rSprm, Properties & rHandler);
+};
+
+class WW8PropertySetIteratorImpl : public WW8PropertySetIterator
+{
+ WW8PropertySetImpl * mpAttrSet;
+ sal_uInt32 mnOffset;
+
+public:
+ WW8PropertySetIteratorImpl(WW8PropertySetImpl * pAttrSet,
+ sal_uInt32 nOffset)
+ : mpAttrSet(pAttrSet), mnOffset(nOffset)
+ {
+ }
+
+ virtual ~WW8PropertySetIteratorImpl();
+
+ virtual WW8PropertySetIterator & operator++();
+
+ virtual WW8Property::Pointer_t get() const;
+
+ virtual bool equal(const WW8PropertySetIterator & rIt) const;
+
+ virtual string toString() const;
+};
+
+::writerfilter::Reference<Properties>::Pointer_t createSprmProps
+(WW8PropertyImpl & rProp);
+::writerfilter::Reference<BinaryObj>::Pointer_t createSprmBinary
+(WW8PropertyImpl & rProp);
+}}
+
+#endif // INCLUDED_WW8_PROPERTY_SET_IMPL_HXX
diff --git a/writerfilter/source/doctok/WW8ResourceModelImpl.cxx b/writerfilter/source/doctok/WW8ResourceModelImpl.cxx
new file mode 100644
index 000000000000..da72435d5efb
--- /dev/null
+++ b/writerfilter/source/doctok/WW8ResourceModelImpl.cxx
@@ -0,0 +1,500 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <WW8ResourceModelImpl.hxx>
+#include <resources.hxx>
+#include <WW8OutputWithDepth.hxx>
+#include <resourcemodel/TableManager.hxx>
+#include <rtl/string.hxx>
+#include <resourcemodel/QNameToString.hxx>
+
+namespace writerfilter {
+
+namespace doctok
+{
+using namespace ::std;
+
+
+// ------- WW8TableDataHandler ---------
+
+typedef WW8PropertySet::Pointer_t TablePropsPointer_t;
+
+class WW8TableDataHandler : public TableDataHandler<string,
+ TablePropsPointer_t>
+{
+public:
+ typedef boost::shared_ptr<WW8TableDataHandler> Pointer_t;
+ virtual void startTable(unsigned int nRows, unsigned int nDepth,
+ TablePropsPointer_t pProps);
+ virtual void endTable();
+ virtual void startRow(unsigned int nCols,
+ TablePropsPointer_t pProps);
+ virtual void endRow();
+ virtual void startCell(const string & start, TablePropsPointer_t pProps);
+ virtual void endCell(const string & end);
+};
+
+void WW8TableDataHandler::startTable(unsigned int nRows, unsigned int nDepth,
+ TablePropsPointer_t /*pProps*/)
+{
+ char sBuffer[256];
+
+ string tmpStr = "<tabledata.table rows=\"";
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nRows);
+ tmpStr += sBuffer;
+ tmpStr += "\" depth=\"";
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nDepth);
+ tmpStr += sBuffer;
+ tmpStr += "\">";
+
+ output.addItem(tmpStr);
+}
+
+void WW8TableDataHandler::endTable()
+{
+ output.addItem("</tabledata.table>");
+}
+
+void WW8TableDataHandler::startRow
+(unsigned int nCols, TablePropsPointer_t /*pProps*/)
+{
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nCols);
+ string tmpStr = "<tabledata.row cells=\"";
+ tmpStr += sBuffer;
+ tmpStr += "\">";
+ output.addItem(tmpStr);
+}
+
+void WW8TableDataHandler::endRow()
+{
+ output.addItem("</tabledata.row>");
+}
+
+void WW8TableDataHandler::startCell(const string & start,
+ TablePropsPointer_t /*pProps*/)
+{
+ output.addItem("<tabledata.cell>");
+ output.addItem(start);
+ output.addItem(", ");
+}
+
+void WW8TableDataHandler::endCell(const string & end)
+{
+ output.addItem(end);
+ output.addItem("</tabledata.cell>");
+}
+
+// ----- WW8TableDataManager -------------------------------
+
+class WW8TableManager :
+ public TableManager<string, TablePropsPointer_t>
+{
+ typedef TableDataHandler<string, TablePropsPointer_t>
+ TableDataHandlerPointer_t;
+
+public:
+ WW8TableManager();
+ virtual ~WW8TableManager() {}
+ virtual void endParagraphGroup();
+ virtual bool sprm(Sprm & rSprm);
+};
+
+WW8TableManager::WW8TableManager()
+{
+ TableDataHandler<string, TablePropsPointer_t>::Pointer_t pHandler(new WW8TableDataHandler());
+ setHandler(pHandler);
+}
+
+bool WW8TableManager::sprm(Sprm & rSprm)
+{
+ TableManager<string, TablePropsPointer_t>::sprm(rSprm);
+ output.setDepth(getTableDepthNew());
+ return true;
+}
+
+void WW8TableManager::endParagraphGroup()
+{
+ string tmpStr = "<tabledepth depth=\"";
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "%" SAL_PRIdINT32, getTableDepthNew());
+ tmpStr += sBuffer;
+ tmpStr += "\"/>";
+ output.addItem(tmpStr);
+ TableManager<string, TablePropsPointer_t>::endParagraphGroup();
+}
+
+WW8TableManager gTableManager;
+
+
+//-------- WW8TableReference -----------------------------------
+
+void WW8TableReference::resolve(Table & /*rHandler*/)
+{
+ output.addItem("<table/>");
+}
+
+string WW8TableReference::getType() const
+{
+ return "WW8TableReference";
+}
+
+void WW8PropertiesReference::resolve(Properties & rHandler)
+{
+ if (mpPropSet != NULL)
+ {
+ //mpPropSet->dump(clog);
+
+ if (mpPropSet->isPap())
+ {
+ WW8IntValue aValue(mpPropSet->get_istd());
+
+ rHandler.attribute(NS_rtf::LN_ISTD, aValue);
+ }
+
+ WW8PropertySetIterator::Pointer_t pIt = mpPropSet->begin();
+ WW8PropertySetIterator::Pointer_t pItEnd = mpPropSet->end();
+
+ try
+ {
+ while (! pIt->equal(*pItEnd))
+ {
+ WW8Sprm aSprm(pIt->get());
+ rHandler.sprm(aSprm);
+
+ ++(*pIt);
+ }
+ }
+ catch (ExceptionOutOfBounds e)
+ {
+ }
+ }
+}
+
+string WW8PropertiesReference::getType() const
+{
+ return "WW8PropertiesReference";
+}
+
+WW8BinaryObjReference::WW8BinaryObjReference
+(WW8StructBase & rParent, sal_uInt32 nOffset, sal_uInt32 nCount)
+: WW8StructBase(rParent, nOffset, nCount)
+{
+}
+
+WW8BinaryObjReference::WW8BinaryObjReference
+(WW8StructBase * pParent, sal_uInt32 nOffset, sal_uInt32 nCount)
+: WW8StructBase(pParent, nOffset, nCount)
+{
+}
+
+WW8BinaryObjReference::WW8BinaryObjReference
+(WW8StructBase * pParent)
+: WW8StructBase(pParent, 0x0, pParent->getCount())
+{
+}
+
+WW8BinaryObjReference::WW8BinaryObjReference
+(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount)
+: WW8StructBase(rStream, nOffset, nCount)
+{
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t
+WW8BinaryObjReference::getBinary()
+{
+ return writerfilter::Reference<BinaryObj>::Pointer_t
+ (new WW8BinaryObjReference(*this));
+}
+
+void WW8BinaryObjReference::resolve(BinaryObj & rHandler)
+{
+ writerfilter::Reference<Properties>::Pointer_t pRef =
+ writerfilter::Reference<Properties>::Pointer_t();
+
+ if (getCount() > 0)
+ rHandler.data(get(0), getCount(), pRef);
+}
+
+string WW8BinaryObjReference::getType() const
+{
+ return "WW8BinaryObjReference";
+}
+
+sal_uInt32 WW8Sprm::getId() const
+{
+ sal_uInt32 nResult = 0;
+
+ if (mpProperty.get() != NULL)
+ nResult = mpProperty->getId();
+ else if (mpBinary.get() != NULL)
+ nResult = NS_rtf::LN_blob;
+
+ return nResult;
+}
+
+string WW8Sprm::toString() const
+{
+ string sResult = "";
+
+ if (mpProperty.get() != NULL)
+ sResult = mpProperty->toString();
+
+ return sResult;
+}
+
+Value::Pointer_t WW8Sprm::getValue()
+{
+ Value::Pointer_t pResult;
+
+ if (mpProperty.get() != NULL)
+ pResult = Value::Pointer_t(createValue(mpProperty->getParam()));
+
+ return pResult;
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t WW8Sprm::getBinary()
+{
+ writerfilter::Reference<BinaryObj>::Pointer_t pResult;
+
+ if (mpBinary.get() != NULL)
+ pResult = writerfilter::Reference<BinaryObj>::Pointer_t
+ (mpBinary->clone());
+ else if (mpProperty.get() != NULL)
+ pResult = createSprmBinary
+ (dynamic_cast<WW8PropertyImpl &>(*(mpProperty.get())));
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t WW8Sprm::getStream()
+{
+ return writerfilter::Reference<Stream>::Pointer_t();
+}
+
+writerfilter::Reference<Properties>::Pointer_t WW8Sprm::getProps()
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ if (mpProperty.get() != NULL)
+ {
+ pResult = createSprmProps
+ (dynamic_cast<WW8PropertyImpl &>(*(mpProperty.get())));
+ }
+
+ return pResult;
+}
+
+Sprm::Kind WW8Sprm::getKind()
+{
+ return SprmKind(getId());
+}
+
+string WW8Sprm::getName() const
+{
+ return (*SprmIdToString::Instance())(getId());
+}
+
+int WW8Value::getInt() const
+{
+ return 0;
+}
+
+uno::Any WW8Value::getAny() const
+{
+ return uno::Any();
+}
+
+::rtl::OUString WW8Value::getString() const
+{
+ return ::rtl::OUString();
+}
+
+string WW8Value::toString() const
+{
+ return string();
+}
+
+writerfilter::Reference<Properties>::Pointer_t WW8Value::getProperties()
+{
+ return writerfilter::Reference<Properties>::Pointer_t();
+}
+
+writerfilter::Reference<Stream>::Pointer_t WW8Value::getStream()
+{
+ return writerfilter::Reference<Stream>::Pointer_t();
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t WW8Value::getBinary()
+{
+ return writerfilter::Reference<BinaryObj>::Pointer_t();
+}
+
+int WW8IntValue::getInt() const
+{
+ return mValue;
+}
+
+::rtl::OUString WW8IntValue::getString() const
+{
+ return ::rtl::OUString::valueOf(static_cast<sal_Int32>(mValue));
+}
+
+uno::Any WW8IntValue::getAny() const
+{
+ uno::Any aResult;
+
+ aResult <<= static_cast<sal_uInt32>(mValue);
+
+ return aResult;
+}
+
+string WW8IntValue::toString() const
+{
+ char sBuffer[255];
+
+ snprintf(sBuffer, sizeof(sBuffer), "%x", mValue);
+
+ return string(sBuffer);
+}
+
+WW8Value::Pointer_t createValue(int value)
+{
+ return WW8Value::Pointer_t(new WW8IntValue(value));
+}
+
+WW8Value::Pointer_t createValue(WW8Value::Pointer_t value)
+{
+ return value;
+}
+
+int WW8StringValue::getInt() const
+{
+ return 0;
+}
+
+::rtl::OUString WW8StringValue::getString() const
+{
+ return mString;
+}
+
+uno::Any WW8StringValue::getAny() const
+{
+ uno::Any aResult;
+
+ aResult <<= mString;
+
+ return aResult;
+}
+
+string WW8StringValue::toString() const
+{
+ string result;
+
+ sal_uInt32 nCount = mString.getLength();
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ if (mString[n] <= 0xff && isprint(mString[n]))
+ {
+ sal_Unicode nC = mString[n];
+
+ if (nC < 256)
+ result += sal::static_int_cast<char>(nC);
+ else
+ result += ".";
+ }
+ else
+ {
+ char sBuffer[64];
+
+ snprintf(sBuffer, sizeof(sBuffer), "\\u%04x", mString[n]);
+ result += sBuffer;
+ }
+ }
+
+ return result;
+}
+
+WW8Value::Pointer_t createValue(const rtl::OUString & rStr)
+{
+ return WW8Value::Pointer_t(new WW8StringValue(rStr));
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8PropertiesValue::getProperties()
+{
+ return mRef;
+}
+
+string WW8PropertiesValue::toString() const
+{
+ return "properties";
+}
+
+writerfilter::Reference<Stream>::Pointer_t WW8StreamValue::getStream()
+{
+ return mRef;
+}
+
+string WW8StreamValue::toString() const
+{
+ return "stream";
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t WW8BinaryObjValue::getBinary()
+{
+ return mRef;
+}
+
+string WW8BinaryObjValue::toString() const
+{
+ return "binaryObj";
+}
+
+WW8Value::Pointer_t createValue
+(writerfilter::Reference<Properties>::Pointer_t rRef)
+{
+ return WW8Value::Pointer_t(new WW8PropertiesValue(rRef));
+}
+
+WW8Value::Pointer_t createValue(writerfilter::Reference<Stream>::Pointer_t rRef)
+{
+ return WW8Value::Pointer_t(new WW8StreamValue(rRef));
+}
+
+WW8Value::Pointer_t createValue
+(writerfilter::Reference<BinaryObj>::Pointer_t rRef)
+{
+ return WW8Value::Pointer_t(new WW8BinaryObjValue(rRef));
+}
+
+
+}
+
+}
+
diff --git a/writerfilter/source/doctok/WW8ResourceModelImpl.hxx b/writerfilter/source/doctok/WW8ResourceModelImpl.hxx
new file mode 100644
index 000000000000..d7eba5ba67a2
--- /dev/null
+++ b/writerfilter/source/doctok/WW8ResourceModelImpl.hxx
@@ -0,0 +1,318 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_IMPL_HXX
+#define INCLUDED_WW8_RESOURCE_MODEL_IMPL_HXX
+
+#include <doctok/WW8Document.hxx>
+
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_HXX
+#include <resourcemodel/WW8ResourceModel.hxx>
+#endif
+#include <WW8StructBase.hxx>
+
+#ifndef INCLUDED_OUTPUT_WITH_DEPTH_HXX
+#include <resourcemodel/OutputWithDepth.hxx>
+#endif
+
+#include <map>
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::std;
+
+class WW8PropertiesReference : public writerfilter::Reference<Properties>
+{
+ WW8PropertySet::Pointer_t mpPropSet;
+
+public:
+
+ WW8PropertiesReference(WW8PropertySet::Pointer_t pPropSet)
+ : mpPropSet(pPropSet)
+ {
+ }
+
+ ~WW8PropertiesReference()
+ {
+ }
+
+ virtual void resolve(Properties & rHandler);
+
+ virtual string getType() const;
+};
+
+class WW8TableReference : public writerfilter::Reference<Table>
+{
+public:
+ WW8TableReference()
+ {
+ }
+
+ ~WW8TableReference()
+ {
+ }
+
+ virtual void resolve(Table & rHandler);
+
+ virtual string getType() const;
+};
+
+class WW8BinaryObjReference : public writerfilter::Reference<BinaryObj>,
+ public WW8StructBase
+{
+public:
+ typedef boost::shared_ptr<WW8BinaryObjReference> Pointer_t;
+ WW8BinaryObjReference(WW8Stream & rStream, sal_uInt32 nOffset,
+ sal_uInt32 nCount);
+ WW8BinaryObjReference(WW8StructBase & rParent, sal_uInt32 nOffset,
+ sal_uInt32 nCount);
+ WW8BinaryObjReference(WW8StructBase * pParent, sal_uInt32 nOffset,
+ sal_uInt32 nCount);
+ WW8BinaryObjReference(WW8StructBase * pParent);
+
+ WW8BinaryObjReference()
+ : WW8StructBase(WW8StructBase::Sequence())
+ {
+ }
+
+ ~WW8BinaryObjReference()
+ {
+ }
+
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+
+ virtual void resolve(BinaryObj & rHandler);
+
+ virtual string getType() const;
+
+ virtual WW8BinaryObjReference * clone() { return new WW8BinaryObjReference(*this); }
+};
+
+class WW8Sprm : public Sprm
+{
+ WW8Property::Pointer_t mpProperty;
+ WW8BinaryObjReference::Pointer_t mpBinary;
+
+public:
+ WW8Sprm(WW8Property::Pointer_t pProperty)
+ : mpProperty(pProperty)
+ {
+ }
+
+ WW8Sprm(WW8BinaryObjReference::Pointer_t pBinary)
+ : mpBinary(pBinary)
+ {
+ }
+
+ WW8Sprm()
+ {
+ }
+
+ WW8Sprm(const WW8Sprm & rSprm)
+ : Sprm(rSprm), mpProperty(rSprm.mpProperty), mpBinary(rSprm.mpBinary)
+ {
+ }
+
+ virtual ~WW8Sprm()
+ {
+ }
+
+ virtual Value::Pointer_t getValue();
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream();
+ virtual writerfilter::Reference<Properties>::Pointer_t getProps();
+ virtual Kind getKind();
+
+ virtual sal_uInt32 getId() const;
+ virtual string toString() const;
+ virtual string getName() const;
+
+ virtual WW8Sprm * clone() const { return new WW8Sprm(*this); }
+};
+
+class WW8Value : public Value
+{
+public:
+ WW8Value() {}
+ virtual ~WW8Value() {}
+
+ virtual string toString() const;
+ virtual int getInt() const;
+ virtual ::rtl::OUString getString() const;
+ virtual uno::Any getAny() const;
+ virtual writerfilter::Reference<Properties>::Pointer_t getProperties();
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream();
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+ virtual WW8Value * clone() const = 0;
+};
+
+class WW8IntValue : public WW8Value
+{
+ int mValue;
+public:
+ WW8IntValue(int value) : mValue(value) {}
+ virtual ~WW8IntValue() {}
+
+ virtual int getInt() const;
+ virtual ::rtl::OUString getString() const;
+ virtual uno::Any getAny() const;
+
+ virtual string toString() const;
+
+ virtual WW8Value * clone() const { return new WW8IntValue(*this); }
+};
+
+/**
+ Creates value from an integer.
+
+ @param value integer to create value from.
+*/
+WW8Value::Pointer_t createValue(int value);
+
+ostream & operator << (ostream & o, const WW8Value & rValue);
+
+class WW8StringValue : public WW8Value
+{
+ ::rtl::OUString mString;
+
+public:
+ WW8StringValue(::rtl::OUString string_) : mString(string_) {}
+ virtual ~WW8StringValue() {}
+
+ virtual int getInt() const;
+ virtual ::rtl::OUString getString() const;
+ virtual uno::Any getAny() const;
+
+ virtual string toString() const;
+
+ virtual WW8Value * clone() const { return new WW8StringValue(*this); }
+};
+
+/**
+ Creates value from a string.
+
+ @param rStr string to create value from.
+*/
+WW8Value::Pointer_t createValue(const rtl::OUString & rStr);
+
+class WW8PropertiesValue : public WW8Value
+{
+ mutable writerfilter::Reference<Properties>::Pointer_t mRef;
+
+public:
+ WW8PropertiesValue(writerfilter::Reference<Properties>::Pointer_t rRef)
+ : mRef(rRef)
+ {
+ }
+
+ virtual ~WW8PropertiesValue()
+ {
+ }
+
+ virtual writerfilter::Reference<Properties>::Pointer_t getProperties();
+
+ virtual string toString() const;
+
+ virtual WW8Value * clone() const { return new WW8PropertiesValue(mRef); }
+};
+
+class WW8StreamValue : public WW8Value
+{
+ mutable writerfilter::Reference<Stream>::Pointer_t mRef;
+
+public:
+ WW8StreamValue(writerfilter::Reference<Stream>::Pointer_t rRef)
+ : mRef(rRef)
+ {
+ }
+
+ virtual ~WW8StreamValue()
+ {
+ }
+
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream();
+
+ virtual string toString() const;
+
+ virtual WW8Value * clone() const { return new WW8StreamValue(mRef); }
+};
+
+/**
+ Creates value from a properties reference.
+
+ @param rRef reference to create value from.
+*/
+WW8Value::Pointer_t createValue(writerfilter::Reference<Properties>::Pointer_t rRef);
+
+/**
+ Creates value from another value.
+
+ @param value the value to copy
+*/
+WW8Value::Pointer_t createValue(WW8Value::Pointer_t value);
+
+/**
+ Creates value from a stream reference.
+
+ @param rRef reference to the stream
+ */
+WW8Value::Pointer_t createValue(writerfilter::Reference<Stream>::Pointer_t rRef);
+
+class WW8BinaryObjValue : public WW8Value
+{
+ mutable writerfilter::Reference<BinaryObj>::Pointer_t mRef;
+
+public:
+ WW8BinaryObjValue(writerfilter::Reference<BinaryObj>::Pointer_t rRef)
+ : mRef(rRef)
+ {
+ }
+
+ virtual ~WW8BinaryObjValue()
+ {
+ }
+
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+
+ virtual string toString() const;
+
+ virtual WW8Value * clone() const { return new WW8BinaryObjValue(mRef); }
+};
+
+/**
+ Creates value from a binary object reference.
+
+ @param rRef reference to the stream
+ */
+WW8Value::Pointer_t createValue(writerfilter::Reference<BinaryObj>::Pointer_t rRef);
+
+Sprm::Kind SprmKind(sal_uInt32 sprmCode);
+
+}}
+
+#endif // INCLUDED_WW8_RESOURCE_MODEL_IMPL_HXX
diff --git a/writerfilter/source/doctok/WW8StreamImpl.cxx b/writerfilter/source/doctok/WW8StreamImpl.cxx
new file mode 100644
index 000000000000..585673bfa887
--- /dev/null
+++ b/writerfilter/source/doctok/WW8StreamImpl.cxx
@@ -0,0 +1,207 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <WW8StreamImpl.hxx>
+
+#include <com/sun/star/uno/Reference.h>
+#include <com/sun/star/io/XSeekable.hpp>
+#include <com/sun/star/io/XStream.hpp>
+#include <com/sun/star/lang/XMultiComponentFactory.hpp>
+
+#include <doctokLoggers.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::com::sun::star;
+
+#ifdef DEBUG
+TagLogger::Pointer_t debug_logger(TagLogger::getInstance("DEBUG"));
+#endif
+
+WW8Stream::~WW8Stream()
+{
+}
+
+WW8StreamImpl::WW8StreamImpl(uno::Reference<uno::XComponentContext> rContext,
+ uno::Reference<io::XInputStream> rStream)
+: mrComponentContext(rContext), mrStream(rStream)
+{
+ xFactory = uno::Reference<lang::XMultiComponentFactory>
+ (mrComponentContext->getServiceManager());
+
+ uno::Sequence<uno::Any> aArgs( 1 );
+ aArgs[0] <<= mrStream;
+
+ xOLESimpleStorage = uno::Reference<container::XNameContainer>
+ (xFactory->createInstanceWithArgumentsAndContext
+ (::rtl::OUString::createFromAscii
+ ("com.sun.star.embed.OLESimpleStorage"),
+ aArgs, mrComponentContext ),
+ uno::UNO_QUERY );
+
+}
+
+WW8StreamImpl::~WW8StreamImpl()
+{
+}
+
+WW8Stream::Sequence WW8StreamImpl::get(sal_uInt32 nOffset,
+ sal_uInt32 nCount) const
+{
+ uno::Sequence<sal_Int8> aSequence;
+
+ if (nCount > 0)
+ {
+ uno::Reference< io::XSeekable > xSeek( mrStream, uno::UNO_QUERY_THROW );
+
+ xSeek->seek(nOffset);
+
+ sal_Int32 nRead = mrStream->readBytes(aSequence, nCount);
+
+ Sequence aReturnSequence(const_cast<const sal_uInt8 *>
+ (reinterpret_cast<sal_uInt8 *>
+ (&(aSequence[0]))), nRead);
+
+ return aReturnSequence;
+ }
+
+ return WW8Stream::Sequence();
+}
+
+WW8Stream::Pointer_t WW8StreamImpl::getSubStream(const ::rtl::OUString & sId)
+{
+ WW8Stream::Pointer_t pResult;
+
+ try
+ {
+ if (xOLESimpleStorage.is())
+ {
+ if (xOLESimpleStorage->hasByName(sId))
+ {
+ uno::Reference<io::XStream> xNewStream;
+ {
+ uno::Any aValue = xOLESimpleStorage->getByName(sId);
+ aValue >>= xNewStream;
+ }
+
+ if (xNewStream.is())
+ {
+ WW8Stream::Pointer_t
+ pNew(new WW8StreamImpl(mrComponentContext,
+ xNewStream->getInputStream()));
+
+ pResult = pNew;
+ }
+ }
+ }
+ }
+ catch (...)
+ {
+ }
+
+ if (pResult.get() == NULL)
+ throw ExceptionNotFound("Stream not found");
+
+ return pResult;
+}
+
+string WW8StreamImpl::getSubStreamNames() const
+{
+ string sResult;
+
+ if (xOLESimpleStorage.is())
+ {
+ uno::Sequence<rtl::OUString> aSeq = xOLESimpleStorage->getElementNames();
+
+ for (sal_uInt32 n = 0;
+ n < sal::static_int_cast<sal_uInt32>(aSeq.getLength()); ++n)
+ {
+ rtl::OUString aOUStr = aSeq[n];
+
+ if (n > 0)
+ sResult += ", ";
+
+#if 0
+ rtl::OString aOStr;
+ aOUStr.convertToString(&aOStr, RTL_TEXTENCODING_ASCII_US,
+ OUSTRING_TO_OSTRING_CVTFLAGS);
+
+
+ sResult += aOStr.getStr();
+#endif
+ char sBuffer[256];
+ for (sal_uInt32 j = 0;
+ j < sal::static_int_cast<sal_uInt32>(aOUStr.getLength()); ++j)
+ {
+ if (isprint(aOUStr[j]))
+ {
+ sal_Unicode nC = aOUStr[j];
+
+ if (nC < 255)
+ sResult += sal::static_int_cast<char>(nC);
+ else
+ sResult += ".";
+ }
+ else
+ {
+ snprintf(sBuffer, sizeof(sBuffer), "\\u%x", aOUStr[j]);
+ sResult += sBuffer;
+ }
+ }
+ }
+ }
+
+ return sResult;
+}
+
+uno::Sequence<rtl::OUString> WW8StreamImpl::getSubStreamUNames() const
+{
+ return xOLESimpleStorage->getElementNames();
+}
+
+void WW8StreamImpl::dump(OutputWithDepth<string> & o) const
+{
+ o.addItem("<stream>");
+
+ Sequence aSeq;
+ sal_uInt32 nOffset = 0;
+ sal_uInt32 nStep = 16;
+
+ do
+ {
+ aSeq = get(nOffset, nStep);
+ dumpLine(o, aSeq, nOffset, nStep);
+
+ nOffset += nStep;
+ }
+ while (aSeq.getCount() == nStep);
+
+ o.addItem("</stream>");
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8StreamImpl.hxx b/writerfilter/source/doctok/WW8StreamImpl.hxx
new file mode 100644
index 000000000000..2f1a0b0b234e
--- /dev/null
+++ b/writerfilter/source/doctok/WW8StreamImpl.hxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <doctok/WW8Document.hxx>
+#ifndef INCLUDED_OUTPUT_WITH_DEPTH_HXX
+#include <resourcemodel/OutputWithDepth.hxx>
+#endif
+
+namespace writerfilter {
+namespace doctok
+{
+using namespace ::com::sun::star;
+
+class WW8StreamImpl : public WW8Stream
+{
+ uno::Reference<uno::XComponentContext> mrComponentContext;
+ uno::Reference<io::XInputStream> mrStream;
+ uno::Reference<container::XNameContainer> xOLESimpleStorage;
+ uno::Reference<lang::XMultiComponentFactory> xFactory;
+
+public:
+ WW8StreamImpl(uno::Reference<uno::XComponentContext> rContext,
+ uno::Reference<io::XInputStream> rStream);
+ virtual ~WW8StreamImpl();
+
+ virtual WW8Stream::Pointer_t getSubStream(const ::rtl::OUString & rId);
+
+ virtual Sequence get(sal_uInt32 nOffset, sal_uInt32 nCount)
+ const;
+
+ //virtual bool put(sal_uInt32 nOffset, const Sequence & rSeq);
+
+ virtual string getSubStreamNames() const;
+ virtual uno::Sequence<rtl::OUString> getSubStreamUNames() const;
+
+ virtual void dump(OutputWithDepth<string> & o) const;
+};
+}}
diff --git a/writerfilter/source/doctok/WW8StructBase.cxx b/writerfilter/source/doctok/WW8StructBase.cxx
new file mode 100644
index 000000000000..746034f4b177
--- /dev/null
+++ b/writerfilter/source/doctok/WW8StructBase.cxx
@@ -0,0 +1,199 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <WW8StructBase.hxx>
+
+namespace writerfilter {
+namespace doctok {
+using namespace ::com::sun::star;
+
+WW8StructBase::WW8StructBase(const WW8StructBase & rParent,
+ sal_uInt32 nOffset, sal_uInt32 nCount)
+: mSequence(rParent.mSequence, nOffset, nCount), mpParent(0),
+ mpDocument(rParent.getDocument())
+{
+ if (nOffset + nCount > rParent.getCount())
+ {
+ throw ExceptionOutOfBounds("WW8StructBase");
+ }
+}
+
+WW8StructBase & WW8StructBase::Assign(const WW8StructBase & rSrc)
+{
+ mSequence = rSrc.mSequence;
+ mpDocument = rSrc.mpDocument;
+
+ return *this;
+}
+
+void WW8StructBase::setDocument(WW8DocumentImpl * pDocument)
+{
+ mpDocument = pDocument;
+}
+
+WW8DocumentImpl * WW8StructBase::getDocument() const
+{
+ return mpDocument;
+}
+
+sal_uInt8 WW8StructBase::getU8(sal_uInt32 nOffset) const
+{
+ return doctok::getU8(mSequence, nOffset);
+}
+
+sal_uInt16 WW8StructBase::getU16(sal_uInt32 nOffset) const
+{
+ return doctok::getU16(mSequence, nOffset);
+}
+
+sal_uInt32 WW8StructBase::getU32(sal_uInt32 nOffset) const
+{
+ return doctok::getU32(mSequence, nOffset);
+}
+
+sal_Bool WW8StructBase::getBit(sal_uInt32 nValue, sal_uInt16 nBit) const
+{
+ return (nValue & (1 << nBit)) != 0;
+}
+
+sal_uInt8 WW8StructBase::getNibble(sal_uInt32 nValue,
+ sal_uInt16 nShift) const
+{
+ return sal::static_int_cast<sal_uInt8>((nValue >> nShift) & 0xf);
+}
+
+sal_uInt8 getU8(const WW8StructBase::Sequence & rSeq,
+ sal_uInt32 nOffset)
+{
+ return rSeq[nOffset];
+}
+
+sal_uInt16 getU16(const WW8StructBase::Sequence & rSeq,
+ sal_uInt32 nOffset)
+{
+ return getU8(rSeq, nOffset) | (getU8(rSeq, nOffset + 1) << 8);
+}
+
+sal_uInt32 getU32(const WW8StructBase::Sequence & rSeq,
+ sal_uInt32 nOffset)
+{
+ sal_uInt32 nResult = getU8(rSeq, nOffset);
+ nResult |= (getU8(rSeq, nOffset + 1) << 8);
+ nResult |= (getU8(rSeq, nOffset + 2) << 16);
+ nResult |= (getU8(rSeq, nOffset + 3) << 24);
+
+ return nResult;
+}
+
+rtl::OUString WW8StructBase::getString(sal_uInt32 nOffset, sal_uInt32 nCount)
+ const
+{
+ rtl::OUString aResult;
+
+ if (nOffset < getCount())
+ {
+ sal_uInt32 nCount1 = nCount;
+ if (nOffset + nCount * 2 > getCount())
+ {
+ nCount1 = (getCount() - nOffset) / 2;
+ }
+
+ if (nCount1 > 0)
+ {
+ Sequence aSeq(mSequence, nOffset, nCount1 * 2);
+
+ rtl_uString * pNew = 0;
+ rtl_uString_newFromStr_WithLength
+ (&pNew, reinterpret_cast<const sal_Unicode *>(&aSeq[0]),
+ nCount1);
+
+ aResult = rtl::OUString(pNew);
+ }
+ }
+
+ return aResult;
+}
+
+WW8StructBase *
+WW8StructBase::getRemainder(sal_uInt32 nOffset) const
+{
+ WW8StructBase * pResult = NULL;
+
+ sal_uInt32 nCount = getCount();
+ if (nCount > nOffset)
+ {
+ pResult = new WW8StructBase(*this, nOffset, nCount - nOffset);
+ }
+
+ return pResult;
+}
+
+
+rtl::OUString WW8StructBase::getString(sal_uInt32 nOffset) const
+{
+ sal_uInt32 nCount = getU16(nOffset);
+
+ return getString(nOffset + 2, nCount);
+}
+
+WW8StructBaseTmpOffset::WW8StructBaseTmpOffset
+(WW8StructBase * pStructBase)
+: mnOffset(0), mpStructBase(pStructBase)
+{
+}
+
+sal_uInt32 WW8StructBaseTmpOffset::set(sal_uInt32 nOffset)
+{
+ if (nOffset >= mpStructBase->getCount())
+ throw ExceptionOutOfBounds("WW8StructBaseTmpOffset::set");
+
+ mnOffset = nOffset;
+
+ return mnOffset;
+}
+
+sal_uInt32 WW8StructBaseTmpOffset::get() const
+{
+ return mnOffset;
+}
+
+sal_uInt32 WW8StructBaseTmpOffset::inc(sal_uInt32 nOffset)
+{
+ if (mpStructBase->getCount() - mnOffset < nOffset)
+ throw ExceptionOutOfBounds("WW8StructBaseTmpOffset::inc");
+
+ mnOffset += nOffset;
+
+ return mnOffset;
+}
+
+WW8StructBaseTmpOffset::operator sal_uInt32() const
+{
+ return mnOffset;
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8StructBase.hxx b/writerfilter/source/doctok/WW8StructBase.hxx
new file mode 100644
index 000000000000..0a1f7949fabf
--- /dev/null
+++ b/writerfilter/source/doctok/WW8StructBase.hxx
@@ -0,0 +1,316 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_STRUCT_BASE_HXX
+#define INCLUDED_WW8_STRUCT_BASE_HXX
+
+#include <boost/shared_ptr.hpp>
+#include <doctok/WW8Document.hxx>
+#include <resourcemodel/OutputWithDepth.hxx>
+
+namespace writerfilter {
+namespace doctok {
+
+class WW8DocumentImpl;
+
+/**
+ Part of a stream.
+
+ A part can have a parent, meaning its sequence of data is a
+ subsequence of its parent's sequence of data.
+ */
+class WW8StructBase
+{
+public:
+ typedef SubSequence<sal_uInt8> Sequence;
+ typedef boost::shared_ptr<WW8StructBase> Pointer_t;
+
+protected:
+ /**
+ Stream this part was created from.
+ */
+ ::com::sun::star::uno::Reference<com::sun::star::io::
+ XInputStream> mrStream;
+
+ /**
+ The data.
+ */
+ mutable Sequence mSequence;
+
+ /**
+ This part's parent.
+ */
+ WW8StructBase * mpParent;
+
+ /**
+ This part's offset in parent.
+ */
+ sal_uInt32 mnOffsetInParent;
+
+ /**
+ The document of this struct.
+ */
+ WW8DocumentImpl * mpDocument;
+
+public:
+ WW8StructBase(sal_Int32 nLength)
+ : mSequence(nLength)
+ {
+ }
+
+ /**
+ Creates a part from a steam.
+
+ @param rStream the stream
+ @param nOffset offset in @a rStream to start at
+ @param nCount count of bytes in the new part
+ */
+ WW8StructBase(WW8Stream & rStream,
+ sal_Int32 nOffset, sal_Int32 nCount)
+ : mSequence(rStream.get(nOffset, nCount)), mpParent(0), mpDocument(0)
+ {
+ }
+
+ /**
+ Creates a part from a sequence.
+
+ @param rSequence the sequence
+ @param nOffset offset in @a rSequence to start at
+ @param nCount count of bytes in the new part
+ */
+ WW8StructBase(const Sequence & rSequence, sal_uInt32 nOffset = 0,
+ sal_uInt32 nCount = 0)
+ : mSequence(rSequence, nOffset, nCount), mpParent(0), mpDocument(0)
+ {
+ }
+
+ /**
+ Creates a part from a parent part.
+
+ @param pParent the parent
+ @param nOffset offset in @a pParent to start at
+ @param nCount count of bytes in the new part
+ */
+ WW8StructBase(const WW8StructBase & rParent,
+ sal_uInt32 nOffset, sal_uInt32 nCount);
+
+ /**
+ Creates a part from a parent part.
+
+ @param pParent the parent
+ @param nOffset offset in @a pParent to start at
+ @param nCount count of bytes in the new part
+ */
+ WW8StructBase(WW8StructBase * pParent,
+ sal_uInt32 nOffset, sal_uInt32 nCount)
+ : mSequence(pParent->mSequence, nOffset, nCount), mpParent(pParent),
+ mnOffsetInParent(nOffset), mpDocument(pParent->getDocument())
+ {
+ if (nOffset + nCount > pParent->mSequence.getCount())
+ throw ExceptionOutOfBounds("WW8StructBase");
+ }
+
+
+ virtual ~WW8StructBase()
+ {
+ }
+
+ /**
+ Assign a part to this part.
+
+ After assignment this part has the same content as the assigned
+ part.
+
+ @param rSrc part to assign
+
+ @return this part after assignment
+ */
+ virtual WW8StructBase & Assign(const WW8StructBase & rSrc);
+
+ /**
+ Set the document of this struct.
+ */
+ void setDocument(WW8DocumentImpl * pDocument);
+
+ /**
+ Return the document of this struct.
+ */
+ WW8DocumentImpl * getDocument() const;
+
+ /**
+ Return count of bytes in this part.
+ */
+ sal_uInt32 getCount() const { return mSequence.getCount(); }
+
+ /**
+ Return unsigned byte value at an offset.
+
+ @param offset offset to get value from
+ */
+ sal_uInt8 getU8(sal_uInt32 nOffset) const;
+
+ /**
+ Return unsigned 16-bit value at an offset.
+
+ @param offset offset to get value from
+ */
+ sal_uInt16 getU16(sal_uInt32 nOffset) const;
+
+ /**
+ Return unsigned 32-bit value at an offset.
+
+ @param offset offset to get value from
+ */
+ sal_uInt32 getU32(sal_uInt32 nOffset) const;
+
+ /**
+ Return signed 8-bit value at an offset.
+
+ @param offset offset to get value from
+ */
+ sal_Int8 getS8(sal_uInt32 nOffset) const
+ { return (sal_Int8) getU8(nOffset); }
+
+ /**
+ Return signed 16-bit value at an offset.
+
+ @param offset offset to get value from
+ */
+ sal_Int16 getS16(sal_uInt32 nOffset) const
+ {return (sal_Int16) getU16(nOffset); }
+
+ /**
+ Return signed 32-bit value at an offset.
+
+ @param offset offset to get value from
+ */
+ sal_Int32 getS32(sal_uInt32 nOffset) const
+ { return (sal_Int32) getU32(nOffset); }
+
+ /**
+ Return bit value from a 32-bit unsigned value.
+
+ @param nValue value to retreive bit from
+ @param nBit number of bit to retreive (0 = least significant)
+ */
+ sal_Bool getBit(sal_uInt32 nValue, sal_uInt16 nBit) const;
+
+ /**
+ Return nibble from a 32-bit unsigned value.
+
+ @param nValue value to retreive nibble from (most significant bit left)
+ @param nShift amount of bits to shift right before returning least significant nibble
+ */
+ sal_uInt8 getNibble(sal_uInt32 nValue, sal_uInt16 nShift) const;
+
+ /**
+ Returns byte at an index.
+
+ @param nIndex index in this part of the byte to return
+ */
+ const sal_uInt8 * get(sal_uInt32 nIndex) const
+ { return &((mSequence.getSequence())[nIndex + mSequence.getOffset()]); }
+
+ /**
+ Returns two byte character string starting at an offset.
+
+ The string has to be Pascal like, e.g. the first word contains
+ the lengthof the string in characters and is followed by the
+ string's characters.
+
+ @param nOffset offset the string starts at
+
+ @return the string
+ */
+ rtl::OUString getString(sal_uInt32 nOffset) const;
+
+ /**
+ Returns binary object for remainder of this WW8StructBase
+
+ @param nOffset offset where remainder starts
+ */
+ WW8StructBase * getRemainder(sal_uInt32 nOffset) const;
+
+ /**
+ Returns two byte character string starting at an offset with a
+ given length.
+
+ @param nOffset offset the string starts at
+ @param nLength number of characters in the string
+ */
+ rtl::OUString getString(sal_uInt32 nOffset, sal_uInt32) const;
+
+ /**
+ Dump the part.
+
+ @param o stream to dump to
+ */
+ virtual void dump(OutputWithDepth<string> & o) const { mSequence.dump(o); }
+};
+
+class WW8StructBaseTmpOffset
+{
+ sal_uInt32 mnOffset;
+ WW8StructBase * mpStructBase;
+
+public:
+ WW8StructBaseTmpOffset(WW8StructBase * pStructBase);
+
+ sal_uInt32 set(sal_uInt32 nOffset);
+ sal_uInt32 get() const;
+ sal_uInt32 inc(sal_uInt32 nOffset);
+
+ operator sal_uInt32 () const;
+};
+
+/**
+ Return unsigned byte from a sequence.
+
+ @param rSeq sequence to get value from
+ @param nOffset offset in sequence to get value from
+ */
+sal_uInt8 getU8(const WW8StructBase::Sequence & rSeq, sal_uInt32 nOffset);
+
+/**
+ Return unsigned 16-bit value from a sequence.
+
+ @param rSeq sequence to get value from
+ @param nOffset offset in sequence to get value from
+ */
+sal_uInt16 getU16(const WW8StructBase::Sequence & rSeq, sal_uInt32 nOffset);
+
+/**
+ Return unsigned 32-bit value from a sequence.
+
+ @param rSeq sequence to get value from
+ @param nOffset offset in sequence to get value from
+ */
+sal_uInt32 getU32(const WW8StructBase::Sequence & rSeq, sal_uInt32 nOffset);
+
+}}
+
+#endif // INCLUDED_WW8_STRUCT_BASE_HXX
diff --git a/writerfilter/source/doctok/WW8Sttbf.cxx b/writerfilter/source/doctok/WW8Sttbf.cxx
new file mode 100644
index 000000000000..36e2e805436d
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Sttbf.cxx
@@ -0,0 +1,168 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <WW8Sttbf.hxx>
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+
+WW8Sttbf::WW8Sttbf(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount)
+: WW8StructBase(rStream, nOffset, nCount)
+{
+ sal_uInt32 nComplexOffset = 0;
+ if (getU16(0) == 0xffff)
+ {
+ mbComplex = true;
+ nComplexOffset = 2;
+ }
+
+ mnCount = getU16(nComplexOffset);
+ mnExtraDataCount = getU16(nComplexOffset + 2);
+
+ nOffset = (mbComplex ? 2 : 0) + 4;
+
+ for (sal_uInt32 n = 0; n < mnCount; ++n)
+ {
+ mEntryOffsets.push_back(nOffset);
+
+ sal_uInt32 nStringLength = getU16(nOffset);
+
+ nOffset += 2 + nStringLength * (mbComplex ? 2 : 1);
+
+ mExtraOffsets.push_back(nOffset);
+
+ nOffset += mnExtraDataCount;
+ }
+}
+
+sal_uInt32 WW8Sttbf::getEntryOffset(sal_uInt32 nPos) const
+{
+ return mEntryOffsets[nPos];
+}
+
+sal_uInt32 WW8Sttbf::getExtraOffset(sal_uInt32 nPos) const
+{
+ return mExtraOffsets[nPos];
+}
+
+sal_uInt32 WW8Sttbf::getEntryCount() const
+{
+ return mnCount;
+}
+
+rtl::OUString WW8Sttbf::getEntry(sal_uInt32 nPos) const
+{
+ return getString(getEntryOffset(nPos));
+}
+
+WW8StructBase::Pointer_t WW8Sttbf::getExtraData(sal_uInt32 nPos)
+{
+ return WW8StructBase::Pointer_t
+ (new WW8StructBase(*this, getExtraOffset(nPos), mnExtraDataCount));
+}
+
+WW8SttbTableResource::WW8SttbTableResource(WW8Sttbf::Pointer_t pSttbf)
+: mpSttbf(pSttbf)
+{
+}
+
+WW8SttbTableResource::~WW8SttbTableResource()
+{
+}
+
+void WW8SttbTableResource::resolve(Table & rTable)
+{
+ sal_uInt32 nCount = mpSttbf->getEntryCount();
+
+ for (sal_uInt32 n = 0; n < nCount; n++)
+ {
+ WW8StringValue::Pointer_t pVal(new WW8StringValue(mpSttbf->getEntry(n)));
+ ::writerfilter::Reference<Properties>::Pointer_t pProps(new WW8StringProperty(0, pVal));
+
+ rTable.entry(n, pProps);
+ }
+}
+
+string WW8SttbTableResource::getType() const
+{
+ return "WW8SttbTableResource";
+}
+
+WW8StringProperty::WW8StringProperty(sal_uInt32 nId, WW8StringValue::Pointer_t pValue)
+: mnId(nId), mpValue(pValue)
+{
+}
+
+WW8StringProperty::~WW8StringProperty()
+{
+}
+
+void WW8StringProperty::resolve(Properties & rProperties)
+{
+ rProperties.attribute(mnId, *mpValue);
+}
+
+string WW8StringProperty::getType() const
+{
+ return "WW8StringProperty";
+}
+
+sal_uInt32 WW8SttbRgtplc::getEntryCount()
+{
+ return getU16(2);
+}
+
+::writerfilter::Reference<Properties>::Pointer_t
+WW8SttbRgtplc::getEntry(sal_uInt32 nIndex)
+{
+ ::writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ sal_uInt32 nOffset = 6;
+
+ while (nIndex > 0)
+ {
+ sal_uInt16 nCount = getU16(nOffset);
+
+ nOffset = nOffset + 2 + nCount;
+ ++nIndex;
+ }
+
+ sal_uInt16 nCount = getU16(nOffset);
+
+ if (nCount > 0)
+ {
+ WW8Tplc * pTplc = new WW8Tplc(*this, nOffset + 2, nCount);
+
+ pResult.reset(pTplc);
+ }
+
+ return pResult;
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8Sttbf.hxx b/writerfilter/source/doctok/WW8Sttbf.hxx
new file mode 100644
index 000000000000..5c82d94723a9
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Sttbf.hxx
@@ -0,0 +1,132 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_STTBF_HXX
+#define INCLUDED_WW8_STTBF_HXX
+
+#include <WW8StructBase.hxx>
+#include <WW8ResourceModelImpl.hxx>
+
+#include <boost/shared_ptr.hpp>
+#include <vector>
+
+namespace writerfilter {
+namespace doctok
+{
+
+using namespace ::std;
+
+/**
+ A string table in file.
+
+ The string table contains strings that each can have extra data.
+ */
+class WW8Sttbf : public WW8StructBase
+{
+ /// true if strings contain two-byte characters
+ bool mbComplex;
+
+ /// the number of entries
+ sal_uInt32 mnCount;
+
+ /// the size of the extra data (per string)
+ sal_uInt32 mnExtraDataCount;
+
+ /// offsets for the strings
+ vector<sal_uInt32> mEntryOffsets;
+
+ /// offsets for the extra data
+ vector<sal_uInt32> mExtraOffsets;
+
+ /**
+ Return offset of an entry.
+
+ @param nPos the index of the entry
+ */
+ sal_uInt32 getEntryOffset(sal_uInt32 nPos) const;
+
+ /**
+ Return offset of extra data of an entry.
+
+ @param nPos the index of the entry
+ */
+ sal_uInt32 getExtraOffset(sal_uInt32 nPos) const;
+
+public:
+ typedef boost::shared_ptr<WW8Sttbf> Pointer_t;
+
+ WW8Sttbf(WW8Stream & rStream, sal_uInt32 nOffset, sal_uInt32 nCount);
+
+ /**
+ Return the number of entries.
+ */
+ sal_uInt32 getEntryCount() const;
+
+ /**
+ Return the string of an entry.
+
+ @param nPos the index of the entry
+ */
+ rtl::OUString getEntry(sal_uInt32 nPos) const;
+
+ /**
+ Return the extra data of an entry.
+
+ @param nPos the index of the entry
+ */
+ WW8StructBase::Pointer_t getExtraData(sal_uInt32 nPos);
+};
+
+class WW8SttbTableResource : public ::writerfilter::Reference<Table>
+{
+ WW8Sttbf::Pointer_t mpSttbf;
+
+public:
+ WW8SttbTableResource(WW8Sttbf::Pointer_t pSttbf);
+ virtual ~WW8SttbTableResource();
+
+ void resolve(Table & rTable);
+
+ string getType() const;
+};
+
+class WW8StringProperty : public ::writerfilter::Reference<Properties>
+{
+ sal_uInt32 mnId;
+ WW8StringValue::Pointer_t mpValue;
+
+public:
+ WW8StringProperty(sal_uInt32 nId, WW8StringValue::Pointer_t pValue);
+ virtual ~WW8StringProperty();
+
+ void resolve(Properties & rProperties);
+
+ string getType() const;
+};
+
+}}
+#endif // INCLUDED_WW8_STTBF
diff --git a/writerfilter/source/doctok/WW8StyleSheet.cxx b/writerfilter/source/doctok/WW8StyleSheet.cxx
new file mode 100644
index 000000000000..3bf08eee430c
--- /dev/null
+++ b/writerfilter/source/doctok/WW8StyleSheet.cxx
@@ -0,0 +1,206 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok {
+
+void WW8StyleSheet::initPayload()
+{
+ sal_uInt32 nCount = getEntryCount();
+
+ sal_uInt32 nOffset = get_size() + 2;
+ for (sal_uInt32 n = 0; n < nCount; ++n)
+ {
+ entryOffsets.push_back(nOffset);
+
+ sal_uInt32 cbStd = getU16(nOffset);
+ nOffset += cbStd + 2;
+ }
+
+ entryOffsets.push_back(nOffset);
+}
+
+sal_uInt32 WW8StyleSheet::calcSize()
+{
+ return getCount();
+}
+
+sal_uInt32 WW8StyleSheet::getEntryCount()
+{
+ return get_cstd();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8StyleSheet::getEntry(sal_uInt32 nIndex)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ sal_uInt32 nCount = entryOffsets[nIndex + 1] - entryOffsets[nIndex];
+
+ if (nCount > get_cbSTDBaseInFile() + 2U)
+ {
+ WW8Style * pStyle = new WW8Style(this, entryOffsets[nIndex], nCount);
+
+ pStyle->setIndex(nIndex);
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pStyle);
+ }
+
+ return pResult;
+}
+
+rtl::OUString WW8Style::get_xstzName()
+{
+ sal_uInt32 nCount = getU8(0xc);
+
+ if (nCount > 0)
+ {
+ Sequence aSeq(mSequence, 0xe, nCount * 2);
+
+ rtl_uString * pNew = 0;
+ rtl_uString_newFromStr
+ (&pNew, reinterpret_cast<const sal_Unicode *>(&aSeq[0]));
+
+ return rtl::OUString(pNew);
+
+ }
+
+ return get_xstzName1();
+}
+
+rtl::OUString WW8Style::get_xstzName1()
+{
+ WW8StyleSheet * pParentStyleSheet = dynamic_cast<WW8StyleSheet *>(mpParent);
+
+ if (mpParent != NULL)
+ {
+ sal_uInt32 nOffset = pParentStyleSheet->get_cbSTDBaseInFile() + 2;
+
+ if (nOffset < getCount())
+ {
+ sal_uInt32 nCount = getU16(nOffset);
+
+ if (nCount > 0)
+ {
+ Sequence aSeq(mSequence, nOffset + 2, nCount * 2);
+
+ rtl_uString * pNew = 0;
+ rtl_uString_newFromStr
+ (&pNew, reinterpret_cast<const sal_Unicode *>(&aSeq[0]));
+
+ return rtl::OUString(pNew);
+
+ }
+ }
+ }
+
+ return rtl::OUString();
+}
+
+sal_uInt32 WW8Style::get_upxstart()
+{
+ sal_uInt32 nResult = 0;
+ sal_uInt32 nCount = getU8(0xc);
+
+ if (nCount > 0)
+ {
+ nResult = 0xc + 1 + nCount * 2;
+
+ nResult += nResult % 2;
+ }
+ else
+ {
+ WW8StyleSheet * pParentStyleSheet =
+ dynamic_cast<WW8StyleSheet *>(mpParent);
+
+ nResult = pParentStyleSheet->get_cbSTDBaseInFile() + 2;
+
+ if (nResult < getCount())
+ {
+ sal_uInt32 nCountTmp = getU16(nResult);
+
+ nResult += 4 + nCountTmp * 2;
+ }
+ }
+
+ return nResult;
+}
+
+sal_uInt32 WW8Style::get_upx_count()
+{
+ return get_cupx();
+}
+
+writerfilter::Reference<Properties>::Pointer_t WW8Style::get_upx
+(sal_uInt32 nIndex)
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ WW8StructBaseTmpOffset aOffset(this);
+
+ aOffset.set(get_upxstart());
+
+ if (aOffset.get() > 0 )
+ {
+ sal_uInt32 nCount;
+
+ for (sal_uInt32 n = 0; n < nIndex; ++n)
+ {
+ nCount = getU16(aOffset);
+
+ aOffset.inc(nCount + 2);
+ aOffset.inc(aOffset.get() % 2);
+ }
+
+ nCount = getU16(aOffset);
+
+ if (nCount > 0)
+ {
+ aOffset.inc(2);
+
+ bool bIsPap = get_cupx() == 2 && nIndex == 0;
+ WW8PropertySet::Pointer_t
+ pProps(new WW8PropertySetImpl(*this, aOffset.get(), nCount,
+ bIsPap));
+
+ WW8PropertiesReference * pRef =
+ new WW8PropertiesReference(pProps);
+
+ pResult = writerfilter::Reference<Properties>::Pointer_t(pRef);
+ }
+ }
+
+ return pResult;
+}
+
+void WW8Style::resolveNoAuto(Properties & /*rHandler*/)
+{
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8Table.cxx b/writerfilter/source/doctok/WW8Table.cxx
new file mode 100644
index 000000000000..34765de5accb
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Table.cxx
@@ -0,0 +1,204 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok {
+
+/* WW8sprmTDefTable */
+
+sal_uInt32 WW8sprmTDefTable::get_cellx_count()
+{
+ return getU8(0x4) + 1;
+}
+
+sal_uInt16 WW8sprmTDefTable::get_cellx(sal_uInt32 nIndex)
+{
+ return getU16(0x5 + nIndex * 2);
+}
+
+sal_uInt32 WW8sprmTDefTable::get_tc_count()
+{
+ return get_cellx_count() - 1;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8sprmTDefTable::get_tc(sal_uInt32 pos)
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8TC(this,
+ 0x5 + get_cellx_count() * 2 + pos * WW8TC::getSize()));
+}
+
+/* WW8sprmTTableBorders */
+
+sal_uInt32 WW8sprmTTableBorders::get_rgbbrc_count()
+{
+ return 6;
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8sprmTTableBorders::get_rgbbrc(sal_uInt32 pos)
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8BRC(*this, 0x3 + pos * WW8BRC::getSize()));
+}
+
+/* WW8sprmTCellBottomColor */
+
+sal_uInt32 WW8sprmTCellBottomColor::calcSize()
+{
+ return get_cellBottomColor_count() * 4 + 3;
+}
+
+sal_uInt32 WW8sprmTCellBottomColor::get_cellBottomColor_count()
+{
+ return getU8(0x2) / 4;
+}
+
+sal_uInt32 WW8sprmTCellBottomColor::get_cellBottomColor(sal_uInt32 pos)
+{
+ return getU32(0x3 + 4 * pos);
+}
+
+/* WW8sprmTCellLeftColor */
+
+sal_uInt32 WW8sprmTCellLeftColor::calcSize()
+{
+ return get_cellLeftColor_count() * 4 + 3;
+}
+
+sal_uInt32 WW8sprmTCellLeftColor::get_cellLeftColor_count()
+{
+ return getU8(0x2) / 4;
+}
+
+sal_uInt32 WW8sprmTCellLeftColor::get_cellLeftColor(sal_uInt32 pos)
+{
+ return getU32(0x3 + 4 * pos);
+}
+
+/* WW8sprmTCellTopColor */
+
+sal_uInt32 WW8sprmTCellTopColor::calcSize()
+{
+ return get_cellTopColor_count() * 4 + 3;
+}
+
+sal_uInt32 WW8sprmTCellTopColor::get_cellTopColor_count()
+{
+ return getU8(0x2) / 4;
+}
+
+sal_uInt32 WW8sprmTCellTopColor::get_cellTopColor(sal_uInt32 pos)
+{
+ return getU32(0x3 + 4 * pos);
+}
+
+/* WW8sprmTCellRightColor */
+
+sal_uInt32 WW8sprmTCellRightColor::calcSize()
+{
+ return get_cellRightColor_count() * 4 + 3;
+}
+
+sal_uInt32 WW8sprmTCellRightColor::get_cellRightColor_count()
+{
+ return getU8(0x2) / 4;
+}
+
+sal_uInt32 WW8sprmTCellRightColor::get_cellRightColor(sal_uInt32 pos)
+{
+ return getU32(0x3 + 4 * pos);
+}
+
+/* WW8sprmTGridLineProps */
+
+sal_uInt32 WW8sprmTGridLineProps::calcSize()
+{
+ return getSize();
+}
+
+/* WW8sprmTDefTableShd */
+
+sal_uInt32 WW8sprmTDefTableShd::calcSize()
+{
+ return get_shd_count() * WW8SHD::getSize() + 3;
+}
+
+sal_uInt32 WW8sprmTDefTableShd::get_shd_count()
+{
+ return getU8(0x2) / WW8SHD::getSize();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8sprmTDefTableShd::get_shd(sal_uInt32 pos)
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8SHD(*this, 0x3 + pos * WW8SHD::getSize()));
+}
+
+/* WW8sprmTCellShd */
+
+sal_uInt32 WW8sprmTCellShd::calcSize()
+{
+ return get_shd_count() * WW8CellShd::getSize();
+}
+
+sal_uInt32 WW8sprmTCellShd::get_shd_count()
+{
+ return getU8(0x2) / WW8CellShd::getSize();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8sprmTCellShd::get_shd(sal_uInt32 pos)
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8CellShd(*this, 0x3 + pos * WW8CellShd::getSize()));
+}
+
+/* WW8sprmTCellShadow */
+
+sal_uInt32 WW8sprmTCellShadow::calcSize()
+{
+ return get_cellShadow_count() * WW8CellShd::getSize();
+}
+
+sal_uInt32 WW8sprmTCellShadow::get_cellShadow_count()
+{
+ return getU8(0x2) / WW8CellShd::getSize();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8sprmTCellShadow::get_cellShadow(sal_uInt32 pos)
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8CellShd(*this, 0x3 + pos * WW8CellShd::getSize()));
+}
+
+}}
diff --git a/writerfilter/source/doctok/WW8Text.cxx b/writerfilter/source/doctok/WW8Text.cxx
new file mode 100644
index 000000000000..746cf4547288
--- /dev/null
+++ b/writerfilter/source/doctok/WW8Text.cxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resources.hxx>
+
+namespace writerfilter {
+namespace doctok {
+sal_uInt32 WW8sprmPChgTabsPapx::calcSize()
+{
+ return getS8(0x2) + 3;
+}
+
+sal_uInt32 WW8sprmPChgTabsPapx::get_dxaDel_count()
+{
+ return getS8(0x3);
+}
+
+sal_Int16 WW8sprmPChgTabsPapx::get_dxaDel(sal_uInt32 pos)
+{
+ return getS16(0x4 + pos * 2);
+}
+
+sal_uInt32 WW8sprmPChgTabsPapx::get_dxaAdd_count()
+{
+ return getS8(0x4 + get_dxaDel_count() * 2);
+}
+
+sal_Int16 WW8sprmPChgTabsPapx::get_dxaAdd(sal_uInt32 pos)
+{
+ return getS16(0x4 + get_dxaDel_count() * 2 + 1 + pos * 2);
+}
+
+sal_uInt32 WW8sprmPChgTabsPapx::get_tbdAdd_count()
+{
+ return get_dxaAdd_count();
+}
+
+writerfilter::Reference<Properties>::Pointer_t
+WW8sprmPChgTabsPapx::get_tbdAdd(sal_uInt32 pos)
+{
+ //wntmsci compiler cannot handle 'too many inlines' ;-)
+ writerfilter::Reference<Properties>::Pointer_t pRet( new WW8TBD(this,
+ 0x4 + get_dxaDel_count() * 2 + 1 + get_dxaAdd_count() * 2
+ + pos, 1));
+ return pRet;
+
+/* return writerfilter::Reference<Properties>::Pointer_t
+ (new WW8TBD(this,
+ 0x4 + get_dxaDel_count() * 2 + 1 + get_dxaAdd_count() * 2
+ + pos, 1));*/
+}
+}}
diff --git a/writerfilter/source/doctok/WW8inc.xsl b/writerfilter/source/doctok/WW8inc.xsl
new file mode 100644
index 000000000000..956e2cad24be
--- /dev/null
+++ b/writerfilter/source/doctok/WW8inc.xsl
@@ -0,0 +1,106 @@
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+<xsl:output method="text" encoding="iso-8859-1"/>
+
+<xsl:template match="/">
+<xsl:apply-templates select="//xhtml:body/xhtml:table"/>
+</xsl:template>
+
+<xsl:template match="xhtml:table">
+<xsl:apply-templates select="xhtml:tbody/xhtml:tr[2]"/>
+</xsl:template>
+
+<xsl:template name="handleTR">
+<xsl:param name="offset"/>
+<xsl:param name="shift"/>
+<xsl:variable name="name"><xsl:value-of select="xhtml:td[3]"/></xsl:variable>
+<xsl:variable name="type"><xsl:value-of select="xhtml:td[4]"/></xsl:variable>
+<xsl:variable name="saltype">
+<xsl:choose>
+ <xsl:when test="$type='U8'">sal_uInt8</xsl:when>
+ <xsl:when test="$type='S8'">sal_Int8</xsl:when>
+ <xsl:when test="$type='U16'">sal_uInt16</xsl:when>
+ <xsl:when test="$type='S16'">sal_Int16</xsl:when>
+ <xsl:when test="$type='U32'">sal_uInt32</xsl:when>
+ <xsl:when test="$type='S32'">sal_Int32</xsl:when>
+ <xsl:otherwise>void *</xsl:otherwise>
+</xsl:choose>
+</xsl:variable>
+<xsl:variable name="bits"><xsl:value-of select="xhtml:td[5]"/></xsl:variable>
+<xsl:variable name="mask"><xsl:value-of select="xhtml:td[6]"/></xsl:variable>
+<xsl:variable name="comment"><xsl:value-of select="xhtml:td[7]"/></xsl:variable>
+/**
+<xsl:value-of select="$comment"/>
+
+offset : <xsl:value-of select="$offset"/>
+name : <xsl:value-of select="$name"/>
+type : <xsl:value-of select="$type"/>
+shift : <xsl:value-of select="concat($shift, '&#xa;')"/>
+*/
+
+<xsl:value-of select="$saltype"/> get_<xsl:value-of select="$name"/>() const<xsl:choose>
+<xsl:when test="$saltype='void *'">;
+</xsl:when>
+<xsl:otherwise> { return (get<xsl:value-of select="$type"/>(0x<xsl:value-of select="$offset"/>)<xsl:if test="string-length($mask)>0"> &amp; 0x<xsl:value-of select="translate($mask, 'ABCDEF', 'abcdef')"/></xsl:if>)<xsl:if test="$shift>0"> &gt;&gt; <xsl:value-of select="$shift"/></xsl:if>; }
+</xsl:otherwise>
+</xsl:choose>
+</xsl:template>
+
+<xsl:template match="xhtml:tr[./xhtml:td[position()=1]/text()]">
+<xsl:variable name="offset"><xsl:value-of select="xhtml:td[2]"/></xsl:variable>
+<xsl:call-template name="handleTR">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift">0</xsl:with-param>
+</xsl:call-template>
+<xsl:variable name="shift1"><xsl:value-of select="substring-after(xhtml:td[5], ':')"/></xsl:variable>
+<xsl:apply-templates select="following-sibling::xhtml:tr[position()=1]">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift" select="$shift1"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="xhtml:tr[not(./xhtml:td[position()=1]/text())]">
+<xsl:param name="offset"/>
+<xsl:param name="shift"/>
+<xsl:call-template name="handleTR">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift" select="$shift"/>
+</xsl:call-template>
+<xsl:variable name="shift1"><xsl:value-of select="$shift+substring-after(xhtml:td[5], ':')"/></xsl:variable>
+<xsl:apply-templates select="following-sibling::xhtml:tr[position()=1]">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift" select="$shift1"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="*">
+<xsl:copy-of select="."/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/WW8sprms.xsl b/writerfilter/source/doctok/WW8sprms.xsl
new file mode 100644
index 000000000000..80afb9c853ee
--- /dev/null
+++ b/writerfilter/source/doctok/WW8sprms.xsl
@@ -0,0 +1,66 @@
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+<xsl:output method="xml" indent="yes"/>
+
+<xsl:template match="/">
+<out>
+<xsl:apply-templates select=".//xhtml:tr[position() > 2]"/>
+</out>
+</xsl:template>
+
+<xsl:template match='xhtml:tr'>
+<xsl:variable name='sprmname'><xsl:value-of select='xhtml:td[1]'/></xsl:variable>
+<xsl:variable name='sprmid'><xsl:value-of select='xhtml:td[2]'/></xsl:variable>
+<UML:Class>
+<xsl:attribute name='xmi.id'><xsl:value-of select='$sprmname'/></xsl:attribute>
+<xsl:attribute name='name'><xsl:value-of select='$sprmname'/></xsl:attribute>
+<UML:ModelElement.stereotype>
+<UML:Stereotype xmi.idref="ww8sprm"/>
+</UML:ModelElement.stereotype>
+<UML:ModelElement.taggedValue>
+<UML:TaggedValue>
+<UML:TaggedValue.dataValue><xsl:value-of select='$sprmid'/></UML:TaggedValue.dataValue>
+<UML:TaggedValue.type>
+<UML:TagDefinition xmi.idref="sprmcode"/>
+</UML:TaggedValue.type>
+</UML:TaggedValue>
+</UML:ModelElement.taggedValue>
+<UML:ModelElement.taggedValue>
+<UML:TaggedValue>
+<UML:TaggedValue.dataValue>rtf:<xsl:value-of select='$sprmname'/></UML:TaggedValue.dataValue>
+<UML:TaggedValue.type>
+<UML:TagDefinition xmi.idref="sprmid"/>
+</UML:TaggedValue.type>
+</UML:TaggedValue>
+</UML:ModelElement.taggedValue>
+</UML:Class>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/doctok/WW8xmi.xsl b/writerfilter/source/doctok/WW8xmi.xsl
new file mode 100644
index 000000000000..d76921c2bdb7
--- /dev/null
+++ b/writerfilter/source/doctok/WW8xmi.xsl
@@ -0,0 +1,184 @@
+<!--
+*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+<xsl:output method="xml" indent="yes"/>
+
+<xsl:template match="/">
+<UML:Class xmi.id="dummy" name="dummy">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref='access'/>
+ </UML:ModelElement.stereotype>
+<xsl:apply-templates select="//xhtml:body/xhtml:table"/>
+</UML:Class>
+</xsl:template>
+
+<xsl:template match="xhtml:table">
+<xsl:apply-templates select="xhtml:tbody/xhtml:tr[2]"/>
+</xsl:template>
+
+<xsl:template name="handleTR">
+<xsl:param name="offset"/>
+<xsl:param name="shift"/>
+<xsl:variable name="name"><xsl:value-of select="xhtml:td[3]"/></xsl:variable>
+<xsl:variable name="type">
+<xsl:choose>
+<xsl:when test='contains(xhtml:td[4], "[")'>
+<xsl:value-of select='substring-before(xhtml:td[4], "[")'/>
+</xsl:when>
+<xsl:otherwise>
+<xsl:value-of select="xhtml:td[4]"/>
+<xsl:variable name="stereotype">attribute</xsl:variable>
+</xsl:otherwise>
+</xsl:choose>
+</xsl:variable>
+<xsl:variable name='stereotype'>
+<xsl:choose>
+<xsl:when test='contains(xhtml:td[4], "[")'>array</xsl:when>
+<xsl:otherwise>attribute</xsl:otherwise>
+</xsl:choose>
+</xsl:variable>
+<xsl:variable name="saltype">
+<xsl:choose>
+ <xsl:when test="$type='U8'">sal_uInt8</xsl:when>
+ <xsl:when test="$type='S8'">sal_Int8</xsl:when>
+ <xsl:when test="$type='U16'">sal_uInt16</xsl:when>
+ <xsl:when test="$type='S16'">sal_Int16</xsl:when>
+ <xsl:when test="$type='U32'">sal_uInt32</xsl:when>
+ <xsl:when test="$type='S32'">sal_Int32</xsl:when>
+ <xsl:otherwise>void *</xsl:otherwise>
+</xsl:choose>
+</xsl:variable>
+<xsl:variable name="bits"><xsl:value-of select="xhtml:td[5]"/></xsl:variable>
+<xsl:variable name="mask"><xsl:value-of select="xhtml:td[6]"/></xsl:variable>
+<xsl:variable name="comment"><xsl:value-of select="xhtml:td[7]"/></xsl:variable>
+ <UML:Classifier.feature>
+ <UML:Attribute><xsl:attribute name="name"><xsl:value-of select="$name"/></xsl:attribute>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="$comment"/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'comment'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="$offset"/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'offset'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="$shift"/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'shift'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="$mask"/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'mask'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="$bits"/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'bits'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:<xsl:value-of select='translate($name, "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ")'/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'attrid'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+<xsl:if test='$stereotype = "array"'>
+<xsl:variable name='arraycount'><xsl:value-of select='substring-before(substring-after(xhtml:td[4], "["), "]")'/></xsl:variable>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="$arraycount"/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref = 'arraycount'/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+</xsl:if>
+ <UML:StructuralFeature.type>
+ <UML:DataType><xsl:attribute name="xmi.idref"><xsl:value-of select="$type"/></xsl:attribute></UML:DataType>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype><xsl:attribute name="xmi.idref"><xsl:value-of select="$stereotype"/></xsl:attribute></UML:Stereotype>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+</xsl:template>
+
+<xsl:template match="xhtml:tr[./xhtml:td[position()=1]/text()]">
+<xsl:variable name="offset"><xsl:value-of select="xhtml:td[2]"/></xsl:variable>
+<xsl:call-template name="handleTR">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift">0</xsl:with-param>
+</xsl:call-template>
+<xsl:variable name="shift1"><xsl:value-of select="substring-after(xhtml:td[5], ':')"/></xsl:variable>
+<xsl:apply-templates select="following-sibling::xhtml:tr[position()=1]">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift" select="$shift1"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="xhtml:tr[not(./xhtml:td[position()=1]/text())]">
+<xsl:param name="offset"/>
+<xsl:param name="shift"/>
+<xsl:call-template name="handleTR">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift" select="$shift"/>
+</xsl:call-template>
+<xsl:variable name="shift1"><xsl:value-of select="$shift+substring-after(xhtml:td[5], ':')"/></xsl:variable>
+<xsl:apply-templates select="following-sibling::xhtml:tr[position()=1]">
+<xsl:with-param name="offset" select="$offset"/>
+<xsl:with-param name="shift" select="$shift1"/>
+</xsl:apply-templates>
+</xsl:template>
+
+<xsl:template match="*">
+<xsl:copy-of select="."/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/XNoteHelper.hxx b/writerfilter/source/doctok/XNoteHelper.hxx
new file mode 100644
index 000000000000..faa7f3bb038d
--- /dev/null
+++ b/writerfilter/source/doctok/XNoteHelper.hxx
@@ -0,0 +1,143 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_X_NOTE_HELPER_HXX
+#define INCLUDED_X_NOTE_HELPER_HXX
+
+#ifndef INLCUED_PLCF_HXX
+#include <PLCF.hxx>
+#endif
+#include <WW8DocumentImpl.hxx>
+
+namespace writerfilter {
+namespace doctok
+{
+/**
+ A helper class for footnotes and endnotes and annotations(aka X-notes).
+ */
+template <class T>
+class XNoteHelper
+{
+ /// Character positions of X-notes in footnote document
+ WW8StructBase::Pointer_t mpCps;
+
+ /// Character positions of references to X-notes
+ typename PLCF<T>::Pointer_t mpRefs;
+
+ /// piece table for CP to FC conversion
+ WW8PieceTable::Pointer_t mpPieceTable;
+
+ /// the document
+ WW8DocumentImpl * mpDocument;
+
+ /// type of X-notes handled by this helper (PROP_FOOTNOTE, PROP_ENDNOTE)
+ PropertyType meType;
+
+ /// offset in document where X-note subdocument starts
+ CpAndFc mCpAndFcOffset;
+
+ /**
+ Return CpAndFc in document for X-note.
+
+ @param nPos index of X-note
+ */
+ CpAndFc getCpAndFc(sal_uInt32 nPos);
+
+ /**
+ Return CpAndFc in document for reference to a certain X-note.
+
+ @param nPos index of the X-note
+ */
+ CpAndFc getRefCpAndFc(sal_uInt32 nPos);
+
+public:
+ typedef boost::shared_ptr<XNoteHelper> Pointer_t;
+
+ XNoteHelper(WW8StructBase::Pointer_t pCps,
+ typename PLCF<T>::Pointer_t pRefs,
+ WW8PieceTable::Pointer_t pPieceTable,
+ WW8DocumentImpl * pDocument,
+ PropertyType eType,
+ CpAndFc cpAndFcOffset)
+ : mpCps(pCps), mpRefs(pRefs), mpPieceTable(pPieceTable),
+ mpDocument(pDocument), meType(eType), mCpAndFcOffset(cpAndFcOffset)
+ {
+ }
+
+ /**
+ Initialize.
+
+ Generates CpAndFcs in document for X-notes.
+ */
+ void init();
+
+ /**
+ Return number of X-notes.
+ */
+ sal_uInt32 getCount() const;
+
+ /**
+ Return index of CpAndFc.
+
+ @param rCpAndFc the CpAndFc to search
+
+ @return the index of the rCpAndFc found or getCount() otherwise
+ */
+ sal_uInt32 getIndexOfCpAndFc(const CpAndFc & rCpAndFc);
+
+ /**
+ Return subdocument containing X-note.
+
+ @param nIndex index of X-note.
+ */
+ writerfilter::Reference<Stream>::Pointer_t get(sal_uInt32 nIndex);
+
+ /**
+ Return subdocument containing X-note.
+
+ @param rCpAndFc CpAndFc of the X-note's reference
+ */
+ writerfilter::Reference<Stream>::Pointer_t get(const CpAndFc & rCpAndFc);
+
+ /**
+ Return reference data structure of X-note.
+
+ @param nIndex index of X-note
+ */
+ T * getRef(sal_uInt32 nIndex);
+
+ /**
+ Return reference data structure of X-note.
+
+ @param rCpAndFc CpAndFc for the X-note's reference
+ */
+ T * getRef(const CpAndFc & rCpAndFc);
+};
+
+}}
+
+#endif // INCLUDED_X_NOTE_HELPER_HXX
diff --git a/writerfilter/source/doctok/XNoteHelperImpl.hxx b/writerfilter/source/doctok/XNoteHelperImpl.hxx
new file mode 100644
index 000000000000..4cd70b984f24
--- /dev/null
+++ b/writerfilter/source/doctok/XNoteHelperImpl.hxx
@@ -0,0 +1,168 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_X_NOTE_HELPER_IMPL_HXX
+#define INCLUDED_X_NOTE_HELPER_IMPL_HXX
+
+namespace writerfilter {
+namespace doctok
+{
+template <class T>
+sal_uInt32 XNoteHelper<T>::getCount() const
+{
+ sal_uInt32 nResult = 0;
+
+ if (mpCps.get() != NULL && mpCps->getCount() > 8)
+ nResult = ( mpCps->getCount() / 4) - 2;
+
+ return nResult;
+}
+
+template <class T>
+CpAndFc XNoteHelper<T>::getCpAndFc(sal_uInt32 nPos)
+{
+ // There are getCount() + 1 entries in mpOffsets => greater
+ if (nPos > getCount())
+ throw ExceptionNotFound("getCpAndFc");
+
+ Cp aCp(mCpAndFcOffset.getCp() + mpCps->getU32(nPos * 4));
+ Fc aFc(mpPieceTable->cp2fc(aCp));
+ CpAndFc aCpAndFc(aCp, aFc, meType);
+
+ return aCpAndFc;
+}
+
+template <class T>
+CpAndFc XNoteHelper<T>::getRefCpAndFc(sal_uInt32 nPos)
+{
+ // There are getCount() entries in mpRefs => greater or equal
+ if (nPos >= getCount())
+ throw ExceptionNotFound("");
+
+ Cp aCp(mpRefs->getFc(nPos));
+ Fc aFc(mpPieceTable->cp2fc(aCp));
+ CpAndFc aCpAndFc(aCp, aFc, meType);
+
+ return aCpAndFc;
+}
+
+template <class T>
+writerfilter::Reference<Stream>::Pointer_t
+XNoteHelper<T>::get(sal_uInt32 nPos)
+{
+ // There are getCount() entries => greater or equal
+ if (nPos >= getCount())
+ throw ExceptionNotFound("get");
+
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ CpAndFc aCpAndFcStart(getCpAndFc(nPos));
+ CpAndFc aCpAndFcEnd(getCpAndFc(nPos + 1));
+
+ if (aCpAndFcStart < aCpAndFcEnd)
+ pResult = writerfilter::Reference<Stream>::Pointer_t
+ (new WW8DocumentImpl(*mpDocument, aCpAndFcStart, aCpAndFcEnd));
+
+ return pResult;
+}
+
+template <class T>
+sal_uInt32 XNoteHelper<T>::getIndexOfCpAndFc(const CpAndFc & rCpAndFc)
+{
+ sal_uInt32 nResult = getCount();
+
+ sal_uInt32 n = nResult;
+ while (n > 0)
+ {
+ --n;
+
+ Cp aCp(mpRefs->getFc(n));
+ Fc aFc(mpPieceTable->cp2fc(aCp));
+ CpAndFc aCpAndFc(aCp, aFc, meType);
+
+ if (aCpAndFc <= rCpAndFc)
+ {
+ nResult = n;
+ break;
+ }
+ }
+
+ return nResult;
+}
+
+template <class T>
+writerfilter::Reference<Stream>::Pointer_t
+XNoteHelper<T>::get(const CpAndFc & rCpAndFc)
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ sal_uInt32 n = getIndexOfCpAndFc(rCpAndFc);
+
+ if (n < getCount())
+ pResult = get(n);
+
+ return pResult;
+}
+
+template <class T>
+T *
+XNoteHelper<T>::getRef(sal_uInt32 nIndex)
+{
+ return mpRefs->getEntryPointer(nIndex);
+}
+
+template <class T>
+T *
+XNoteHelper<T>::getRef(const CpAndFc & rCpAndFc)
+{
+ T * pResult = NULL;
+
+ sal_uInt32 n = getIndexOfCpAndFc(rCpAndFc);
+
+ if (n < getCount())
+ {
+ pResult = getRef(n);
+ }
+
+ return pResult;
+}
+
+template <class T>
+void XNoteHelper<T>::init()
+{
+ for (sal_uInt32 n = 0; n < getCount(); ++n)
+ {
+ CpAndFc aCpAndFc(getCpAndFc(n));
+ mpDocument->insertCpAndFc(aCpAndFc);
+
+ CpAndFc aCpAndFcRef(getRefCpAndFc(n));
+ mpDocument->insertCpAndFc(aCpAndFcRef);
+ }
+}
+}}
+
+#endif // INCLUDED_X_NOTE_HELPER_IMPL_HXX
diff --git a/writerfilter/source/doctok/analyzer.xsl b/writerfilter/source/doctok/analyzer.xsl
new file mode 100644
index 000000000000..ce645bdbe064
--- /dev/null
+++ b/writerfilter/source/doctok/analyzer.xsl
@@ -0,0 +1,39 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output method="text" />
+<xsl:include href="resourcetools.xsl"/>
+
+<xsl:template match="/">
+ <xsl:call-template name="analyzerdoctokids"/>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/doctok/cleanupresources b/writerfilter/source/doctok/cleanupresources
new file mode 100755
index 000000000000..646c1ea4e0a7
--- /dev/null
+++ b/writerfilter/source/doctok/cleanupresources
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+TEMP=`mktemp -t cleanupresources`
+xsltproc tidyxmi.xsl resources.xmi | xmllint --format - > $TEMP
+mv $TEMP resources.xmi
diff --git a/writerfilter/source/doctok/compactxmi.xsl b/writerfilter/source/doctok/compactxmi.xsl
new file mode 100644
index 000000000000..36ab4f5c5f9a
--- /dev/null
+++ b/writerfilter/source/doctok/compactxmi.xsl
@@ -0,0 +1,262 @@
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:UML = 'org.omg.xmi.namespace.UML'
+ xmlns:exslt="http://exslt.org/common"
+ xml:space="default">
+ <xsl:output method="xml"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates select="//UML:Model"/>
+ </xsl:template>
+
+ <xsl:template match="UML:Model">
+ <model>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:call-template name="nostereotype"/>
+ <xsl:call-template name="ww8resources"/>
+ <xsl:call-template name="sprms"/>
+ </model>
+ </xsl:template>
+
+ <xsl:template name="nostereotype">
+ <xsl:for-each select="UML:Namespace.ownedElement/UML:Class[not(UML:ModelElement.stereotype)]">
+ <xsl:variable name="myid" select="@xmi.id"/>
+ <class>
+ <xsl:attribute name="name">
+ <xsl:value-of select="$myid"/>
+ </xsl:attribute>
+ <xsl:attribute name="resource">
+ <xsl:for-each select="//UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$myid]">
+ <xsl:value-of select="UML:Generalization.parent/UML:Class/@xmi.idref"/>
+ </xsl:for-each>
+ </xsl:attribute>
+ <xsl:apply-templates select=".//UML:Attribute|.//UML:Operation" mode="ww8resource"/>
+ </class>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="ww8resources">
+ <xsl:for-each select="UML:Namespace.ownedElement/UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8resource' and not(UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8sprm')]">
+ <xsl:sort select="@xmi.id"/>
+ <xsl:call-template name="ww8resource"/>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="ww8resource">
+ <xsl:variable name="myid" select="@xmi.id"/>
+ <xsl:variable name="classid">
+ <xsl:call-template name="gettaggedvalue">
+ <xsl:with-param name="name">classid</xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <ww8resource>
+ <xsl:attribute name="name">
+ <xsl:value-of select="$myid"/>
+ </xsl:attribute>
+ <xsl:attribute name="resource">
+ <xsl:for-each select="//UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$myid]">
+ <xsl:value-of select="UML:Generalization.parent/UML:Class/@xmi.idref"/>
+ </xsl:for-each>
+ </xsl:attribute>
+ <xsl:if test="string-length($classid) &gt; 0">
+ <xsl:attribute name="classid">
+ <xsl:value-of select="$classid"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:for-each select="UML:ModelElement.stereotype/UML:Stereotype">
+ <xsl:if test="@xmi.idref != 'ww8resource'">
+ <stereotype>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@xmi.idref"/>
+ </xsl:attribute>
+ </stereotype>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:apply-templates select=".//UML:Attribute|.//UML:Operation" mode="ww8resource"/>
+ </ww8resource>
+ </xsl:template>
+
+ <xsl:template name="gettaggedvalue">
+ <xsl:param name="name"/>
+ <xsl:for-each select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref=$name]">
+ <xsl:value-of select="UML:TaggedValue.dataValue"/>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="sizefortype">
+ <xsl:param name="type"/>
+ <xsl:choose>
+ <xsl:when test="$type='S8'">1</xsl:when>
+ <xsl:when test="$type='U8'">1</xsl:when>
+ <xsl:when test="$type='S16'">2</xsl:when>
+ <xsl:when test="$type='U16'">2</xsl:when>
+ <xsl:when test="$type='S32'">4</xsl:when>
+ <xsl:when test="$type='U32'">4</xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="bits">
+ <xsl:param name="bits"/>
+ <bits>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="bits">
+ <xsl:value-of select="$bits"/>
+ </xsl:attribute>
+ <xsl:attribute name="token">
+ <xsl:call-template name="gettaggedvalue">
+ <xsl:with-param name="name">attrid</xsl:with-param>
+ </xsl:call-template>
+ </xsl:attribute>
+ </bits>
+ </xsl:template>
+
+ <xsl:template match="UML:Attribute" mode="ww8resource">
+ <xsl:variable name="mask">
+ <xsl:call-template name="gettaggedvalue">
+ <xsl:with-param name="name">mask</xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="offset">
+ <xsl:call-template name="gettaggedvalue">
+ <xsl:with-param name="name">offset</xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="type">
+ <xsl:value-of select="UML:StructuralFeature.type/UML:DataType/@xmi.idref"/>
+ </xsl:variable>
+ <xsl:variable name="size">
+ <xsl:call-template name="sizefortype">
+ <xsl:with-param name="type" select="$type"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="arraycount">
+ <xsl:call-template name="gettaggedvalue">
+ <xsl:with-param name="name">arraycount</xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($mask) = 0">
+ <attribute>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="type">
+ <xsl:value-of select="$type"/>
+ </xsl:attribute>
+ <xsl:attribute name="size">
+ <xsl:value-of select="$size"/>
+ </xsl:attribute>
+ <xsl:for-each select="UML:ModelElement.stereotype/UML:Stereotype[@xmi.idref='array']">
+ <xsl:attribute name="array-count">
+ <xsl:value-of select="$arraycount"/>
+ </xsl:attribute>
+ </xsl:for-each>
+ <xsl:attribute name="token">
+ <xsl:call-template name="gettaggedvalue">
+ <xsl:with-param name="name">attrid</xsl:with-param>
+ </xsl:call-template>
+ </xsl:attribute>
+ </attribute>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="attrswithoffset">
+ <xsl:for-each select="ancestor::UML:Class//UML:Attribute[UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='offset' and UML:TaggedValue.dataValue=$offset]]">
+ <xsl:sort select="UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='shift']/UML:TaggedValue.dataValue" data-type="number" order="descending"/>
+ <xsl:copy-of select="."/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:text>&#xa;</xsl:text>
+ <xsl:if test="@name = exslt:node-set($attrswithoffset)/UML:Attribute[1]/@name">
+ <bitfield>
+ <xsl:attribute name="size">
+ <xsl:value-of select="$size"/>
+ </xsl:attribute>
+ <xsl:attribute name="type">
+ <xsl:value-of select="$type"/>
+ </xsl:attribute>
+ <xsl:variable name="allbits" select="8 * $size"/>
+ <xsl:for-each select="exslt:node-set($attrswithoffset)/UML:Attribute">
+ <xsl:variable name="lastshift">
+ <xsl:choose>
+ <xsl:when test="count(preceding-sibling::UML:Attribute) = 0">
+ <xsl:value-of select="$allbits"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="preceding-sibling::UML:Attribute[1]/UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='shift']/UML:TaggedValue.dataValue"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="bits" select="$lastshift - UML:ModelElement.taggedValue/UML:TaggedValue[UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='shift']/UML:TaggedValue.dataValue"/>
+ <xsl:call-template name="bits">
+ <xsl:with-param name="bits" select="$bits"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </bitfield>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="UML:Operation" mode="ww8resource">
+ <operation>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="type">
+ <xsl:for-each select="UML:BehavioralFeature.parameter/UML:Parameter[@kind='return']">
+ <xsl:value-of select="UML:Parameter.type/UML:Class/@xmi.idref"/>
+ </xsl:for-each>
+ </xsl:attribute>
+ <xsl:attribute name="token">
+ <xsl:call-template name="gettaggedvalue">
+ <xsl:with-param name="name">opid</xsl:with-param>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:for-each select="UML:ModelElement.stereotype">
+ <stereotype>
+ <xsl:value-of select="UML:Stereotype/@xmi.idref"/>
+ </stereotype>
+ </xsl:for-each>
+ </operation>
+ </xsl:template>
+
+ <xsl:template match="*" mode="ww8resources">
+ <xsl:apply-templates select="*" mode="ww8resources"/>
+ </xsl:template>
+
+ <xsl:template name="sprms">
+ <xsl:for-each select="UML:Namespace.ownedElement/UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8sprm']">
+ <xsl:sort select="@xmi.id"/>
+ <sprm>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@xmi.id"/>
+ </xsl:attribute>
+ <xsl:attribute name="code">
+ <xsl:call-template name="gettaggedvalue">
+ <xsl:with-param name="name">sprmcode</xsl:with-param>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:attribute name="kind">
+ <xsl:call-template name="gettaggedvalue">
+ <xsl:with-param name="name">kind</xsl:with-param>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:attribute name="token">
+ <xsl:call-template name="gettaggedvalue">
+ <xsl:with-param name="name">sprmid</xsl:with-param>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:if test="UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8resource'">
+ <xsl:apply-templates select=".//UML:Attribute|.//UML:Operation" mode="ww8resource"/>
+ </xsl:if>
+ </sprm>
+ </xsl:for-each>
+ </xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/doctok/doctokLoggers.hxx b/writerfilter/source/doctok/doctokLoggers.hxx
new file mode 100644
index 000000000000..b7dc7e0aa48f
--- /dev/null
+++ b/writerfilter/source/doctok/doctokLoggers.hxx
@@ -0,0 +1,42 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_DOCTOK_LOGGERS_HXX
+#define INCLUDED_DOCTOK_LOGGERS_HXX
+
+#ifdef DEBUG
+
+#include <resourcemodel/TagLogger.hxx>
+
+namespace writerfilter {
+ namespace doctok {
+ extern TagLogger::Pointer_t debug_logger;
+ }
+}
+
+#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/escher.html b/writerfilter/source/doctok/escher.html
new file mode 100644
index 000000000000..7d82c773d54f
--- /dev/null
+++ b/writerfilter/source/doctok/escher.html
@@ -0,0 +1,207 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+ <head>
+ <title></title>
+ </head>
+
+ <body>
+ <h1></h1>
+
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">rotation</font><p></p></td><td valign="top"><font face=" , " size="2">4</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">fixed point: 16.16 degrees<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockRotation</font><p></p></td><td valign="top"><font face=" , " size="2">119</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">No rotation</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockAspectRatio</font><p></p></td><td valign="top"><font face=" , " size="2">120</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Don't allow changes in aspect ratio</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockPosition</font><p></p></td><td valign="top"><font face=" , " size="2">121</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Don't allow the shape to be moved</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockAgainstSelect</font><p></p></td><td valign="top"><font face=" , " size="2">122</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Shape may not be selected</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockCropping</font><p></p></td><td valign="top"><font face=" , " size="2">123</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">No cropping this shape</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockVertices</font><p></p></td><td valign="top"><font face=" , " size="2">124</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Edit Points not allowed</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockText</font><p></p></td><td valign="top"><font face=" , " size="2">125</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Do not edit text</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockAdjustHandles</font><p></p></td><td valign="top"><font face=" , " size="2">126</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Do not adjust</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockAgainstGrouping</font><p></p></td><td valign="top"><font face=" , " size="2">127</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Do not group this shape<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lTxid</font><p></p></td><td valign="top"><font face=" , " size="2">128</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">id for the text, value determined by the host</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxTextLeft</font><p></p></td><td valign="top"><font face=" , " size="2">129</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/10 inch</font><p></p></td><td valign="top"><font face=" , " size="2">margins relative to shape's inscribed text rectangle (in EMUs)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dyTextTop</font><p></p></td><td valign="top"><font face=" , " size="2">130</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/20 inch</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxTextRight</font><p></p></td><td valign="top"><font face=" , " size="2">131</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/10 inch</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dyTextBottom</font><p></p></td><td valign="top"><font face=" , " size="2">132</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/20 inch</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">WrapText</font><p></p></td><td valign="top"><font face=" , " size="2">133</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOWRAPMODE</b></font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Wrap text at shape margins</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">scaleText</font><p></p></td><td valign="top"><font face=" , " size="2">134</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Text zoom/scale (used if fFitTextToShape)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">anchorText</font><p></p></td><td valign="top"><font face=" , " size="2">135</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOANCHOR</b></font><p></p></td><td valign="top"><font face=" , " size="2">Top</font><p></p></td><td valign="top"><font face=" , " size="2">How to anchor the text</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">txflTextFlow</font><p></p></td><td valign="top"><font face=" , " size="2">136</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOTXFL</b></font><p></p></td><td valign="top"><font face=" , " size="2">HorzN</font><p></p></td><td valign="top"><font face=" , " size="2">Text flow</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">cdirFont</font><p></p></td><td valign="top"><font face=" , " size="2">137</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCDIR</b></font><p></p></td><td valign="top"><font face=" , " size="2">msocdir0</font><p></p></td><td valign="top"><font face=" , " size="2">Font rotation</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">hspNext</font><p></p></td><td valign="top"><font face=" , " size="2">138</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOHSP</b></font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">ID of the next shape (used by Word for linked textboxes)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">txdir</font><p></p></td><td valign="top"><font face=" , " size="2">139</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOTXDIR</b></font><p></p></td><td valign="top"><font face=" , " size="2">LTR</font><p></p></td><td valign="top"><font face=" , " size="2">Bi-Di Text direction</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fSelectText</font><p></p></td><td valign="top"><font face=" , " size="2">187</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE if single click selects text, FALSE if two clicks</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fAutoTextMargin</font><p></p></td><td valign="top"><font face=" , " size="2">188</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">use host's margin calculations</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fRotateText</font><p></p></td><td valign="top"><font face=" , " size="2">189</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Rotate text with shape</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fFitShapeToText</font><p></p></td><td valign="top"><font face=" , " size="2">190</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Size shape to fit text size</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fFitTextToShape</font><p></p></td><td valign="top"><font face=" , " size="2">191</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Size text to fit shape size<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextUNICODE</font><p></p></td><td valign="top"><font face=" , " size="2">192</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">UNICODE text string</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextRTF</font><p></p></td><td valign="top"><font face=" , " size="2">193</font><p></p></td><td valign="top"><font face=" , " size="2">char*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">RTF text string</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextAlign</font><p></p></td><td valign="top"><font face=" , " size="2">194</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOGEOTEXTALIGN</b></font><p></p></td><td valign="top"><font face=" , " size="2">Center</font><p></p></td><td valign="top"><font face=" , " size="2">alignment on curve</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextSize</font><p></p></td><td valign="top"><font face=" , " size="2">195</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">36&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">default point size</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextSpacing</font><p></p></td><td valign="top"><font face=" , " size="2">196</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">fixed point 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFont</font><p></p></td><td valign="top"><font face=" , " size="2">197</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">font family name</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFReverseRows</font><p></p></td><td valign="top"><font face=" , " size="2">240</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Reverse row order</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fGtext</font><p></p></td><td valign="top"><font face=" , " size="2">241</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Has text effect</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFVertical</font><p></p></td><td valign="top"><font face=" , " size="2">242</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Rotate characters</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFKern</font><p></p></td><td valign="top"><font face=" , " size="2">243</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Kern characters</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFTight</font><p></p></td><td valign="top"><font face=" , " size="2">244</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Tightening or tracking</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFStretch</font><p></p></td><td valign="top"><font face=" , " size="2">245</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Stretch to fit shape</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFShrinkFit</font><p></p></td><td valign="top"><font face=" , " size="2">246</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Char bounding box</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFBestFit</font><p></p></td><td valign="top"><font face=" , " size="2">247</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Scale text-on-path</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFNormalize</font><p></p></td><td valign="top"><font face=" , " size="2">248</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Stretch char height</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFDxMeasure</font><p></p></td><td valign="top"><font face=" , " size="2">249</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Do not measure along path</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFBold</font><p></p></td><td valign="top"><font face=" , " size="2">250</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Bold font</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFItalic</font><p></p></td><td valign="top"><font face=" , " size="2">251</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Italic font</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFUnderline</font><p></p></td><td valign="top"><font face=" , " size="2">252</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Underline font</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFShadow</font><p></p></td><td valign="top"><font face=" , " size="2">253</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Shadow font</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFSmallcaps</font><p></p></td><td valign="top"><font face=" , " size="2">254</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Small caps font</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">gtextFStrikethrough</font><p></p></td><td valign="top"><font face=" , " size="2">255</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Strike through font<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="7"><colgroup><col valign="top" width="96"><col valign="top" width="45"><col valign="top" width="49"><col valign="top" width="49"><col valign="top" width="0"><col valign="top" width="192"><col valign="top" width="1"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Default</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">cropFromTop</font><p></p></td><td valign="top"><font face=" , " size="2">256</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">16.16 fraction times total image width or height, as appropriate.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">cropFromBottom</font><p></p></td><td valign="top"><font face=" , " size="2">257</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">cropFromLeft</font><p></p></td><td valign="top"><font face=" , " size="2">258</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">cropFromRight</font><p></p></td><td valign="top"><font face=" , " size="2">259</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pib</font><p></p></td><td valign="top"><font face=" , " size="2">260</font><p></p></td><td valign="top"><font face=" , " size="2">IMsoBlip*</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip to display</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pibName</font><p></p></td><td valign="top"><font face=" , " size="2">261</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip file name</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pibFlags</font><p></p></td><td valign="top"><font face=" , " size="2">262</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBLIPFLAGS</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Comment</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip flags</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureTransparent</font><p></p></td><td valign="top"><font face=" , " size="2">263</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">~0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">transparent color (none if ~0UL) </font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureContrast</font><p></p></td><td valign="top"><font face=" , " size="2">264</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">contrast setting</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureBrightness</font><p></p></td><td valign="top"><font face=" , " size="2">265</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">brightness setting</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureGamma</font><p></p></td><td valign="top"><font face=" , " size="2">266</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">16.16 gamma</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureId</font><p></p></td><td valign="top"><font face=" , " size="2">267</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Host-defined ID for OLE objects (usually a pointer)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureDblCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">268</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">This</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Modification used if shape has double shadow</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureFillCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">269</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">undefined</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureLineCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">270</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">undefined</font><p></p></td><td colspan="3" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pibPrint</font><p></p></td><td valign="top"><font face=" , " size="2">271</font><p></p></td><td valign="top"><font face=" , " size="2">IMsoBlip*</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip to display when printing</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pibPrintName</font><p></p></td><td valign="top"><font face=" , " size="2">272</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip file name</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pibPrintFlags</font><p></p></td><td valign="top"><font face=" , " size="2">273</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBLIPFLAGS</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Comment</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip flags</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fNoHitTestPicture</font><p></p></td><td valign="top"><font face=" , " size="2">316</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Do not hit test the picture</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureGray</font><p></p></td><td valign="top"><font face=" , " size="2">317</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">grayscale display</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureBiLevel</font><p></p></td><td valign="top"><font face=" , " size="2">318</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">bi-level display</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pictureActive</font><p></p></td><td valign="top"><font face=" , " size="2">319</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Server is active (OLE objects only)<p></p></font></td></tr></tbody></table>
+<table border="1" cellpadding="1" cols="5">
+ <tbody><tr><td valign="top"><font face=" , " size="2">Property</font></td>
+ <td valign="top"><font face=" , " size="2">PID</font></td>
+ <td valign="top"><font face=" , " size="2">Type</font></td>
+ <td valign="top"><font face=" , " size="2">Default</font></td>
+ <td valign="top"><font face=" , " size="2">Description</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">geoLeft</font></td>
+ <td valign="top"><font face=" , " size="2">320</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">Defines the G (geometry) coordinate
+ space.</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">geoTop</font></td>
+ <td valign="top"><font face=" , " size="2">321</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">geoRight</font></td>
+ <td valign="top"><font face=" , " size="2">322</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">21600</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">geoBottom</font></td>
+ <td valign="top"><font face=" , " size="2">323</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">21600</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">shapePath</font></td>
+ <td valign="top"><font face=" , " size="2">324</font></td>
+ <td valign="top"><font face=" , " size="2"><b>MSOSHAPEPATH</b></font></td>
+ <td valign="top"><font face=" , " size="2">msoshapeLinesClosed</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">pVertices</font></td>
+ <td valign="top"><font face=" , " size="2">325</font></td>
+ <td valign="top"><font face=" , " size="2"><b>IMsoArray</b></font></td>
+ <td valign="top"><font face=" , " size="2">NULL</font></td>
+ <td valign="top"><font face=" , " size="2">An array of points, in G units.</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">pSegmentInfo</font></td>
+ <td valign="top"><font face=" , " size="2">326</font></td>
+ <td valign="top"><font face=" , " size="2"><b>IMsoArray</b></font></td>
+ <td valign="top"><font face=" , " size="2">NULL</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjustValue</font></td>
+ <td valign="top"><font face=" , " size="2">327</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">Adjustment values corresponding to the
+ positions of the adjust handles of the shape. The number
+ of values used and their allowable ranges vary from shape
+ type to shape type.</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust2Value</font></td>
+ <td valign="top"><font face=" , " size="2">328</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust3Value</font></td>
+ <td valign="top"><font face=" , " size="2">329</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust4Value</font></td>
+ <td valign="top"><font face=" , " size="2">330</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust5Value</font></td>
+ <td valign="top"><font face=" , " size="2">331</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust6Value</font></td>
+ <td valign="top"><font face=" , " size="2">332</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust7Value</font></td>
+ <td valign="top"><font face=" , " size="2">333</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust8Value</font></td>
+ <td valign="top"><font face=" , " size="2">334</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust9Value</font></td>
+ <td valign="top"><font face=" , " size="2">335</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">adjust10Value</font></td>
+ <td valign="top"><font face=" , " size="2">336</font></td>
+ <td valign="top"><font face=" , " size="2">LONG</font></td>
+ <td valign="top"><font face=" , " size="2">0</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">fShadowOK</font></td>
+ <td valign="top"><font face=" , " size="2">378</font></td>
+ <td valign="top"><font face=" , " size="2">BOOL</font></td>
+ <td valign="top"><font face=" , " size="2">TRUE</font></td>
+ <td valign="top"><font face=" , " size="2">Shadow may be set</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">f3DOK</font></td>
+ <td valign="top"><font face=" , " size="2">379</font></td>
+ <td valign="top"><font face=" , " size="2">BOOL</font></td>
+ <td valign="top"><font face=" , " size="2">TRUE</font></td>
+ <td valign="top"><font face=" , " size="2">3D may be set</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">fLineOK</font></td>
+ <td valign="top"><font face=" , " size="2">380</font></td>
+ <td valign="top"><font face=" , " size="2">BOOL</font></td>
+ <td valign="top"><font face=" , " size="2">TRUE</font></td>
+ <td valign="top"><font face=" , " size="2">Line style may be set</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">fGtextOK</font></td>
+ <td valign="top"><font face=" , " size="2">381</font></td>
+ <td valign="top"><font face=" , " size="2">BOOL</font></td>
+ <td valign="top"><font face=" , " size="2">FALSE</font></td>
+ <td valign="top"><font face=" , " size="2">Text effect (WordArt) supported</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">fFillShadeShapeOK</font></td>
+ <td valign="top"><font face=" , " size="2">382</font></td>
+ <td valign="top"><font face=" , " size="2">BOOL</font></td>
+ <td valign="top"><font face=" , " size="2">FALSE</font></td>
+ <td valign="top"><font face=" , " size="2">&nbsp;</font></td>
+ </tr>
+ <tr>
+ <td valign="top"><font face=" , " size="2">fFillOK</font></td>
+ <td valign="top"><font face=" , " size="2">383</font></td>
+ <td valign="top"><font face=" , " size="2">BOOL</font></td>
+ <td valign="top"><font face=" , " size="2">TRUE</font></td>
+ <td valign="top"><font face=" , " size="2">OK to fill the shape through the UI or
+ VBA?</font></td>
+ </tr>
+</tbody></table>
+<table border="0" cellpadding="7" cols="6"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="0"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Default</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillType</font><p></p></td><td valign="top"><font face=" , " size="2">384</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOFILLTYPE</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Solid</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Type of fill</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillColor</font><p></p></td><td valign="top"><font face=" , " size="2">385</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">white</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Foreground color</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillOpacity</font><p></p></td><td valign="top"><font face=" , " size="2">386</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fixed 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillBackColor</font><p></p></td><td valign="top"><font face=" , " size="2">387</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">white</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Background color</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillBackOpacity</font><p></p></td><td valign="top"><font face=" , " size="2">388</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Shades only</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">389</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">undefined</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Modification for BW views</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillBlip</font><p></p></td><td valign="top"><font face=" , " size="2">390</font><p></p></td><td valign="top"><font face=" , " size="2">IMsoBlip*</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Pattern/texture</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillBlipName</font><p></p></td><td valign="top"><font face=" , " size="2">391</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip file name</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillBlipFlags</font><p></p></td><td valign="top"><font face=" , " size="2">392</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBLIPFLAGS</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Comment</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Blip flags</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillWidth</font><p></p></td><td valign="top"><font face=" , " size="2">393</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">How big (A units) to make a metafile texture.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillHeight</font><p></p></td><td valign="top"><font face=" , " size="2">394</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillAngle</font><p></p></td><td valign="top"><font face=" , " size="2">395</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fade angle - degrees in 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillFocus</font><p></p></td><td valign="top"><font face=" , " size="2">396</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Linear shaded fill focus percent</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillToLeft</font><p></p></td><td valign="top"><font face=" , " size="2">397</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fraction 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillToTop</font><p></p></td><td valign="top"><font face=" , " size="2">398</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fraction 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillToRight</font><p></p></td><td valign="top"><font face=" , " size="2">399</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fraction 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillToBottom</font><p></p></td><td valign="top"><font face=" , " size="2">400</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fraction 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillRectLeft</font><p></p></td><td valign="top"><font face=" , " size="2">401</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">For shaded fills, use the specified rectangle instead of the shape's bounding rect to define how large the fade is going to be.</font><p></p>
+<p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillRectTop</font><p></p></td><td valign="top"><font face=" , " size="2">402</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillRectRight</font><p></p></td><td valign="top"><font face=" , " size="2">403</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillRectBottom</font><p></p></td><td valign="top"><font face=" , " size="2">404</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillDztype</font><p></p></td><td valign="top"><font face=" , " size="2">405</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSODZTYPE</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Default</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillShadePreset</font><p></p></td><td valign="top"><font face=" , " size="2">406</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Special shades</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillShadeColors</font><p></p></td><td valign="top"><font face=" , " size="2">407</font><p></p></td><td valign="top"><font face=" , " size="2"><b>IMsoArray</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">a preset array of colors</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillOriginX</font><p></p></td><td valign="top"><font face=" , " size="2">408</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillOriginY</font><p></p></td><td valign="top"><font face=" , " size="2">409</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillShapeOriginX</font><p></p></td><td valign="top"><font face=" , " size="2">410</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillShapeOriginY</font><p></p></td><td valign="top"><font face=" , " size="2">411</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillShadeType</font><p></p></td><td valign="top"><font face=" , " size="2">412</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOSHADETYPE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Type of shading, if a shaded (gradient) fill.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fFilled</font><p></p></td><td valign="top"><font face=" , " size="2">443</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Is shape filled?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fHitTestFill</font><p></p></td><td valign="top"><font face=" , " size="2">444</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Should we hit test fill? </font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillShape</font><p></p></td><td valign="top"><font face=" , " size="2">445</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Register pattern on shape</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fillUseRect</font><p></p></td><td valign="top"><font face=" , " size="2">446</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Use the large rect?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fNoFillHitTest</font><p></p></td><td valign="top"><font face=" , " size="2">447</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Hit test a shape as though filled<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineColor</font><p></p></td><td valign="top"><font face=" , " size="2">448</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">black</font><p></p></td><td valign="top"><font face=" , " size="2">Color of line</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineOpacity</font><p></p></td><td valign="top"><font face=" , " size="2">449</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">Not implemented</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineBackColor</font><p></p></td><td valign="top"><font face=" , " size="2">450</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">white</font><p></p></td><td valign="top"><font face=" , " size="2">Background color</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">451</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">undefined</font><p></p></td><td valign="top"><font face=" , " size="2">Modification for BW views</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineType</font><p></p></td><td valign="top"><font face=" , " size="2">452</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINETYPE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Solid</font><p></p></td><td valign="top"><font face=" , " size="2">Type of line</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillBlip</font><p></p></td><td valign="top"><font face=" , " size="2">453</font><p></p></td><td valign="top"><font face=" , " size="2">IMsoBlip*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">Pattern/texture</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillBlipName</font><p></p></td><td valign="top"><font face=" , " size="2">454</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">Blip file name</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillBlipFlags</font><p></p></td><td valign="top"><font face=" , " size="2">455</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBLIPFLAGS</b></font><p></p></td><td valign="top"><font face=" , " size="2">Comment</font><p></p></td><td valign="top"><font face=" , " size="2">Blip flags</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillWidth</font><p></p></td><td valign="top"><font face=" , " size="2">456</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">How big (A units) to make a metafile texture.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillHeight</font><p></p></td><td valign="top"><font face=" , " size="2">457</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillDztype</font><p></p></td><td valign="top"><font face=" , " size="2">458</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSODZTYPE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">How to interpret fillWidth/Height numbers.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineWidth</font><p></p></td><td valign="top"><font face=" , " size="2">459</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">9525</font><p></p></td><td valign="top"><font face=" , " size="2">A units; 1pt == 12700 EMUs</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineMiterLimit</font><p></p></td><td valign="top"><font face=" , " size="2">460</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">8&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">ratio (16.16) of width</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineStyle</font><p></p></td><td valign="top"><font face=" , " size="2">461</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINESTYLE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Simple</font><p></p></td><td valign="top"><font face=" , " size="2">Draw parallel lines?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineDashing</font><p></p></td><td valign="top"><font face=" , " size="2">462</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEDASHING</b></font><p></p></td><td valign="top"><font face=" , " size="2">Solid</font><p></p></td><td valign="top"><font face=" , " size="2">Can be overridden by:</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineDashStyle</font><p></p></td><td valign="top"><font face=" , " size="2">463</font><p></p></td><td valign="top"><font face=" , " size="2"><b>IMsoArray</b></font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">As Win32 ExtCreatePen</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineStartArrowhead</font><p></p></td><td valign="top"><font face=" , " size="2">464</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEEND</b></font><p></p></td><td valign="top"><font face=" , " size="2">NoEnd</font><p></p></td><td valign="top"><font face=" , " size="2">Arrow at start</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineEndArrowhead</font><p></p></td><td valign="top"><font face=" , " size="2">465</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEEND</b></font><p></p></td><td valign="top"><font face=" , " size="2">NoEnd</font><p></p></td><td valign="top"><font face=" , " size="2">Arrow at end</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineStartArrowWidth</font><p></p></td><td valign="top"><font face=" , " size="2">466</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEENDWIDTH</b></font><p></p></td><td valign="top"><font face=" , " size="2">MediumWidthArrow</font><p></p></td><td valign="top"><font face=" , " size="2">Arrow at start</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineStartArrowLength</font><p></p></td><td valign="top"><font face=" , " size="2">467</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEENDLENGTH</b></font><p></p></td><td valign="top"><font face=" , " size="2">MediumLenArrow</font><p></p></td><td valign="top"><font face=" , " size="2">Arrow at end</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineEndArrowWidth</font><p></p></td><td valign="top"><font face=" , " size="2">468</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEENDWIDTH</b></font><p></p></td><td valign="top"><font face=" , " size="2">MediumWidthArrow</font><p></p></td><td valign="top"><font face=" , " size="2">Arrow at start</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineEndArrowLength</font><p></p></td><td valign="top"><font face=" , " size="2">469</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEENDLENGTH</b></font><p></p></td><td valign="top"><font face=" , " size="2">MediumLenArrow</font><p></p></td><td valign="top"><font face=" , " size="2">Arrow at end</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineJoinStyle</font><p></p></td><td valign="top"><font face=" , " size="2">470</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINEJOIN</b></font><p></p></td><td valign="top"><font face=" , " size="2">JoinRound</font><p></p></td><td valign="top"><font face=" , " size="2">How to join lines</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineEndCapStyle</font><p></p></td><td valign="top"><font face=" , " size="2">471</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOLINECAP</b></font><p></p></td><td valign="top"><font face=" , " size="2">EndCapFlat</font><p></p></td><td valign="top"><font face=" , " size="2">How to end lines</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fArrowheadsOK</font><p></p></td><td valign="top"><font face=" , " size="2">507</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Allow arrowheads if prop. is set</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLine</font><p></p></td><td valign="top"><font face=" , " size="2">508</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2">Any line?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fHitTestLine</font><p></p></td><td valign="top"><font face=" , " size="2">509</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2">Should we hit test lines? </font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lineFillShape</font><p></p></td><td valign="top"><font face=" , " size="2">510</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2">Register pattern on shape</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fNoLineDrawDash</font><p></p></td><td valign="top"><font face=" , " size="2">511</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Draw a dashed line if no line<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowType</font><p></p></td><td valign="top"><font face=" , " size="2">512</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOSHADOWTYPE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Offset</font><p></p></td><td valign="top"><font face=" , " size="2">Type of effect</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowColor</font><p></p></td><td valign="top"><font face=" , " size="2">513</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">0x808080</font><p></p></td><td valign="top"><font face=" , " size="2">Foreground color</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowHighlight</font><p></p></td><td valign="top"><font face=" , " size="2">514</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">0xCBCBCB</font><p></p></td><td valign="top"><font face=" , " size="2">Embossed color</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">515</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">undefined</font><p></p></td><td valign="top"><font face=" , " size="2">Modification for BW views</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowOpacity</font><p></p></td><td valign="top"><font face=" , " size="2">516</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">Fixed 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowOffsetX</font><p></p></td><td valign="top"><font face=" , " size="2">517</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">25400</font><p></p></td><td valign="top"><font face=" , " size="2">Offset shadow</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowOffsetY</font><p></p></td><td valign="top"><font face=" , " size="2">518</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">25400</font><p></p></td><td valign="top"><font face=" , " size="2">Offset shadow</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowSecondOffsetX</font><p></p></td><td valign="top"><font face=" , " size="2">519</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Double offset shadow</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowSecondOffsetY</font><p></p></td><td valign="top"><font face=" , " size="2">520</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Double offset shadow</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowScaleXToX</font><p></p></td><td valign="top"><font face=" , " size="2">521</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowScaleYToX</font><p></p></td><td valign="top"><font face=" , " size="2">522</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowScaleXToY</font><p></p></td><td valign="top"><font face=" , " size="2">523</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowScaleYToY</font><p></p></td><td valign="top"><font face=" , " size="2">524</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2">16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowPerspectiveX</font><p></p></td><td valign="top"><font face=" , " size="2">525</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">16.16 / weight</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowPerspectiveY</font><p></p></td><td valign="top"><font face=" , " size="2">526</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">16.16 / weight</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowWeight</font><p></p></td><td valign="top"><font face=" , " size="2">527</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;8</font><p></p></td><td valign="top"><font face=" , " size="2">scaling factor</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowOriginX</font><p></p></td><td valign="top"><font face=" , " size="2">528</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">shadowOriginY</font><p></p></td><td valign="top"><font face=" , " size="2">529</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fShadow</font><p></p></td><td valign="top"><font face=" , " size="2">574</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Any shadow?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fshadowObscured</font><p></p></td><td valign="top"><font face=" , " size="2">575</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Excel5-style shadow<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveType</font><p></p></td><td valign="top"><font face=" , " size="2">576</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOXFORMTYPE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Shape</font><p></p></td><td valign="top"><font face=" , " size="2">Where transform applies</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveOffsetX</font><p></p></td><td valign="top"><font face=" , " size="2">577</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">The LONG values define a transformation matrix, effectively, each value is scaled by the perspectiveWeight parameter.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveOffsetY</font><p></p></td><td valign="top"><font face=" , " size="2">578</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveScaleXToX</font><p></p></td><td valign="top"><font face=" , " size="2">579</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveScaleYToX</font><p></p></td><td valign="top"><font face=" , " size="2">580</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveScaleXToY</font><p></p></td><td valign="top"><font face=" , " size="2">581</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveScaleYToY</font><p></p></td><td valign="top"><font face=" , " size="2">582</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;16</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectivePerspectiveX</font><p></p></td><td valign="top"><font face=" , " size="2">583</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectivePerspectiveY</font><p></p></td><td valign="top"><font face=" , " size="2">584</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveWeight</font><p></p></td><td valign="top"><font face=" , " size="2">585</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;8</font><p></p></td><td valign="top"><font face=" , " size="2">Scaling factor</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveOriginX</font><p></p></td><td valign="top"><font face=" , " size="2">586</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;15</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">perspectiveOriginY</font><p></p></td><td valign="top"><font face=" , " size="2">587</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1&lt;&lt;15</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fPerspective</font><p></p></td><td valign="top"><font face=" , " size="2">639</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">On/off<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="6"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="0"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Default</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DSpecularAmt</font><p></p></td><td valign="top"><font face=" , " size="2">640</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fixed-point 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DDiffuseAmt</font><p></p></td><td valign="top"><font face=" , " size="2">641</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">65536</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Fixed-point 16.16</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DShininess</font><p></p></td><td valign="top"><font face=" , " size="2">642</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">5</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Default gives OK results</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DEdgeThickness</font><p></p></td><td valign="top"><font face=" , " size="2">643</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">12700</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Specular edge thickness</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DExtrudeForward</font><p></p></td><td valign="top"><font face=" , " size="2">644</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Distance of extrusion in EMUs</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DExtrudeBackward</font><p></p></td><td valign="top"><font face=" , " size="2">645</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">457200</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DExtrudePlane</font><p></p></td><td valign="top"><font face=" , " size="2">646</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Extrusion direction</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DExtrusionColor</font><p></p></td><td valign="top"><font face=" , " size="2">647</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td valign="top"><font face=" , " size="2">FillThenLine</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Basic color of extruded part of shape; the lighting model used will determine the exact shades used when rendering. </font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DCrMod</font><p></p></td><td valign="top"><font face=" , " size="2">648</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCLR</b></font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">undefined</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Modification for BW views</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">f3D</font><p></p></td><td valign="top"><font face=" , " size="2">700</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Does this shape have a 3D effect?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DMetallic</font><p></p></td><td valign="top"><font face=" , " size="2">701</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">0</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Use metallic specularity?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DUseExtrusionColor</font><p></p></td><td valign="top"><font face=" , " size="2">702</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DLightFace</font><p></p></td><td valign="top"><font face=" , " size="2">703</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"><p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DYRotationAngle</font><p></p></td><td valign="top"><font face=" , " size="2">704</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">degrees (16.16) about y axis</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DXRotationAngle</font><p></p></td><td valign="top"><font face=" , " size="2">705</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">degrees (16.16) about x axis</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationAxisX</font><p></p></td><td valign="top"><font face=" , " size="2">706</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">100</font><p></p></td><td valign="top"><font face=" , " size="2">These specify the rotation axis; only their relative magnitudes matter.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationAxisY</font><p></p></td><td valign="top"><font face=" , " size="2">707</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationAxisZ</font><p></p></td><td valign="top"><font face=" , " size="2">708</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationAngle</font><p></p></td><td valign="top"><font face=" , " size="2">709</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">degrees (16.16) about axis</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationCenterX</font><p></p></td><td valign="top"><font face=" , " size="2">710</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">rotation center x (16.16 or g-units)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationCenterY</font><p></p></td><td valign="top"><font face=" , " size="2">711</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">rotation center y (16.16 or g-units)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRotationCenterZ</font><p></p></td><td valign="top"><font face=" , " size="2">712</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">rotation center z (absolute (emus))</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DRenderMode</font><p></p></td><td valign="top"><font face=" , " size="2">713</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSO3DRENDERMODE</b></font><p></p></td><td valign="top"><font face=" , " size="2">FullRender</font><p></p></td><td valign="top"><font face=" , " size="2">Full,wireframe, or bcube</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DTolerance</font><p></p></td><td valign="top"><font face=" , " size="2">714</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">30000</font><p></p></td><td valign="top"><font face=" , " size="2">pixels (16.16)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DXViewpoint</font><p></p></td><td valign="top"><font face=" , " size="2">715</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1250000</font><p></p></td><td valign="top"><font face=" , " size="2">X view point (emus)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DYViewpoint</font><p></p></td><td valign="top"><font face=" , " size="2">716</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">-1250000</font><p></p></td><td valign="top"><font face=" , " size="2">Y view point (emus)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DZViewpoint</font><p></p></td><td valign="top"><font face=" , " size="2">717</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">9000000</font><p></p></td><td valign="top"><font face=" , " size="2">Z view distance (emus)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DOriginX</font><p></p></td><td valign="top"><font face=" , " size="2">718</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">32768</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DOriginY</font><p></p></td><td valign="top"><font face=" , " size="2">719</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">-32768</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DSkewAngle</font><p></p></td><td valign="top"><font face=" , " size="2">720</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">-8847360</font><p></p></td><td valign="top"><font face=" , " size="2">degree (16.16) skew angle</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DSkewAmount</font><p></p></td><td valign="top"><font face=" , " size="2">721</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">50</font><p></p></td><td valign="top"><font face=" , " size="2">Percentage skew amount</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DAmbientIntensity</font><p></p></td><td valign="top"><font face=" , " size="2">722</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">20000</font><p></p></td><td valign="top"><font face=" , " size="2">Fixed point intensity</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DKeyX</font><p></p></td><td valign="top"><font face=" , " size="2">723</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">50000</font><p></p></td><td valign="top"><font face=" , " size="2">Key light source direc-</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DKeyY</font><p></p></td><td valign="top"><font face=" , " size="2">724</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">tion; only their relative</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DKeyZ</font><p></p></td><td valign="top"><font face=" , " size="2">725</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">10000</font><p></p></td><td valign="top"><font face=" , " size="2">magnitudes matter</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DKeyIntensity</font><p></p></td><td valign="top"><font face=" , " size="2">726</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">38000</font><p></p></td><td valign="top"><font face=" , " size="2">Fixed point intensity</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DFillX</font><p></p></td><td valign="top"><font face=" , " size="2">727</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">-50000</font><p></p></td><td valign="top"><font face=" , " size="2">Fill light source direc-</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DFillY</font><p></p></td><td valign="top"><font face=" , " size="2">728</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">tion; only their relative</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DFillZ</font><p></p></td><td valign="top"><font face=" , " size="2">729</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">10000</font><p></p></td><td valign="top"><font face=" , " size="2">magnitudes matter</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">c3DFillIntensity</font><p></p></td><td valign="top"><font face=" , " size="2">730</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">38000</font><p></p></td><td valign="top"><font face=" , " size="2">Fixed point intensity</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DConstrainRotation</font><p></p></td><td valign="top"><font face=" , " size="2">763</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DRotationCenterAuto</font><p></p></td><td valign="top"><font face=" , " size="2">764</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DParallel</font><p></p></td><td valign="top"><font face=" , " size="2">765</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">1</font><p></p></td><td valign="top"><font face=" , " size="2">Parallel projection?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DKeyHarsh</font><p></p></td><td valign="top"><font face=" , " size="2">766</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">1</font><p></p></td><td valign="top"><font face=" , " size="2">Is key lighting harsh?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fc3DFillHarsh</font><p></p></td><td valign="top"><font face=" , " size="2">767</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Is fill lighting harsh?<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="6"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="0"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Default</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">hspMaster</font><p></p></td><td valign="top"><font face=" , " size="2">769</font><p></p></td><td valign="top"><font face=" , " size="2">MSOHSP</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">NULL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">master shape</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">cxstyle</font><p></p></td><td valign="top"><font face=" , " size="2">771</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOCXSTYLE</b></font><p></p></td><td valign="top"><font face=" , " size="2">None</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Type of connector</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">bWMode</font><p></p></td><td valign="top"><font face=" , " size="2">772</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBWMODE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Automatic</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Settings for modifications to be made when in different forms of black-and-white mode.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">bWModePureBW</font><p></p></td><td valign="top"><font face=" , " size="2">773</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBWMODE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Automatic</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">bWModeBW</font><p></p></td><td valign="top"><font face=" , " size="2">774</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOBWMODE</b></font><p></p></td><td valign="top"><font face=" , " size="2">Automatic</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fOleIcon</font><p></p></td><td valign="top"><font face=" , " size="2">826</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">For OLE objects, whether the object is in icon form</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fPreferRelativeResize</font><p></p></td><td valign="top"><font face=" , " size="2">827</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">For UI only. Prefer relative resizing. </font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fLockShapeType</font><p></p></td><td valign="top"><font face=" , " size="2">828</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">Lock the shape type (don't allow Change Shape)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fDeleteAttachedObject</font><p></p></td><td valign="top"><font face=" , " size="2">830</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fBackground</font><p></p></td><td valign="top"><font face=" , " size="2">831</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td colspan="2" valign="top"><font face=" , " size="2">If TRUE, this is the background shape.<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">spcot</font><p></p></td><td valign="top"><font face=" , " size="2">832</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOSPCOT</b></font><p></p></td><td valign="top"><font face=" , " size="2">TwoSegment</font><p></p></td><td valign="top"><font face=" , " size="2">Callout type</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxyCalloutGap</font><p></p></td><td valign="top"><font face=" , " size="2">833</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/12 inch</font><p></p></td><td valign="top"><font face=" , " size="2">Distance from box to first point.(EMUs)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">spcoa</font><p></p></td><td valign="top"><font face=" , " size="2">834</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOSPCOA</b></font><p></p></td><td valign="top"><font face=" , " size="2">Any</font><p></p></td><td valign="top"><font face=" , " size="2">Callout angle</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">spcod</font><p></p></td><td valign="top"><font face=" , " size="2">835</font><p></p></td><td valign="top"><font face=" , " size="2"><b>MSOSPCOD</b></font><p></p></td><td valign="top"><font face=" , " size="2">Specified</font><p></p></td><td valign="top"><font face=" , " size="2">Callout drop type</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxyCalloutDropSpecified</font><p></p></td><td valign="top"><font face=" , " size="2">836</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">9 points</font><p></p></td><td valign="top"><font face=" , " size="2">if msospcodSpecified, the actual drop distance</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxyCalloutLengthSpecified</font><p></p></td><td valign="top"><font face=" , " size="2">837</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">if fCalloutLengthSpecified, the actual distance</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCallout</font><p></p></td><td valign="top"><font face=" , " size="2">889</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Is the shape a callout?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCalloutAccentBar</font><p></p></td><td valign="top"><font face=" , " size="2">890</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">does callout have accent bar</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCalloutTextBorder</font><p></p></td><td valign="top"><font face=" , " size="2">891</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2">does callout have a text border</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCalloutMinusX</font><p></p></td><td valign="top"><font face=" , " size="2">892</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCalloutMinusY</font><p></p></td><td valign="top"><font face=" , " size="2">893</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2"></font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCalloutDropAuto</font><p></p></td><td valign="top"><font face=" , " size="2">894</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">If true, then we occasionally invert the drop distance</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fCalloutLengthSpecified</font><p></p></td><td valign="top"><font face=" , " size="2">895</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">if true, we look at dxyCalloutLengthSpecified<p></p></font></td></tr></tbody></table>
+<table border="0" cellpadding="7" cols="5"><colgroup><col valign="top" width="115"><col valign="top" width="21"><col valign="top" width="50"><col valign="top" width="50"><col valign="top" width="195"></colgroup><tbody><tr><td valign="top"><font face=" , " size="2">Property</font><p></p></td><td valign="top"><font face=" , " size="2">PID</font><p></p></td><td valign="top"><font face=" , " size="2">Type</font><p></p></td><td valign="top"><font face=" , " size="2">Default</font><p></p></td><td valign="top"><font face=" , " size="2">Description</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">wzName</font><p></p></td><td valign="top"><font face=" , " size="2">896</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">Shape Name (present only if explicitly set)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">wzDescription</font><p></p></td><td valign="top"><font face=" , " size="2">897</font><p></p></td><td valign="top"><font face=" , " size="2">WCHAR*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">alternate text</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pihlShape</font><p></p></td><td valign="top"><font face=" , " size="2">898</font><p></p></td><td valign="top"><font face=" , " size="2">IHlink*</font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">The hyperlink in the shape.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">pWrapPolygonVertices</font><p></p></td><td valign="top"><font face=" , " size="2">899</font><p></p></td><td valign="top"><font face=" , " size="2"><b>IMsoArray</b></font><p></p></td><td valign="top"><font face=" , " size="2">NULL</font><p></p></td><td valign="top"><font face=" , " size="2">The polygon that text will be wrapped around (Word)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxWrapDistLeft</font><p></p></td><td valign="top"><font face=" , " size="2">900</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/8 inch</font><p></p></td><td valign="top"><font face=" , " size="2">Left wrapping distance from text (Word)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dyWrapDistTop</font><p></p></td><td valign="top"><font face=" , " size="2">901</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Top wrapping distance from text (Word)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dxWrapDistRight</font><p></p></td><td valign="top"><font face=" , " size="2">902</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">1/8 inch</font><p></p></td><td valign="top"><font face=" , " size="2">Right wrapping distance from text (Word)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">dyWrapDistBottom</font><p></p></td><td valign="top"><font face=" , " size="2">903</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Bottom wrapping distance from text (Word)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">lidRegroup</font><p></p></td><td valign="top"><font face=" , " size="2">904</font><p></p></td><td valign="top"><font face=" , " size="2">LONG</font><p></p></td><td valign="top"><font face=" , " size="2">0</font><p></p></td><td valign="top"><font face=" , " size="2">Regroup ID </font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fEditedWrap</font><p></p></td><td valign="top"><font face=" , " size="2">953</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Has the wrap polygon been edited?</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fBehindDocument</font><p></p></td><td valign="top"><font face=" , " size="2">954</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Word-only (shape is behind text)</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fOnDblClickNotify</font><p></p></td><td valign="top"><font face=" , " size="2">955</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Notify client on a double click</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fIsButton</font><p></p></td><td valign="top"><font face=" , " size="2">956</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">A button shape (i.e., clicking performs an action). Set for shapes with attached hyperlinks or macros.</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fOneD</font><p></p></td><td valign="top"><font face=" , " size="2">957</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">1D adjustment</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fHidden</font><p></p></td><td valign="top"><font face=" , " size="2">958</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">FALSE</font><p></p></td><td valign="top"><font face=" , " size="2">Do not display</font><p></p></td></tr><tr><td valign="top"><font face=" , " size="2">fPrint</font><p></p></td><td valign="top"><font face=" , " size="2">959</font><p></p></td><td valign="top"><font face=" , " size="2">BOOL</font><p></p></td><td valign="top"><font face=" , " size="2">TRUE</font><p></p></td><td valign="top"><font face=" , " size="2">Print this shape</font><p></p></td></tr></tbody></table>
+
+ <hr>
+ <address><a href="mailto:Henning.Brinkmann@sun.com">Henning Brinkmann - Sun Germany - Software Engineer</a></address>
+<!-- Created: Mon Jul 10 13:57:58 CEST 2006 -->
+<!-- hhmts start -->
+Last modified: Mon Jul 10 17:55:06 CEST 2006
+<!-- hhmts end -->
+ </body>
+</html>
diff --git a/writerfilter/source/doctok/escherdoc.xsl b/writerfilter/source/doctok/escherdoc.xsl
new file mode 100644
index 000000000000..04a63865e9c3
--- /dev/null
+++ b/writerfilter/source/doctok/escherdoc.xsl
@@ -0,0 +1,145 @@
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+<xsl:output method="xml" indent="yes"/>
+
+<xsl:template match="/">
+ <out>
+ <xsl:for-each select="//xhtml:table">
+ <xsl:apply-templates select="." mode="eschertable"/>
+ </xsl:for-each>
+ </out>
+</xsl:template>
+
+<xsl:template match="xhtml:table" mode="eschertable">
+ <xsl:apply-templates select=".//xhtml:tr[position() > 1]" mode="eschertable"/>
+</xsl:template>
+
+<xsl:template match="xhtml:tr" mode="eschertable">
+ <xsl:variable name="name">
+ <xsl:value-of select=".//xhtml:td[1]"/>
+ </xsl:variable>
+ <UML:Class>
+ <xsl:attribute name="xmi.id">
+ <xsl:value-of select="$name"/>
+ </xsl:attribute>
+ <xsl:attribute name="name">
+ <xsl:value-of select="$name"/>
+ </xsl:attribute>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt" />
+ </UML:ModelElement.stereotype>
+ <xsl:apply-templates select=".//xhtml:td[1]" mode="optname"/>
+ <xsl:apply-templates select=".//xhtml:td[2]" mode="fopid"/>
+ <xsl:apply-templates select=".//xhtml:td[3]" mode="type"/>
+ <xsl:apply-templates select=".//xhtml:td[4]" mode="default"/>
+ <xsl:apply-templates select=".//xhtml:td[5]" mode="comment"/>
+ </UML:Class>
+</xsl:template>
+
+<xsl:template match="xhtml:td" mode="optname">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shp<xsl:value-of select="."/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+</xsl:template>
+
+<xsl:template match="xhtml:td" mode="fopid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="."/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+</xsl:template>
+
+<xsl:template match="xhtml:td" mode="type">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>
+ <xsl:call-template name="saltype">
+ <xsl:with-param name="type" select="."/>
+ </xsl:call-template>
+ </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <xsl:if test=".='BOOL'">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template match="xhtml:td" mode="default">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="."/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+</xsl:template>
+
+<xsl:template match="xhtml:td" mode="comment">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue><xsl:value-of select="."/></UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+</xsl:template>
+
+<xsl:template name="saltype">
+ <xsl:param name="type"/>
+ <xsl:choose>
+ <xsl:when test="$type='LONG'">U32</xsl:when>
+ <xsl:when test="$type='BOOL'">U8</xsl:when>
+ <xsl:when test="$type='WCHAR*'">String</xsl:when>
+ <xsl:otherwise>unknown</xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/doctok/genqnametostr b/writerfilter/source/doctok/genqnametostr
new file mode 100644
index 000000000000..a7cd32db5296
--- /dev/null
+++ b/writerfilter/source/doctok/genqnametostr
@@ -0,0 +1,33 @@
+#!/bin/tcsh
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+xalan -xsl qnametostr.xsl -in resources.xmi > qnametostr.tmp
+cat qnametostrheader > qnametostr.cxx
+cat qnametostr.tmp >> qnametostr.cxx
+cat ../ooxml/qnametostr.tmp >> qnametostr.cxx
+cat qnametostrfooter >> qnametostr.cxx
diff --git a/writerfilter/source/doctok/makefile.mk b/writerfilter/source/doctok/makefile.mk
new file mode 100644
index 000000000000..ff03079f2c7a
--- /dev/null
+++ b/writerfilter/source/doctok/makefile.mk
@@ -0,0 +1,155 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+PRJ=..$/..
+PRJNAME=writerfilter
+TARGET=doctok
+#LIBTARGET=NO
+ENABLE_EXCEPTIONS=TRUE
+#USE_DEFFILE=TRUE
+#EXTERNAL_WARNINGS_NOT_ERRORS=TRUE
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/inc$/writerfilter.mk
+
+#CFLAGS+=-DISOLATION_AWARE_ENABLED -DWIN32_LEAN_AND_MEAN -DXML_UNICODE -D_NTSDK -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x0501
+#CFLAGS+=-wd4710 -wd4711 -wd4514 -wd4619 -wd4217 -wd4820
+#CDEFS+=-DDEBUG_DOCTOK_DUMP
+
+
+# --- Files --------------------------------------------------------
+
+SLOFILES= \
+ $(SLO)$/WW8Annotation.obj \
+ $(SLO)$/WW8OutputWithDepth.obj \
+ $(SLO)$/WW8Text.obj \
+ $(SLO)$/DffImpl.obj \
+ $(SLO)$/Dff.obj \
+ $(SLO)$/WW8Picture.obj \
+ $(SLO)$/WW8Sttbf.obj \
+ $(SLO)$/WW8Table.obj \
+ $(SLO)$/WW8StyleSheet.obj \
+ $(SLO)$/WW8FontTable.obj \
+ $(SLO)$/WW8LFOTable.obj \
+ $(SLO)$/WW8ListTable.obj \
+ $(SLO)$/resources.obj \
+ $(SLO)$/WW8CpAndFc.obj \
+ $(SLO)$/WW8StructBase.obj \
+ $(SLO)$/WW8Clx.obj \
+ $(SLO)$/WW8FKPImpl.obj \
+ $(SLO)$/WW8BinTableImpl.obj \
+ $(SLO)$/WW8StreamImpl.obj \
+ $(SLO)$/WW8PropertySetImpl.obj \
+ $(SLO)$/WW8DocumentImpl.obj \
+ $(SLO)$/WW8PieceTableImpl.obj \
+ $(SLO)$/WW8ResourceModelImpl.obj
+
+
+SHL1TARGET=$(TARGET)
+
+.IF "$(GUI)"=="UNX" || "$(GUI)"=="MAC"
+RESOURCEMODELLIB=-lresourcemodel
+.ELIF "$(GUI)"=="OS2"
+RESOURCEMODELLIB=$(LB)$/iresourcemodel.lib
+.ELIF "$(GUI)"=="WNT"
+.IF "$(COM)"=="GCC"
+RESOURCEMODELLIB=-lresourcemodel
+.ELSE
+RESOURCEMODELLIB=$(LB)$/iresourcemodel.lib
+.ENDIF
+.ENDIF
+
+
+SHL1STDLIBS=$(SALLIB)\
+ $(CPPULIB)\
+ $(CPPUHELPERLIB) \
+ $(RESOURCEMODELLIB)
+SHL1IMPLIB=i$(SHL1TARGET)
+SHL1USE_EXPORTS=name
+
+SHL1OBJS=$(SLOFILES)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+DEF1NAME=$(SHL1TARGET)
+DEFLIB1NAME=$(TARGET)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+DOCTOKHXXOUTDIR=$(INCCOM)/doctok
+DOCTOKCXXOUTDIR=$(MISC)
+DOCTOKHXXOUTDIRCREATED=$(DOCTOKHXXOUTDIR)/created
+
+DOCTOKMODEL=resources.xmi
+DOCTOKRESOURCESXSL=resources.xsl
+DOCTOKRESOURCESIMPLXSL=resourcesimpl.xsl
+DOCTOKRESOURCEIDSXSL=resourceids.xsl
+DOCTOKSPRMIDSXSL=sprmids.xsl
+DOCTOKRESOURCETOOLS=resourcetools.xsl
+
+DOCTOKRESOURCEIDSHXX=$(DOCTOKHXXOUTDIR)$/resourceids.hxx
+SPRMIDSHXX=$(DOCTOKHXXOUTDIR)$/sprmids.hxx
+RESOURCESHXX=$(DOCTOKHXXOUTDIR)$/resources.hxx
+RESOURCESCXX=$(DOCTOKCXXOUTDIR)$/resources.cxx
+
+DOCTOKGENHEADERS=$(DOCTOKRESOURCEIDSHXX) $(SPRMIDSHXX) $(RESOURCESHXX)
+DOCTOKGENFILES=$(DOCTOKGENHEADERS) $(RESOURCESCXX)
+
+$(DOCTOKHXXOUTDIRCREATED):
+ @$(MKDIRHIER) $(DOCTOKHXXOUTDIR)
+ @$(TOUCH) $@
+
+$(DOCTOKGENHEADERS): $(DOCTOKHXXOUTDIRCREATED)
+
+$(RESOURCESHXX): $(DOCTOKRESOURCESXSL) $(DOCTOKMODEL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKRESOURCESXSL) $(DOCTOKMODEL) > $@
+
+$(SPRMIDSHXX): $(DOCTOKSPRMIDSXSL) $(DOCTOKMODEL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKSPRMIDSXSL) $(DOCTOKMODEL) > $@
+
+$(RESOURCESCXX): $(DOCTOKRESOURCESIMPLXSL) $(DOCTOKMODEL) $(DOCTOKRESOURCEIDSHXX) $(DOCTOKRESOURCETOOLS)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKRESOURCESIMPLXSL) $(DOCTOKMODEL) > $@
+
+$(DOCTOKRESOURCEIDSHXX): $(DOCTOKRESOURCEIDSXSL) $(DOCTOKMODEL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKRESOURCEIDSXSL) $(DOCTOKMODEL) > $@
+
+$(SLOFILES) : $(DOCTOKGENHEADERS)
+
+.PHONY: genmake genclean
+
+genmake: $(DOCTOKGENFILES)
+
+genclean:
+ rm -f $(DOCTOKGENFILES)
+
+genheaders: $(DOCTOKGENHEADERS)
diff --git a/writerfilter/source/doctok/qnametostr.xsl b/writerfilter/source/doctok/qnametostr.xsl
new file mode 100644
index 000000000000..44fca1e5dde5
--- /dev/null
+++ b/writerfilter/source/doctok/qnametostr.xsl
@@ -0,0 +1,41 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output method="text" />
+
+<xsl:include href="resourcetools.xsl"/>
+
+<xsl:template match="/">
+ <xsl:apply-templates select=".//UML:Model" mode="qnametostr"/>
+ <xsl:apply-templates select='.//UML:Model' mode='sprmidstoxml'/>
+ <xsl:apply-templates select='.//UML:Model' mode='analyzerdoctokids'/>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/qnametostrfooter b/writerfilter/source/doctok/qnametostrfooter
new file mode 100644
index 000000000000..1ec35ed30254
--- /dev/null
+++ b/writerfilter/source/doctok/qnametostrfooter
@@ -0,0 +1,2 @@
+}
+}
diff --git a/writerfilter/source/doctok/qnametostrheader b/writerfilter/source/doctok/qnametostrheader
new file mode 100644
index 000000000000..07ce47387153
--- /dev/null
+++ b/writerfilter/source/doctok/qnametostrheader
@@ -0,0 +1,36 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include "WW8ResourceModelImpl.hxx"
+
+namespace doctok
+{
+
+QNameToString::QNameToString()
+{
diff --git a/writerfilter/source/doctok/replacesprmids b/writerfilter/source/doctok/replacesprmids
new file mode 100755
index 000000000000..e4d6be329a4e
--- /dev/null
+++ b/writerfilter/source/doctok/replacesprmids
@@ -0,0 +1,517 @@
+
+#!/bin/sh
+
+sed "s/0xc601/NS_sprm::LN_PIstdPermute/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC601/NS_sprm::LN_PIstdPermute/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3644/NS_sprm::LN_TCantSplit/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3644/NS_sprm::LN_TCantSplit/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2602/NS_sprm::LN_PIncLvl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2602/NS_sprm::LN_PIncLvl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2461/NS_sprm::LN_PJcExtra/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2461/NS_sprm::LN_PJcExtra/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2403/NS_sprm::LN_PJc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2403/NS_sprm::LN_PJc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2404/NS_sprm::LN_PFSideBySide/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2404/NS_sprm::LN_PFSideBySide/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2405/NS_sprm::LN_PFKeep/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2405/NS_sprm::LN_PFKeep/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2406/NS_sprm::LN_PFKeepFollow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2406/NS_sprm::LN_PFKeepFollow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2407/NS_sprm::LN_PFPageBreakBefore/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2407/NS_sprm::LN_PFPageBreakBefore/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2408/NS_sprm::LN_PBrcl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2408/NS_sprm::LN_PBrcl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2409/NS_sprm::LN_PBrcp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2409/NS_sprm::LN_PBrcp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x260a/NS_sprm::LN_PIlvl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x260A/NS_sprm::LN_PIlvl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x460b/NS_sprm::LN_PIlfo/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x460B/NS_sprm::LN_PIlfo/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x240c/NS_sprm::LN_PFNoLineNumb/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x240C/NS_sprm::LN_PFNoLineNumb/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc60d/NS_sprm::LN_PChgTabsPapx/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC60D/NS_sprm::LN_PChgTabsPapx/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x840e/NS_sprm::LN_PDxaRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x840E/NS_sprm::LN_PDxaRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x840f/NS_sprm::LN_PDxaLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x840F/NS_sprm::LN_PDxaLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4610/NS_sprm::LN_PNest/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4610/NS_sprm::LN_PNest/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8411/NS_sprm::LN_PDxaLeft1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8411/NS_sprm::LN_PDxaLeft1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6412/NS_sprm::LN_PDyaLine/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6412/NS_sprm::LN_PDyaLine/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xa413/NS_sprm::LN_PDyaBefore/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xA413/NS_sprm::LN_PDyaBefore/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xa414/NS_sprm::LN_PDyaAfter/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xA414/NS_sprm::LN_PDyaAfter/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc615/NS_sprm::LN_PChgTabs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC615/NS_sprm::LN_PChgTabs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2416/NS_sprm::LN_PFInTable/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2416/NS_sprm::LN_PFInTable/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x244b/NS_sprm::LN_PCell/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x244B/NS_sprm::LN_PCell/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x244c/NS_sprm::LN_PRow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x244C/NS_sprm::LN_PRow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2417/NS_sprm::LN_PFTtp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2417/NS_sprm::LN_PFTtp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8418/NS_sprm::LN_PDxaAbs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8418/NS_sprm::LN_PDxaAbs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8419/NS_sprm::LN_PDyaAbs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8419/NS_sprm::LN_PDyaAbs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x841a/NS_sprm::LN_PDxaWidth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x841A/NS_sprm::LN_PDxaWidth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x261b/NS_sprm::LN_PPc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x261B/NS_sprm::LN_PPc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461c/NS_sprm::LN_PBrcTop10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461C/NS_sprm::LN_PBrcTop10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461d/NS_sprm::LN_PBrcLeft10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461D/NS_sprm::LN_PBrcLeft10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461e/NS_sprm::LN_PBrcBottom10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461E/NS_sprm::LN_PBrcBottom10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461f/NS_sprm::LN_PBrcRight10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x461F/NS_sprm::LN_PBrcRight10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4620/NS_sprm::LN_PBrcBetween10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4620/NS_sprm::LN_PBrcBetween10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4621/NS_sprm::LN_PBrcBar10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4621/NS_sprm::LN_PBrcBar10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4622/NS_sprm::LN_PDxaFromText10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4622/NS_sprm::LN_PDxaFromText10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2423/NS_sprm::LN_PWr/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2423/NS_sprm::LN_PWr/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6629/NS_sprm::LN_PBrcBar/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6629/NS_sprm::LN_PBrcBar/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x242a/NS_sprm::LN_PFNoAutoHyph/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x242A/NS_sprm::LN_PFNoAutoHyph/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x442b/NS_sprm::LN_PWHeightAbs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x442B/NS_sprm::LN_PWHeightAbs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x442c/NS_sprm::LN_PDcs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x442C/NS_sprm::LN_PDcs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x442d/NS_sprm::LN_PShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x442D/NS_sprm::LN_PShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x842e/NS_sprm::LN_PDyaFromText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x842E/NS_sprm::LN_PDyaFromText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x842f/NS_sprm::LN_PDxaFromText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x842F/NS_sprm::LN_PDxaFromText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2430/NS_sprm::LN_PFLocked/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2430/NS_sprm::LN_PFLocked/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2431/NS_sprm::LN_PFWidowControl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2431/NS_sprm::LN_PFWidowControl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc632/NS_sprm::LN_PRuler/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC632/NS_sprm::LN_PRuler/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2433/NS_sprm::LN_PFKinsoku/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2433/NS_sprm::LN_PFKinsoku/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2434/NS_sprm::LN_PFWordWrap/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2434/NS_sprm::LN_PFWordWrap/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2435/NS_sprm::LN_PFOverflowPunct/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2435/NS_sprm::LN_PFOverflowPunct/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2436/NS_sprm::LN_PFTopLinePunct/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2436/NS_sprm::LN_PFTopLinePunct/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2437/NS_sprm::LN_PFAutoSpaceDE/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2437/NS_sprm::LN_PFAutoSpaceDE/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2438/NS_sprm::LN_PFAutoSpaceDN/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2438/NS_sprm::LN_PFAutoSpaceDN/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4439/NS_sprm::LN_PWAlignFont/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4439/NS_sprm::LN_PWAlignFont/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x443a/NS_sprm::LN_PFrameTextFlow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x443A/NS_sprm::LN_PFrameTextFlow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x243b/NS_sprm::LN_PISnapBaseLine/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x243B/NS_sprm::LN_PISnapBaseLine/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc63e/NS_sprm::LN_PAnld/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC63E/NS_sprm::LN_PAnld/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc63f/NS_sprm::LN_PPropRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC63F/NS_sprm::LN_PPropRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2640/NS_sprm::LN_POutLvl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2640/NS_sprm::LN_POutLvl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2441/NS_sprm::LN_PFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2441/NS_sprm::LN_PFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2443/NS_sprm::LN_PFNumRMIns/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2443/NS_sprm::LN_PFNumRMIns/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2444/NS_sprm::LN_PCrLf/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2444/NS_sprm::LN_PCrLf/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc645/NS_sprm::LN_PNumRM/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC645/NS_sprm::LN_PNumRM/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6645/NS_sprm::LN_PHugePapx/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6645/NS_sprm::LN_PHugePapx/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2447/NS_sprm::LN_PFUsePgsuSettings/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2447/NS_sprm::LN_PFUsePgsuSettings/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2448/NS_sprm::LN_PFAdjustRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2448/NS_sprm::LN_PFAdjustRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0800/NS_sprm::LN_CFRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0800/NS_sprm::LN_CFRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0801/NS_sprm::LN_CFRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0801/NS_sprm::LN_CFRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0802/NS_sprm::LN_CFFldVanish/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0802/NS_sprm::LN_CFFldVanish/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6a03/NS_sprm::LN_CPicLocation/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6A03/NS_sprm::LN_CPicLocation/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4804/NS_sprm::LN_CIbstRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4804/NS_sprm::LN_CIbstRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6805/NS_sprm::LN_CDttmRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6805/NS_sprm::LN_CDttmRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0806/NS_sprm::LN_CFData/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0806/NS_sprm::LN_CFData/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4807/NS_sprm::LN_CIdslRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4807/NS_sprm::LN_CIdslRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xea08/NS_sprm::LN_CChs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xEA08/NS_sprm::LN_CChs/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6a09/NS_sprm::LN_CSymbol/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6A09/NS_sprm::LN_CSymbol/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x080a/NS_sprm::LN_CFOle2/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x080A/NS_sprm::LN_CFOle2/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x480b/NS_sprm::LN_CIdCharType/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x480B/NS_sprm::LN_CIdCharType/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a0c/NS_sprm::LN_CHighlight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A0C/NS_sprm::LN_CHighlight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x680e/NS_sprm::LN_CObjLocation/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x680E/NS_sprm::LN_CObjLocation/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a10/NS_sprm::LN_CFFtcAsciSymb/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A10/NS_sprm::LN_CFFtcAsciSymb/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a30/NS_sprm::LN_CIstd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A30/NS_sprm::LN_CIstd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca31/NS_sprm::LN_CIstdPermute/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA31/NS_sprm::LN_CIstdPermute/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a32/NS_sprm::LN_CDefault/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A32/NS_sprm::LN_CDefault/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a33/NS_sprm::LN_CPlain/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A33/NS_sprm::LN_CPlain/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a34/NS_sprm::LN_CKcd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A34/NS_sprm::LN_CKcd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0835/NS_sprm::LN_CFBold/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0835/NS_sprm::LN_CFBold/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0836/NS_sprm::LN_CFItalic/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0836/NS_sprm::LN_CFItalic/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0837/NS_sprm::LN_CFStrike/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0837/NS_sprm::LN_CFStrike/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0838/NS_sprm::LN_CFOutline/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0838/NS_sprm::LN_CFOutline/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0839/NS_sprm::LN_CFShadow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0839/NS_sprm::LN_CFShadow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x083a/NS_sprm::LN_CFSmallCaps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x083A/NS_sprm::LN_CFSmallCaps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x083b/NS_sprm::LN_CFCaps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x083B/NS_sprm::LN_CFCaps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x083c/NS_sprm::LN_CFVanish/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x083C/NS_sprm::LN_CFVanish/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a3d/NS_sprm::LN_CFtcDefault/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A3D/NS_sprm::LN_CFtcDefault/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a3e/NS_sprm::LN_CKul/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A3E/NS_sprm::LN_CKul/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xea3f/NS_sprm::LN_CSizePos/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xEA3F/NS_sprm::LN_CSizePos/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8840/NS_sprm::LN_CDxaSpace/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x8840/NS_sprm::LN_CDxaSpace/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a41/NS_sprm::LN_CLid/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A41/NS_sprm::LN_CLid/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a42/NS_sprm::LN_CIco/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A42/NS_sprm::LN_CIco/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a43/NS_sprm::LN_CHps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A43/NS_sprm::LN_CHps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a44/NS_sprm::LN_CHpsInc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A44/NS_sprm::LN_CHpsInc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4845/NS_sprm::LN_CHpsPos/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4845/NS_sprm::LN_CHpsPos/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a46/NS_sprm::LN_CHpsPosAdj/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A46/NS_sprm::LN_CHpsPosAdj/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca47/NS_sprm::LN_CMajority/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA47/NS_sprm::LN_CMajority/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a48/NS_sprm::LN_CIss/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A48/NS_sprm::LN_CIss/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca49/NS_sprm::LN_CHpsNew50/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA49/NS_sprm::LN_CHpsNew50/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca4a/NS_sprm::LN_CHpsInc1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA4A/NS_sprm::LN_CHpsInc1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x484b/NS_sprm::LN_CHpsKern/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x484B/NS_sprm::LN_CHpsKern/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca4c/NS_sprm::LN_CMajority50/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA4C/NS_sprm::LN_CMajority50/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a4d/NS_sprm::LN_CHpsMul/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A4D/NS_sprm::LN_CHpsMul/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x484e/NS_sprm::LN_CYsri/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x484E/NS_sprm::LN_CYsri/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a4f/NS_sprm::LN_CRgFtc0/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A4F/NS_sprm::LN_CRgFtc0/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a50/NS_sprm::LN_CRgFtc1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A50/NS_sprm::LN_CRgFtc1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a51/NS_sprm::LN_CRgFtc2/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A51/NS_sprm::LN_CRgFtc2/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4852/NS_sprm::LN_CCharScale/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4852/NS_sprm::LN_CCharScale/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2a53/NS_sprm::LN_CFDStrike/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2A53/NS_sprm::LN_CFDStrike/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0854/NS_sprm::LN_CFImprint/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0854/NS_sprm::LN_CFImprint/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0875/NS_sprm::LN_CFNoProof/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0875/NS_sprm::LN_CFNoProof/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0818/NS_sprm::LN_CFspecVanish/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0818/NS_sprm::LN_CFspecVanish/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca76/NS_sprm::LN_CFitText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA76/NS_sprm::LN_CFitText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x882/NS_sprm::LN_CComplexScript/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x882/NS_sprm::LN_CComplexScript/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2471/NS_sprm::LN_PTightWrap/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2471/NS_sprm::LN_PTightWrap/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0855/NS_sprm::LN_CFSpec/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0855/NS_sprm::LN_CFSpec/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0856/NS_sprm::LN_CFObj/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0856/NS_sprm::LN_CFObj/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca57/NS_sprm::LN_CPropRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA57/NS_sprm::LN_CPropRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0858/NS_sprm::LN_CFEmboss/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0858/NS_sprm::LN_CFEmboss/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2859/NS_sprm::LN_CSfxText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2859/NS_sprm::LN_CSfxText/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085a/NS_sprm::LN_CFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085A/NS_sprm::LN_CFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085b/NS_sprm::LN_CFDiacColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085B/NS_sprm::LN_CFDiacColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085c/NS_sprm::LN_CFBoldBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085C/NS_sprm::LN_CFBoldBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085d/NS_sprm::LN_CFItalicBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x085D/NS_sprm::LN_CFItalicBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a5e/NS_sprm::LN_CFtcBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A5E/NS_sprm::LN_CFtcBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x485f/NS_sprm::LN_CLidBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x485F/NS_sprm::LN_CLidBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a60/NS_sprm::LN_CIcoBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A60/NS_sprm::LN_CIcoBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4a61/NS_sprm::LN_CHpsBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4A61/NS_sprm::LN_CHpsBi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca62/NS_sprm::LN_CDispFldRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA62/NS_sprm::LN_CDispFldRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4863/NS_sprm::LN_CIbstRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4863/NS_sprm::LN_CIbstRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6864/NS_sprm::LN_CDttmRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6864/NS_sprm::LN_CDttmRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6865/NS_sprm::LN_CBrc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6865/NS_sprm::LN_CBrc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4866/NS_sprm::LN_CShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4866/NS_sprm::LN_CShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4867/NS_sprm::LN_CIdslRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x4867/NS_sprm::LN_CIdslRMarkDel/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0868/NS_sprm::LN_CFUsePgsuSettings/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x0868/NS_sprm::LN_CFUsePgsuSettings/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x486b/NS_sprm::LN_CCpg/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x486B/NS_sprm::LN_CCpg/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x486d/NS_sprm::LN_CRgLid0/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x486D/NS_sprm::LN_CRgLid0/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x486e/NS_sprm::LN_CRgLid1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x486E/NS_sprm::LN_CRgLid1/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x286f/NS_sprm::LN_CIdctHint/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x286F/NS_sprm::LN_CIdctHint/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2e00/NS_sprm::LN_PicBrcl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x2E00/NS_sprm::LN_PicBrcl/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xce01/NS_sprm::LN_PicScale/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCE01/NS_sprm::LN_PicScale/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6c02/NS_sprm::LN_PicBrcTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6C02/NS_sprm::LN_PicBrcTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6c03/NS_sprm::LN_PicBrcLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6C03/NS_sprm::LN_PicBrcLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6c04/NS_sprm::LN_PicBrcBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6C04/NS_sprm::LN_PicBrcBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6c05/NS_sprm::LN_PicBrcRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6C05/NS_sprm::LN_PicBrcRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3000/NS_sprm::LN_ScnsPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3000/NS_sprm::LN_ScnsPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3001/NS_sprm::LN_SiHeadingPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3001/NS_sprm::LN_SiHeadingPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd202/NS_sprm::LN_SOlstAnm/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD202/NS_sprm::LN_SOlstAnm/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xf203/NS_sprm::LN_SDxaColWidth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xF203/NS_sprm::LN_SDxaColWidth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xf204/NS_sprm::LN_SDxaColSpacing/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xF204/NS_sprm::LN_SDxaColSpacing/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3005/NS_sprm::LN_SFEvenlySpaced/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3005/NS_sprm::LN_SFEvenlySpaced/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3006/NS_sprm::LN_SFProtected/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3006/NS_sprm::LN_SFProtected/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5007/NS_sprm::LN_SDmBinFirst/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5007/NS_sprm::LN_SDmBinFirst/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5008/NS_sprm::LN_SDmBinOther/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5008/NS_sprm::LN_SDmBinOther/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3009/NS_sprm::LN_SBkc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3009/NS_sprm::LN_SBkc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x300a/NS_sprm::LN_SFTitlePage/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x300A/NS_sprm::LN_SFTitlePage/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x500b/NS_sprm::LN_SCcolumns/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x500B/NS_sprm::LN_SCcolumns/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x900c/NS_sprm::LN_SDxaColumns/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x900C/NS_sprm::LN_SDxaColumns/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x300d/NS_sprm::LN_SFAutoPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x300D/NS_sprm::LN_SFAutoPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x300e/NS_sprm::LN_SNfcPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x300E/NS_sprm::LN_SNfcPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb00f/NS_sprm::LN_SDyaPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB00F/NS_sprm::LN_SDyaPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb010/NS_sprm::LN_SDxaPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB010/NS_sprm::LN_SDxaPgn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3011/NS_sprm::LN_SFPgnRestart/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3011/NS_sprm::LN_SFPgnRestart/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3012/NS_sprm::LN_SFEndnote/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3012/NS_sprm::LN_SFEndnote/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3013/NS_sprm::LN_SLnc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3013/NS_sprm::LN_SLnc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3014/NS_sprm::LN_SGprfIhdt/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3014/NS_sprm::LN_SGprfIhdt/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5015/NS_sprm::LN_SNLnnMod/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5015/NS_sprm::LN_SNLnnMod/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9016/NS_sprm::LN_SDxaLnn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9016/NS_sprm::LN_SDxaLnn/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb017/NS_sprm::LN_SDyaHdrTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB017/NS_sprm::LN_SDyaHdrTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb018/NS_sprm::LN_SDyaHdrBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB018/NS_sprm::LN_SDyaHdrBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3019/NS_sprm::LN_SLBetween/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3019/NS_sprm::LN_SLBetween/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x301a/NS_sprm::LN_SVjc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x301A/NS_sprm::LN_SVjc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x501b/NS_sprm::LN_SLnnMin/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x501B/NS_sprm::LN_SLnnMin/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x501c/NS_sprm::LN_SPgnStart/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x501C/NS_sprm::LN_SPgnStart/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x301d/NS_sprm::LN_SBOrientation/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x301D/NS_sprm::LN_SBOrientation/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x301e/NS_sprm::LN_SBCustomize/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x301E/NS_sprm::LN_SBCustomize/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb01f/NS_sprm::LN_SXaPage/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB01F/NS_sprm::LN_SXaPage/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb020/NS_sprm::LN_SYaPage/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB020/NS_sprm::LN_SYaPage/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb021/NS_sprm::LN_SDxaLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB021/NS_sprm::LN_SDxaLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb022/NS_sprm::LN_SDxaRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB022/NS_sprm::LN_SDxaRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9023/NS_sprm::LN_SDyaTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9023/NS_sprm::LN_SDyaTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9024/NS_sprm::LN_SDyaBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9024/NS_sprm::LN_SDyaBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xb025/NS_sprm::LN_SDzaGutter/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xB025/NS_sprm::LN_SDzaGutter/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5026/NS_sprm::LN_SDmPaperReq/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5026/NS_sprm::LN_SDmPaperReq/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd227/NS_sprm::LN_SPropRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD227/NS_sprm::LN_SPropRMark/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3228/NS_sprm::LN_SFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3228/NS_sprm::LN_SFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3229/NS_sprm::LN_SFFacingCol/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3229/NS_sprm::LN_SFFacingCol/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x322a/NS_sprm::LN_SFRTLGutter/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x322A/NS_sprm::LN_SFRTLGutter/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702b/NS_sprm::LN_SBrcTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702B/NS_sprm::LN_SBrcTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702c/NS_sprm::LN_SBrcLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702C/NS_sprm::LN_SBrcLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702d/NS_sprm::LN_SBrcBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702D/NS_sprm::LN_SBrcBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702e/NS_sprm::LN_SBrcRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x702E/NS_sprm::LN_SBrcRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x522f/NS_sprm::LN_SPgbProp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x522F/NS_sprm::LN_SPgbProp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7030/NS_sprm::LN_SDxtCharSpace/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7030/NS_sprm::LN_SDxtCharSpace/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9031/NS_sprm::LN_SDyaLinePitch/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9031/NS_sprm::LN_SDyaLinePitch/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5032/NS_sprm::LN_SClm/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5032/NS_sprm::LN_SClm/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5033/NS_sprm::LN_STextFlow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5033/NS_sprm::LN_STextFlow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5400/NS_sprm::LN_TJc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5400/NS_sprm::LN_TJc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9601/NS_sprm::LN_TDxaLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9601/NS_sprm::LN_TDxaLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9602/NS_sprm::LN_TDxaGapHalf/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9602/NS_sprm::LN_TDxaGapHalf/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3403/NS_sprm::LN_TFCantSplit/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3403/NS_sprm::LN_TFCantSplit/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3404/NS_sprm::LN_TTableHeader/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x3404/NS_sprm::LN_TTableHeader/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd605/NS_sprm::LN_TTableBorders/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD605/NS_sprm::LN_TTableBorders/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd606/NS_sprm::LN_TDefTable10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD606/NS_sprm::LN_TDefTable10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9407/NS_sprm::LN_TDyaRowHeight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x9407/NS_sprm::LN_TDyaRowHeight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd608/NS_sprm::LN_TDefTable/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD608/NS_sprm::LN_TDefTable/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd609/NS_sprm::LN_TDefTableShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD609/NS_sprm::LN_TDefTableShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd612/NS_sprm::LN_TCellShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD612/NS_sprm::LN_TCellShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x740a/NS_sprm::LN_TTlp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x740A/NS_sprm::LN_TTlp/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x560b/NS_sprm::LN_TFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x560B/NS_sprm::LN_TFBiDi/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x740c/NS_sprm::LN_THTMLProps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x740C/NS_sprm::LN_THTMLProps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd620/NS_sprm::LN_TSetBrc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD620/NS_sprm::LN_TSetBrc/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7621/NS_sprm::LN_TInsert/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7621/NS_sprm::LN_TInsert/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5622/NS_sprm::LN_TDelete/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5622/NS_sprm::LN_TDelete/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7623/NS_sprm::LN_TDxaCol/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7623/NS_sprm::LN_TDxaCol/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5624/NS_sprm::LN_TMerge/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5624/NS_sprm::LN_TMerge/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5625/NS_sprm::LN_TSplit/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x5625/NS_sprm::LN_TSplit/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd626/NS_sprm::LN_TSetBrc10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD626/NS_sprm::LN_TSetBrc10/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7627/NS_sprm::LN_TSetShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7627/NS_sprm::LN_TSetShd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7628/NS_sprm::LN_TSetShdOdd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7628/NS_sprm::LN_TSetShdOdd/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7629/NS_sprm::LN_TTextFlow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x7629/NS_sprm::LN_TTextFlow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd62a/NS_sprm::LN_TDiagLine/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD62A/NS_sprm::LN_TDiagLine/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd62b/NS_sprm::LN_TVertMerge/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD62B/NS_sprm::LN_TVertMerge/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd62c/NS_sprm::LN_TVertAlign/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD62C/NS_sprm::LN_TVertAlign/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd61a/NS_sprm::LN_TCellTopColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD61A/NS_sprm::LN_TCellTopColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd61b/NS_sprm::LN_TCellLeftColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD61B/NS_sprm::LN_TCellLeftColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd61c/NS_sprm::LN_TCellBottomColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD61C/NS_sprm::LN_TCellBottomColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd61d/NS_sprm::LN_TCellRightColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD61D/NS_sprm::LN_TCellRightColor/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd613/NS_sprm::LN_TGridLineProps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD613/NS_sprm::LN_TGridLineProps/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6816/NS_sprm::LN_CIndrsid/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6816/NS_sprm::LN_CIndrsid/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6817/NS_sprm::LN_Cdelrsid/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6817/NS_sprm::LN_Cdelrsid/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6649/NS_sprm::LN_PTableDepth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6649/NS_sprm::LN_PTableDepth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xd670/NS_sprm::LN_TCellShadow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xD670/NS_sprm::LN_TCellShadow/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6424/NS_sprm::LN_PBrcTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6424/NS_sprm::LN_PBrcTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6425/NS_sprm::LN_PBrcLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6425/NS_sprm::LN_PBrcLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6426/NS_sprm::LN_PBrcBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6426/NS_sprm::LN_PBrcBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6427/NS_sprm::LN_PBrcRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6427/NS_sprm::LN_PBrcRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6428/NS_sprm::LN_PBrcBetween/g" < $1 > $1.out && mv $1.out $1
+sed "s/0x6428/NS_sprm::LN_PBrcBetween/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc64e/NS_sprm::LN_PBorderTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC64E/NS_sprm::LN_PBorderTop/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc64f/NS_sprm::LN_PBorderLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC64F/NS_sprm::LN_PBorderLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc650/NS_sprm::LN_PBorderBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC650/NS_sprm::LN_PBorderBottom/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc651/NS_sprm::LN_PBorderRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC651/NS_sprm::LN_PBorderRight/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xc652/NS_sprm::LN_PBorderBetween/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xC652/NS_sprm::LN_PBorderBetween/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca72/NS_sprm::LN_CBorder/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA72/NS_sprm::LN_CBorder/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xf614/NS_sprm::LN_TTPreferredWidth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xF614/NS_sprm::LN_TTPreferredWidth/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xf661/NS_sprm::LN_TTRLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xF661/NS_sprm::LN_TTRLeft/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xca78/NS_sprm::LN_CEastAsianLayout/g" < $1 > $1.out && mv $1.out $1
+sed "s/0xCA78/NS_sprm::LN_CEastAsianLayout/g" < $1 > $1.out && mv $1.out $1
diff --git a/writerfilter/source/doctok/resourceidmapper.xsl b/writerfilter/source/doctok/resourceidmapper.xsl
new file mode 100644
index 000000000000..83892770685a
--- /dev/null
+++ b/writerfilter/source/doctok/resourceidmapper.xsl
@@ -0,0 +1,125 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+
+ <!-- Key all attributes with the same name and same value -->
+ <xsl:key name="same-valued-tagged-data"
+ match="UML:TaggedValue.dataValue" use="." />
+
+ <xsl:template match="/">
+ <out>
+ <xsl:text>
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+
+package analyze;
+
+import java.util.LinkedHashMap;
+
+/**
+ *
+ * @author hb137859
+ */
+public class ResourceIdMap extends LinkedHashMap &lt;String, Integer &gt; {
+
+ static ResourceIdMap mInstance = new ResourceIdMap();
+
+ /** Creates a new instance of ResourceIdMap */
+ protected ResourceIdMap() {
+/* Attributes */&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"][count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <!-- <xsl:when test='.//UML:TaggedValue.dataValue = preceding::*//UML:TaggedValue.dataValue'/>-->
+ <xsl:otherwise>
+ <xsl:text>put("</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>", </xsl:text>
+ <xsl:value-of select='10000 + position()'/>
+ <xsl:text>);&#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+
+/* Operations */&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"][count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>put("</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>", </xsl:text>
+ <xsl:value-of select='20000 + position()'/>
+ <xsl:text>); &#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+
+/* Classes */&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Class[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="classid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noqname"]'/>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>put("</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>", </xsl:text>
+ <xsl:value-of select='30000 + position()'/>
+ <xsl:text>); &#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+ }
+
+ static ResourceIdMap instance() {
+ return mInstance;
+ }
+};
+</xsl:text>
+</out>
+</xsl:template>
+
+ <xsl:template name='idtoqname'>
+ <xsl:param name='id'/>rtf:<xsl:value-of select='substring-after($id, ":")'/>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/resourceidmapperback.xsl b/writerfilter/source/doctok/resourceidmapperback.xsl
new file mode 100644
index 000000000000..8f00e76d7dc1
--- /dev/null
+++ b/writerfilter/source/doctok/resourceidmapperback.xsl
@@ -0,0 +1,125 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+
+ <!-- Key all attributes with the same name and same value -->
+ <xsl:key name="same-valued-tagged-data"
+ match="UML:TaggedValue.dataValue" use="." />
+
+ <xsl:template match="/">
+ <out>
+ <xsl:text>
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+
+package analyze;
+
+import java.util.LinkedHashMap;
+
+/**
+ *
+ * @author hb137859
+ */
+public class ResourceIdMapBackwards extends LinkedHashMap &lt;Integer, String &gt; {
+
+ static ResourceIdMapBackwards mInstance = new ResourceIdMapBackwards();
+
+ /** Creates a new instance of ResourceIdMapBackwards */
+ protected ResourceIdMapBackwards() {
+/* Attributes */&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"][count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <!-- <xsl:when test='.//UML:TaggedValue.dataValue = preceding::*//UML:TaggedValue.dataValue'/>-->
+ <xsl:otherwise>
+ <xsl:text>put(</xsl:text>
+ <xsl:value-of select='10000 + position()'/>
+ <xsl:text>, "</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>");&#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+
+/* Operations */&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"][count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>put(</xsl:text>
+ <xsl:value-of select='20000 + position()'/>
+ <xsl:text>, "</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>"); &#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+
+/* Classes */&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Class[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="classid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noqname"]'/>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>put(</xsl:text>
+ <xsl:value-of select='30000 + position()'/>
+ <xsl:text>, "</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>"); &#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+ }
+
+ static ResourceIdMapBackwards instance() {
+ return mInstance;
+ }
+};
+</xsl:text>
+</out>
+</xsl:template>
+
+ <xsl:template name='idtoqname'>
+ <xsl:param name='id'/>rtf:<xsl:value-of select='substring-after($id, ":")'/>
+ </xsl:template>
+
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/resourceids.xsl b/writerfilter/source/doctok/resourceids.xsl
new file mode 100644
index 000000000000..fb9895c1c1c6
--- /dev/null
+++ b/writerfilter/source/doctok/resourceids.xsl
@@ -0,0 +1,205 @@
+<!--
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+
+ <!-- Key all attributes with the same name and same value -->
+ <xsl:key name="same-valued-tagged-data"
+ match="UML:TaggedValue.dataValue" use="." />
+
+ <xsl:template match="/">
+ <out>
+ <xsl:text>
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * http://www.openoffice.org/license.html
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+#ifndef INCLUDED_RESOURCESIDS
+#define INCLUDED_RESOURCESIDS
+
+#include &lt;sal/types.h&gt;
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+
+namespace writerfilter {
+
+namespace NS_rtf {
+
+/* Attributes */</xsl:text>
+<xsl:for-each select='.//UML:Attribute[@name!="reserved"][count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0]'>
+ <xsl:variable name="pos" select="position()"/>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <!-- <xsl:when test='.//UML:TaggedValue.dataValue = preceding::*//UML:TaggedValue.dataValue'/>-->
+ <xsl:otherwise>
+ <xsl:text>
+const Id </xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text> = </xsl:text>
+ <xsl:variable name="id" select="10000 + $pos"/>
+ <xsl:value-of select='$id'/>
+ <xsl:text>; // 0x</xsl:text>
+ <xsl:call-template name="dectohex">
+ <xsl:with-param name="number" select="$id"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+</xsl:for-each>
+<xsl:text>
+
+/* Operations */</xsl:text>
+<xsl:for-each select='.//UML:Operation[@name!="reserved"][count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0]'>
+ <xsl:variable name="pos" select="position()"/>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>
+const Id </xsl:text>
+<xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+</xsl:call-template>
+<xsl:text> = </xsl:text>
+<xsl:variable name="id" select="20000 + $pos"/>
+<xsl:value-of select='$id'/>
+<xsl:text>; // 0x</xsl:text>
+<xsl:call-template name="dectohex">
+ <xsl:with-param name="number" select="$id"/>
+</xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+</xsl:for-each>
+<xsl:text>
+
+/* Classes */</xsl:text>
+<xsl:for-each select='.//UML:Class[@name!="reserved"]'>
+ <xsl:variable name="pos" select="position()"/>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="classid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noqname"]'/>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>
+const Id </xsl:text>
+<xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+</xsl:call-template>
+<xsl:text> = </xsl:text>
+<xsl:value-of select='30000 + $pos'/>
+<xsl:text>; // 0x</xsl:text>
+<xsl:call-template name="dectohex">
+ <xsl:with-param name="number" select="30000 + position()"/>
+</xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+</xsl:for-each>
+<xsl:text>
+}
+
+namespace NS_dff
+{</xsl:text>
+<xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="dffopt"]'>
+ <xsl:variable name ="optname">
+ <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="optname"]/UML:TaggedValue.dataValue'/>
+ </xsl:variable>
+ <xsl:variable name="fopid">
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="fopid"]'>
+ <xsl:value-of select='UML:TaggedValue.dataValue'/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:text>
+const Id </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id"><xsl:value-of select="$optname"/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="$fopid"/>
+ <xsl:text>; // 0x</xsl:text>
+ <xsl:call-template name="dectohex">
+ <xsl:with-param name="number" select="$fopid"/>
+ </xsl:call-template>
+</xsl:for-each>
+<xsl:text>
+}
+
+
+}
+
+#endif // INCLUDED_RESOURCESIDS&#xa;</xsl:text></out>
+</xsl:template>
+
+<xsl:template name='idtoqname'>
+ <xsl:param name='id'/>LN_<xsl:value-of select='substring-after($id, ":")'/>
+</xsl:template>
+
+<xsl:template name='dectohex'>
+ <xsl:param name="number"/>
+ <xsl:if test="$number > 16">
+ <xsl:call-template name="dectohex">
+ <xsl:with-param name="number" select="floor($number div 16)"/>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:value-of select="substring('0123456789abcdef', $number mod 16 + 1, 1)"/>
+</xsl:template>
+
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/resources.xmi b/writerfilter/source/doctok/resources.xmi
new file mode 100644
index 000000000000..926e046d37b9
--- /dev/null
+++ b/writerfilter/source/doctok/resources.xmi
@@ -0,0 +1,63712 @@
+<?xml version="1.0"?>
+<XMI xmlns:UML="org.omg.xmi.namespace.UML" xmi.version="1.2">
+ <XMI.header>
+ <XMI.documentation/>
+ </XMI.header>
+ <XMI.content>
+ <UML:Model name="WW8Document">
+ <UML:Namespace.ownedElement>
+ <!--Stereotypes -->
+ <UML:Stereotype xmi.id="access" name="access">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="plcf" name="plcf">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="withindex" name="withindex">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="withmembers" name="withmembers">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="resolvenoauto" name="resolvenoauto">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="initimpl" name="initimpl">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="resource" name="resource">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="ww8resource" name="ww8resource">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="ww8sprm" name="ww8sprm">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="ww8sprmbinary" name="ww8sprmbinary">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="debug" name="debug">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="reference" name="reference">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="attribute" name="attribute">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="attributeremainder" name="attribute">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="noresolve" name="noresolve">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="noqname" name="noqname">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="array" name="array">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="string" name="string">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="binary" name="binary">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="dffrecord" name="dffrecord">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="dffopt" name="dffopt">
+ <UML:Stereotype.baseClass>Class</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <UML:Stereotype xmi.id="virtual" name="virtual">
+ <UML:Stereotype.baseClass>Attribute</UML:Stereotype.baseClass>
+ </UML:Stereotype>
+ <!--Stereotypes-->
+ <!--Datatypes -->
+ <UML:DataType xmi.id="U8" name="U8"/>
+ <UML:DataType xmi.id="U16" name="U16"/>
+ <UML:DataType xmi.id="U32" name="U32"/>
+ <UML:DataType xmi.id="String" name="String"/>
+ <UML:DataType xmi.id="Value" name="Value"/>
+ <UML:DataType xmi.id="Sprm" name="Sprm"/>
+ <!--Datatypes-->
+ <!--Tag definitions -->
+ <UML:TagDefinition tagType="String" xmi.id="comment" name="comment"/>
+ <UML:TagDefinition tagType="String" xmi.id="offset" name="offset"/>
+ <UML:TagDefinition tagType="String" xmi.id="shift" name="shift"/>
+ <UML:TagDefinition tagType="String" xmi.id="mask" name="mask"/>
+ <UML:TagDefinition tagType="String" xmi.id="arraycount" name="arraycount"/>
+ <UML:TagDefinition tagType="String" xmi.id="bits" name="bits"/>
+ <UML:TagDefinition tagType="String" xmi.id="attrid" name="attrid"/>
+ <UML:TagDefinition tagType="String" xmi.id="opid" name="opid"/>
+ <UML:TagDefinition tagType="String" xmi.id="classid" name="opid"/>
+ <UML:TagDefinition tagType="String" xmi.id="size" name="size"/>
+ <UML:TagDefinition tagType="String" xmi.id="sprmcode" name="sprmcode"/>
+ <UML:TagDefinition tagType="String" xmi.id="sprmid" name="sprmid"/>
+ <UML:TagDefinition tagType="String" xmi.id="dffid" name="dffid"/>
+ <!--Tag definitions -->
+ <!--Classes without stereotype-->
+ <!--Class Blob-->
+ <UML:Class xmi.id="Blob" name="Blob"/>
+ <UML:Generalization isSpecification="false" xmi.id="Blob-BinaryObj">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="Blob"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="BinaryObj"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class Blob-->
+ <!--Class TextboxText-->
+ <UML:Class xmi.id="TextboxText" name="TextboxText"/>
+ <UML:Generalization isSpecification="false" xmi.id="TextboxText-Stream">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="TextboxText"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Stream"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class TextboxText-->
+ <!--Class UPX-->
+ <UML:Class xmi.id="UPX" name="UPX"/>
+ <UML:Generalization isSpecification="false" xmi.id="UPX-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="UPX"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class UPX-->
+ <!--Class SEPX-->
+ <UML:Class xmi.id="SEPX" name="SEPX"/>
+ <UML:Generalization isSpecification="false" xmi.id="SEPX-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="SEPX"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class SEPX-->
+ <!--Class DffRecord-->
+ <UML:Class xmi.id="DffRecord" name="DffRecord"/>
+ <UML:Generalization isSpecification="false" xmi.id="DffRecord-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="DffRecord"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class DffRecord-->
+ <!--Class Papx-->
+ <UML:Class xmi.id="Papx" name="Papx">
+ <UML:Classifier.feature>
+ <UML:Attribute name="istd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ISTD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <!--Class Papx-->
+ <!--Class dummy-->
+ <UML:Class xmi.id="dummy" name="dummy">
+ <UML:Classifier.feature>
+ <UML:Attribute name="header">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:header</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="footer">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:footer</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="headerr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:headerr</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="headerl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:headerl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="footerr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:footerr</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="footerl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:footerl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="headerf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:headerf</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="footerf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:footerf</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="footnote">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:footnote</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="endnote">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:endnote</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="annotation">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:annotation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="bookmarkname">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BOOKMARKNAME</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="XAlign">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XAlign</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="YAlign">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:YAlign</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="XRelTo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XRelTo</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="YRelTo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:YRelTo</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="LayoutInTableCell">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LayoutInTableCell</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="Inline">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:Inline</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dffrecord">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DffRecord</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dffattribute">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DffAttribute</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dfftype">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dfftype</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dffheader">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dffheader</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="instance">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dffinstance</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dffversion">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dffversion</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="blob">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:blob</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML: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-->
+ <!--Resources-->
+ <UML:Class xmi.id="Properties" name="Properties">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resource"/>
+ </UML:ModelElement.stereotype>
+ </UML:Class>
+ <UML:Class xmi.id="Table" name="Table">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resource"/>
+ </UML:ModelElement.stereotype>
+ </UML:Class>
+ <UML:Class xmi.id="Stream" name="Stream">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resource"/>
+ </UML:ModelElement.stereotype>
+ </UML:Class>
+ <UML:Class xmi.id="BinaryObj" name="BinaryObj">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resource"/>
+ </UML:ModelElement.stereotype>
+ </UML:Class>
+ <!--Resources-->
+ <!--WW8 resources-->
+ <!--Class 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>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>28</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="iStartAt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ISTARTAT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="nfc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:NFC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="jc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:JC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fLegel">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>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:FLEGAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fNoRestart">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>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:FNORESTART</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fIdentSav">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>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:FIDENTSAV</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fConverted">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>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:FCONVERTED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fTentative">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>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:FTENTATIVE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="rgbxchNums">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:RGBXCHNUMS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ixchFollow">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </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="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:IXCHFOLLOW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dxaSpace">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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:DXASPACE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dxaIndent">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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:DXAINDENT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cbGrpprlChpx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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:CBGRPPRLCHPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cbGrpprlPapx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </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="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:CBGRPPRLPAPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ilvlRestartLim">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>26</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ilvlRestartLim</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="grfhic">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </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="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:grfhic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="xst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:xst</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="ListLevel-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="ListLevel"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class ListLevel-->
+ <!--Class List-->
+ <UML:Class xmi.id="List" name="List">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="withindex"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>28</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="listlevel">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LISTLEVEL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="ListLevel"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lsid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LSID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="tplc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:TPLC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fBuildIn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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:fBuildIn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ilgpdM1">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7fff0000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ilgpdM1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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>0xffff</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:lid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="random">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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>0x7fffffff</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </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="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:random</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="rgistd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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:RGISTD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fSimpleList">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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>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:FSIMPLELIST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fAutoNum">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>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:fAutoNum</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fHybrid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>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:fHybrid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="reserved1">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7</UML:TaggedValue.dataValue>
+ <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:reserved1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="grfhic">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </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="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:grfhic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="List-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="List"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class List-->
+ <!--Class ListTable-->
+ <UML:Class xmi.id="ListTable" name="ListTable">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="plcf"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LISTTABLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="classid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="ListTable-Table">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="ListTable"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Table"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class ListTable-->
+ <!--Class LFOLevel-->
+ <UML:Class xmi.id="LFOLevel" name="LFOLevel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="iStartAt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>start-at value if fFormatting == false and fStartAt == true.
+ (if fFormatting == true, the start-at is stored in the LVL)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ISTARTAT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ilvl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the level to be overridden</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ILVL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fStartAt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>true if the start-at value is overridden</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FSTARTAT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fFormatting">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>true if the formatting is overriden (in which case the LFOLVL
+ should contain a pointer to a LVL)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FFORMATTING</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unsigned4_6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNSIGNED4_6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="reserved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:RESERVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="LFOLevel-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="LFOLevel"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class LFOLevel-->
+ <!--Class LFO-->
+ <UML:Class xmi.id="LFO" name="LFO">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="withindex"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lsid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:lsid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="clfolvl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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:clfolvl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ibstFltAutoNum">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ibstFltAutoNum</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="grfhic">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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:grfhic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="LFOData">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LFOData</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="LFOData"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="LFO-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="LFO"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class LFO-->
+ <!--Class SttbRgtplc-->
+ <UML:Class xmi.id="SttbRgtplc" name="SttbRgtplc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:SttbRgtplc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="classid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="SttbRgtplc-Table">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="SttbRgtplc"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Table"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class SttbRgtplc-->
+ <!--Class LFOData-->
+ <UML:Class xmi.id="LFOData" name="LFOData">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:cp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="LFOData-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="LFOData"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class LFOData-->
+ <!--Class LFOTable-->
+ <UML:Class xmi.id="LFOTable" name="LFOTable">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="plcf"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LFOTABLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="classid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="LFOTable-Table">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="LFOTable"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Table"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class LFOTable-->
+ <!--Class FontTable-->
+ <UML:Class xmi.id="FontTable" name="FontTable">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="plcf"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FONTTABLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="classid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FontTable-Table">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FontTable"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Table"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class FontTable-->
+ <!--Class Font-->
+ <UML:Class xmi.id="Font" name="Font">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="withindex"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>40</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="f">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="altName">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ALTFONTNAME</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="xszFfn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XSZFFN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>zero terminated string that records name of font. Possibly
+ followed by a second xsz which records the name of an alternate
+ font to use if the first named font does not exist on this system.
+ Maximal size of xszFfn is 65 characters.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Attribute name="cbFfnM1">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>total length of FFN - 1.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CBFFNM1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="prq">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>pitch request</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>03</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PRQ</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fTrueType">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, font is a TrueType font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>04</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FTRUETYPE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused1_3">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>08</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED1_3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ff">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>font family id</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>70</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused1_7">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>80</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED1_7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wWeight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>base weight of font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WWEIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="chs">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character set identifier</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CHS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ixchSzAlt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>index into ffn.szFfn to the name of the alternate font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:IXCHSZALT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="panose">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>? This is supposed to be of type PANOSE.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PANOSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fs">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>? This is supposed to be of type FONTSIGNATURE.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>24</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="Font-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="Font"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class Font-->
+ <!--Class Style-->
+ <UML:Class xmi.id="Style" name="Style">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="withindex"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="sti">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>invariant style identifier</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0FFF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:STI</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fScratch">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>spare field for any temporary use, always reset back to
+ zero!</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FSCRATCH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fInvalHeight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>PHEs of all text with this style are wrong</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FINVALHEIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fHasUpe">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>UPEs have been generated</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FHASUPE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fMassCopy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>std has been mass-copied; if unused at save time, style should
+ be deleted</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FMASSCOPY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="sgc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>style type code</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:SGC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="istdBase">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>base style</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FFF0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ISTDBASE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cupx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue># of UPXs (and UPEs)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CUPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="istdNext">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>next style</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FFF0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ISTDNEXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="bchUpe">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset to end of upx's, start of upe's</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BCHUPE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fAutoRedef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>auto redefine style when appropriate</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xa</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0001</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FAUTOREDEF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fHidden">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>hidden from UI?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xa</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0002</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FHIDDEN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused8_3">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unused bits</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xa</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FFFC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED8_3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="xstzName">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XSTZNAME</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="xstzName1">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XSTZNAME1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="upxstart">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UPXSTART</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="noresolve"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="upx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="UPX"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="Style-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="Style"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class Style-->
+ <!--Class StyleSheet-->
+ <UML:Class xmi.id="StyleSheet" name="StyleSheet">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="plcf"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+ </UML:ModelElement.stereotype>
+ <UML:Attribute name="size">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Size of style sheet info</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CSTD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ <UML:Attribute name="cstd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Count of styles in stylesheet</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CSTD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cbSTDBaseInFile">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Length of STD Base as stored in a file</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CBSTDBASEINFILE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fStdStylenamesWritten">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Are built-in stylenames stored?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0001</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FSTDSTYLENAMESWRITTEN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused4_2">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Spare flags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FFFE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED4_2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="stiMaxWhenSaved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Max sti known when this file was written</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:STIMAXWHENSAVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="istdMaxFixedWhenSaved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How many fixed-index istds are there?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ISTDMAXFIXEDWHENSAVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="nVerBuiltInNamesWhenSaved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Current version of built-in stylenames</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:NVERBUILTINNAMESWHENSAVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="rgftcStandardChpStsh">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>ftc used by StandardChpStsh for this document</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:RGFTCSTANDARDCHPSTSH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:STYLESHEET</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="classid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="StyleSheet-Table">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="StyleSheet"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Table"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class StyleSheet-->
+ <!--Class Fib-->
+ <UML:Class xmi.id="Fib" name="Fib">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="withmembers"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>898</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wIdent">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>(fibh) FIBH Beginning of the FIB header magic number</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WIDENT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="nFib">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FIB version written. This will be &gt;= 101 for all Word 6.0
+ for Windows and after documents.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0002</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:NFIB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="nProduct">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>product version written by</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0004</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:NPRODUCT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>language stamp -- localized version
+ In pre-WinWord 2.0 files this value was the nLocale. If value is
+ &lt; 999, then it is the nLocale, otherwise it is the lid.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0006</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnNext">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0008</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNNEXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fDot">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Set if this document is a template</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0001</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FDOT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fGlsy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Set if this document is a glossary</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0002</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FGLSY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fComplex">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, file is in complex, fast-saved format.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0004</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCOMPLEX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fHasPic">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set if file contains 1 or more pictures</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0008</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FHASPIC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cQuickSaves">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of times file was quicksaved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00F0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CQUICKSAVES</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fEncrypted">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Set if file is encrypted</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0100</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FENCRYPTED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fWhichTblStm">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>When 0, this fib refers to the table stream named "0Table",
+ when 1, this fib refers to the table stream named "1Table".
+ Normally, a file will have only one table stream, but under unusual
+ circumstances a file may have table streams with both names. In
+ that case, this flag must be used to decide which table stream is
+ valid.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0200</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FWHICHTBLSTM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fReadOnlyRecommended">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Set when user has recommended that file be read read-only</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0400</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FREADONLYRECOMMENDED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fWriteReservation">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Set when file owner has made the file write reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>11</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0800</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FWRITERESERVATION</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fExtChar">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Set when using extended character set in file</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FEXTCHAR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fLoadOverride">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>REVIEW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FLOADOVERRIDE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fFarEast">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>REVIEW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FFAREAST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fCrypto">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>REVIEW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCRYPTO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="nFibBack">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>This file format it compatible with readers that understand
+ nFib at or above this value.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:NFIBBACK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lKey">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>File encrypted key, only valid if fEncrypted.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x000E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LKEY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="envr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>environment in which file was created
+ 0 created by Win Word
+ 1 created by Mac Word</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0012</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ENVR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fMac">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, this file was last saved in the Mac environment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FMAC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fEmptySpecial">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>02</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FEMPTYSPECIAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fLoadOverridePage">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>04</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FLOADOVERRIDEPAGE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fFutureSavedUndo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>08</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FFUTURESAVEDUNDO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fWord97Saved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FWORD97SAVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fSpare0">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FSPARE0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="chs">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Default extended character set id for text in document stream.
+ (overridden by chp.chse)
+ 0 by default characters in doc stream should be interpreted using
+ the ANSI character set used by Windows
+ 256 characters in doc stream should be interpreted using the
+ Macintosh character set.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0014</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CHS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="chsTables">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Default extended character set id for text in internal data
+ structures
+ 0 by default characters stored in internal data structures should
+ be interpreted using the ANSI character set used by Windows
+ 256 characters stored in internal data structures should be
+ interpreted using the Macintosh character set.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0016</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CHSTABLES</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcMin">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>file offset of first character of text. In non-complex
+ files a CP can be transformed into an FC by the
+ following transformation:
+ fc = cp + fib.fcMin.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0018</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCMIN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcMac">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>file offset of last character of text in document text stream +
+ 1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x001C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCMAC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="csw">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Count of fields in the array of "shorts"</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0020</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CSW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wMagicCreated">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>[Beginning of the array of shorts, rgls]
+ Unique number Identifying the File's creator 6A62 is the creator ID
+ for Word and is reserved. Other creators should choose a different
+ value.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0022</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WMAGICCREATED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wMagicRevised">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>identifies the File's last modifier</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0024</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WMAGICREVISED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wMagicCreatedPrivate">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>private data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0026</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WMAGICCREATEDPRIVATE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wMagicRevisedPrivate">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>private data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0028</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WMAGICREVISEDPRIVATE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnFbpChpFirst_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x002A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNFBPCHPFIRST_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnChpFirst_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x002C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNCHPFIRST_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cpnBteChp_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x002E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPNBTECHP_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnFbpPapFirst_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0030</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNFBPPAPFIRST_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnPapFirst_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0032</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNPAPFIRST_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cpnBtePap_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0034</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPNBTEPAP_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnFbpLvcFirst_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0036</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNFBPLVCFIRST_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnLvcFirst_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0038</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNLVCFIRST_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cpnBteLvc_W6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x003A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPNBTELVC_W6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lidFE">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Language id if document was written by Far East version of Word
+ (i.e. FIB.fFarEast is on)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x003C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LIDFE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="clw">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Number of fields in the array of longs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x003E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CLW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cbMac">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>[Beginning of the array of longs, rglw]
+ file offset of last byte written to file + 1.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0040</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CBMAC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lProductCreated">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>contains the build date of the creator. 10695 indicates the
+ creator program was compiled on Jan 6, 1995</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0044</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LPRODUCTCREATED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lProductRevised">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>contains the build date of the File's last modifier</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0048</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LPRODUCTREVISED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpText">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of main document text stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x004C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPTEXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of footnote subdocument text stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0050</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpHdd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of header subdocument text stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0054</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPHDD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpMcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of macro subdocument text stream, which should now
+ always be 0.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0058</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpAtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of annotation subdocument text stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x005C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPATN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of endnote subdocument text stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0060</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of textbox subdocument text stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0064</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ccpHdrTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of header textbox subdocument text stream.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0068</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CCPHDRTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnFbpChpFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when there was insufficient memory for Word to expand the
+ plcfbte at save time, the plcfbte is written to the file in a
+ linked list of 512-byte pieces starting with this pn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x006C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNFBPCHPFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnChpFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the page number of the lowest numbered page in the document
+ that records CHPX FKP information</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0070</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNCHPFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cpnBteChp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of CHPX FKPs recorded in file. In non-complex files if
+ the number of entries in the plcfbteChpx is less than this, the
+ plcfbteChpx is incomplete.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0074</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPNBTECHP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnFbpPapFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when there was insufficient memory for Word to expand the
+ plcfbte at save time, the plcfbte is written to the file in a
+ linked list of 512-byte pieces starting with this pn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0078</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNFBPPAPFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnPapFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the page number of the lowest numbered page in the document
+ that records PAPX FKP information</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x007C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNPAPFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cpnBtePap">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of PAPX FKPs recorded in file. In non-complex files if
+ the number of entries in the plcfbtePapx is less than this, the
+ plcfbtePapx is incomplete.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0080</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPNBTEPAP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnFbpLvcFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when there was insufficient memory for Word to expand the
+ plcfbte at save time, the plcfbte is written to the file in a
+ linked list of 512-byte pieces starting with this pn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0084</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNFBPLVCFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pnLvcFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the page number of the lowest numbered page in the document
+ that records LVC FKP information</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0088</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:PNLVCFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cpnBteLvc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of LVC FKPs recorded in file. In non-complex files if the
+ number of entries in the plcfbtePapx is less than this, the
+ plcfbtePapx is incomplete.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x008C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPNBTELVC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcIslandFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0090</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCISLANDFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcIslandLim">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0094</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCISLANDLIM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cfclcb">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Number of fields in the array of FC/LCB pairs.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0098</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CFCLCB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcStshfOrig">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>[Beginning of array of FC/LCB pairs, rgfclcb]
+ file offset of original allocation for STSH in table stream. During
+ fast save Word will attempt to reuse this allocation if STSH is
+ small enough to fit.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x009A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTSHFORIG</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbStshfOrig">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of original STSH allocation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x009E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTSHFORIG</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcStshf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset of STSH in table stream.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00A2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTSHF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbStshf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of current STSH allocation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00A6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTSHF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffndRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of footnote reference PLCF of FRD
+ structures. CPs in PLC are relative to main document text stream
+ and give location of footnote references.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00AA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFNDREF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffndRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of footnote reference PLC== 0 if no footnotes
+ defined in document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00AE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFNDREF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffndTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of footnote text PLC. CPs in PLC are
+ relative to footnote subdocument text stream and give location of
+ beginnings of footnote text for corresponding references recorded
+ in plcffndRef. No structure is stored in this plc. There will just
+ be n+1 FC entries in this PLC when there are n
+ footnotes</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00B2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFNDTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffndTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of footnote text PLC. == 0 if no footnotes
+ defined in document</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00B6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFNDTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfandRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of annotation reference ATRD PLC. The
+ CPs recorded in this PLC give the offset of annotation references
+ in the main document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00BA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFANDREF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfandRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of annotation reference PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00BE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFANDREF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfandTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of annotation text PLC. The Cps recorded
+ in this PLC give the offset of the annotation text in the
+ annotation sub document corresponding to the references stored in
+ the plcfandRef. There is a 1 to 1 correspondence between entries
+ recorded in the plcfandTxt and the plcfandRef. No structure is
+ stored in this PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00C2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFANDTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfandTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of the annotation text PLC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00C6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFANDTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfsed">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of section descriptor SED PLC. CPs in
+ PLC are relative to main document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00CA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFSED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfsed">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of section descriptor PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00CE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFSED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfpad">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00D2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFPAD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfpad">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00D6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFPAD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfphe">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PHE PLC of paragraph heights. CPs in
+ PLC are relative to main document text stream. Only written for
+ files in complex format. Should not be written by third
+ party creators of Word files.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00DA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFPHE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfphe">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of paragraph height PLC. ==0 when file is
+ non-complex.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00DE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFPHE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfglsy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of glossary string table. This table
+ consists of Pascal style strings (strings stored prefixed with a
+ length byte) concatenated one after another.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00E2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFGLSY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfglsy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of glossary string table. == 0 for non-glossary
+ documents.!=0 for glossary documents.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00E6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFGLSY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfglsy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of glossary PLC. CPs in PLC are relative
+ to main document and mark the beginnings of glossary entries and
+ are in 1-1 correspondence with entries of sttbfglsy. No structure
+ is stored in this PLC. There will be n+1 FC entries
+ in this PLC when there are n glossary entries.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00EA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFGLSY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfglsy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of glossary PLC.== 0 for non-glossary
+ documents.!=0 for glossary documents.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00EE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFGLSY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfhdd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>byte offset in table stream of header HDD PLC. CPs are relative
+ to header subdocument and mark the beginnings of individual headers
+ in the header subdocument. No structure is stored in this PLC.
+ There will be n+1FC entries in this PLC when there are
+ n headers stored for the document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00F2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFHDD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfhdd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of header PLC.
+ == 0 if document contains no headers</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00F6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFHDD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfbteChpx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of character property bin table.PLC. FCs
+ in PLC are file offsets in the main stream. Describes text of main
+ document and all subdocuments.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00FA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFBTECHPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfbteChpx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of character property bin table PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x00FE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFBTECHPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfbtePapx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of paragraph property bin table.PLC. FCs
+ in PLC are file offsets in the main stream. Describes text of main
+ document and all subdocuments.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0102</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFBTEPAPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfbtePapx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of paragraph property bin table PLC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0106</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFBTEPAPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfsea">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PLC reserved for private use. The
+ SEA is 6 bytes long.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x010A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFSEA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfsea">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of private use PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x010E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFSEA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfffn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of font information STTBF. The sttbfffn
+ is a STTBF where is string is actually an FFN structure. The
+ nth entry in the STTBF describes the font that will be
+ displayed when the chp.ftc for text is equal to n. See the
+ FFN file structure definition.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0112</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFFFN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfffn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes in sttbfffn.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0116</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFFFN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldMom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to the FLD PLC of field positions in the
+ main document. The CPs point to the beginning CP of a field, the CP
+ of field separator character inside a field and the ending CP of
+ the field. A field may be nested within another field. 20 levels of
+ field nesting are allowed.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x011A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDMOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldMom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes in plcffldMom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x011E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDMOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to the FLD PLC of field positions in the
+ header subdocument.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0122</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes in plcffldHdr</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0126</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to the FLD PLC of field positions in the
+ footnote subdocument.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x012A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes in plcffldFtn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x012E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldAtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to the FLD PLC of field positions in the
+ annotation subdocument.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0132</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDATN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldAtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes in plcffldAtn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0136</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDATN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldMcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x013A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldMcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x013E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfbkmk">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the STTBF that records bookmark names
+ in the main document</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0142</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFBKMK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfbkmk">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0146</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFBKMK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfbkf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLCF that records the beginning
+ CP offsets of bookmarks in the main document. See BKF structure
+ definition</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x014A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFBKF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfbkf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x014E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFBKF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfbkl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLCF that records the ending CP
+ offsets of bookmarks recorded in the main document. No structure is
+ stored in this PLCF.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0152</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFBKL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfbkl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0156</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFBKL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcCmds">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the macro commands. These commands
+ are private and undocumented.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x015A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCCMDS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbCmds">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undocument size of undocument structure not documented
+ above</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x015E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBCMDS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcmcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0162</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcmcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0166</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfmcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x016A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfmcr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x016E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFMCR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPrDrvr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the printer driver information (names
+ of drivers, port, etc.)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0172</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPRDRVR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPrDrvr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of the printer driver information (names of
+ drivers, port, etc.)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0176</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPRDRVR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPrEnvPort">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the print environment in portrait
+ mode.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x017A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPRENVPORT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPrEnvPort">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of the print environment in portrait mode.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x017E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPRENVPORT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPrEnvLand">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the print environment in landscape
+ mode.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0182</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPRENVLAND</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPrEnvLand">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of the print environment in landscape mode.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0186</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPRENVLAND</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcWss">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of Window Save
+ State data structure. WSS contains dimensions of
+ document's main text window and the last selection made by Word
+ user.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x018A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCWSS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbWss">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of WSS. ==0 if unable to store the window state.
+ Should not be written by third party creators of Word files.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x018E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBWSS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcDop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of document property data
+ structure.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0192</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCDOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbDop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of document properties.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0196</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBDOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfAssoc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of STTBF of associated strings. The
+ strings in this table specify document summary info and the paths
+ to special documents related to this document. See documentation of
+ the STTBFASSOC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x019A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFASSOC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfAssoc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x019E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFASSOC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcClx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of beginning of information for
+ complex files. Consists of an encoding of all of the
+ prms quoted by the document followed by the plcpcd
+ (piece table) for the document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01A2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCCLX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbClx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of complex file information == 0 if file is
+ non-complex.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01A6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBCLX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfpgdFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01AA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFPGDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfpgdFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01AE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFPGDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcAutosaveSource">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the name of the original file.
+ fcAutosaveSource and cbAutosaveSource should both be 0 if autosave
+ is off.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01B2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCAUTOSAVESOURCE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbAutosaveSource">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of the name of the original file.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01B6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBAUTOSAVESOURCE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcGrpXstAtnOwners">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of group of strings recording the names
+ of the owners of annotations stored in the document</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01BA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCGRPXSTATNOWNERS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbGrpXstAtnOwners">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of bytes of the group of strings</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01BE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBGRPXSTATNOWNERS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfAtnbkmk">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the sttbf that records names of
+ bookmarks for the annotation subdocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01C2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFATNBKMK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfAtnbkmk">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of the sttbf that records names of bookmarks
+ for the annotation subdocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01C6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFATNBKMK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcdoaMom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01CA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCDOAMOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcdoaMom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01CE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCDOAMOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcdoaHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no longer used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01D2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCDOAHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcdoaHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01D6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCDOAHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcspaMom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the FSPA PLC for main
+ document. == 0 if document has no office art objects.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01DA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCSPAMOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcspaMom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of the FSPA PLC of the main
+ document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01DE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCSPAMOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcspaHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the FSPA PLC for header
+ document. == 0 if document has no office art objects.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01E2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCSPAHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcspaHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of the FSPA PLC of the header
+ document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01E6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCSPAHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfAtnbkf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of BKF (bookmark first) PLC of the
+ annotation subdocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01EA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFATNBKF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfAtnbkf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of BKF (bookmark first) PLC of the annotation
+ subdocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01EE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFATNBKF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfAtnbkl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of BKL (bookmark last) PLC of the
+ annotation subdocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01F2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFATNBKL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfAtnbkl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of PLC marking the CP limits of the annotation
+ bookmarks. No structure is stored in this PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01F6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFATNBKL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPms">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PMS (Print Merge State) information
+ block. This contains the current state of a print merge
+ operation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01FA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPMS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPms">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of PMS. ==0 if no current print merge state.
+ Should not be written by third party creators of Word files.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x01FE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPMS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcFormFldSttbf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of form field Sttbf which contains
+ strings used in form field dropdown controls</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0202</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCFORMFLDSTTBF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbFormFldSttbf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of form field Sttbf</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0206</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBFORMFLDSTTBF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfendRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of endnote reference PLCF of FRD
+ structures. CPs in PLCF are relative to main document text stream
+ and give location of endnote references.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x020A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFENDREF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfendRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x020E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFENDREF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfendTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PlcfendRef which points to endnote
+ text in the endnote document stream which corresponds with the
+ plcfendRef. No structure is stored in this PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0212</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFENDTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfendTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0216</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFENDTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to FLD PLCF of field positions in the
+ endnote subdoc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x021A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x021E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfpgdEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>not used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0222</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFPGDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfpgdEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0226</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFPGDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcDggInfo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the office art object table data. The
+ format of office art object table data is found in a separate
+ document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x022A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCDGGINFO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbDggInfo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length in bytes of the office art object table data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x022E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBDGGINFO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfRMark">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to STTBF that records the author
+ abbreviations for authors who have made revisions in the
+ document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0232</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFRMARK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfRMark">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0236</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFRMARK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfCaption">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to STTBF that records caption titles
+ used in the document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x023A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFCAPTION</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfCaption">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x023E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFCAPTION</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfAutoCaption">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to the STTBF that records the object
+ names and indices into the caption STTBF for objects which get auto
+ captions.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0242</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFAUTOCAPTION</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfAutoCaption">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0246</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFAUTOCAPTION</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfwkb">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream to WKB PLCF that describes the
+ boundaries of contributing documents in a master document</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x024A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFWKB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfwkb">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x024E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFWKB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfspl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PLCF (of SPLS structures) that
+ records spell check state</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0252</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFSPL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfspl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0256</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFSPL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcftxbxTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PLCF that records the beginning CP in
+ the text box subdoc of the text of individual text box entries. No
+ structure is stored in this PLCF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x025A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFTXBXTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcftxbxTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x025E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFTXBXTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the FLD PLCF that records field
+ boundaries recorded in the textbox subdoc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0262</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0266</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfHdrtxbxTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PLCF that records the beginning CP in
+ the header text box subdoc of the text of individual header text
+ box entries. No structure is stored in this PLC.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x026A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFHDRTXBXTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfHdrtxbxTxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x026E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFHDRTXBXTXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcffldHdrTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the FLD PLCF that records field
+ boundaries recorded in the header textbox subdoc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0272</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFFLDHDRTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcffldHdrTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0276</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFFLDHDRTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcStwUser">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Macro User storage</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x027A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTWUSER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbStwUser">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x027E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTWUSER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbttmbd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of embedded true type font data.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0282</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBTTMBD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbttmbd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0286</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBTTMBD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcUnused">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x028A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCUNUSED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbUnused">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x028E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBUNUSED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPgdMother">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>(FCPGD, beginning of array of fcPgd / fcBkd pairs
+ rgpgdbkd).
+ offset in table stream of the PLF that records the page descriptors
+ for the main text of the doc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0292</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPGDMOTHER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPgdMother">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0296</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPGDMOTHER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcBkdMother">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLCF that records the break
+ descriptors for the main text of the doc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x029A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCBKDMOTHER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbBkdMother">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x029E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBBKDMOTHER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPgdFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLF that records the page
+ descriptors for the footnote text of the doc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02A2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPGDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPgdFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02A6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPGDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcBkdFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLCF that records the break
+ descriptors for the footnote text of the doc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02AA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCBKDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbBkdFtn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02AE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBBKDFTN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPgdEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLF that records the page
+ descriptors for the endnote text of the doc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02B2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPGDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPgdEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02B6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPGDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcBkdEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the PLCF that records the break
+ descriptors for the endnote text of the doc.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02BA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCBKDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbBkdEdn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02BE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBBKDEDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfIntlFld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of the STTBF containing field keywords.
+ This is only used in a small number of the international versions
+ of word. This field is no longer written to the file for nFib &gt;=
+ 167.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02C2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFINTLFLD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfIntlFld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Always 0 for nFib &gt;= 167.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02C6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFINTLFLD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcRouteSlip">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of a mailer routing slip.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02CA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCROUTESLIP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbRouteSlip">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02CE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBROUTESLIP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbSavedBy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of STTBF recording the names of the
+ users who have saved this document alternating with the save
+ locations.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02D2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBSAVEDBY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbSavedBy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02D6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBSAVEDBY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbFnm">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of STTBF recording filenames of
+ documents which are referenced by this document.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02DA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFNM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbFnm">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02DE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFNM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfLst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in the table stream of list format information.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02E2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFLST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfLst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02E6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFLST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlfLfo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in the table stream of list format override
+ information.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02EA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLFLFO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlfLfo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02EE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLFLFO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcftxbxBkd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in the table stream of the textbox break table (a PLCF
+ of BKDs) for the main document</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02F2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFTXBXBKD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcftxbxBkd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02F6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFTXBXBKD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcftxbxHdrBkd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in the table stream of the textbox break table (a PLCF
+ of BKDs) for the header subdocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02FA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFTXBXHDRBKD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcftxbxHdrBkd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02FE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFTXBXHDRBKD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcDocUndo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in main stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0302</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCDOCUNDO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbDocUndo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0306</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBDOCUNDO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcRgbuse">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in main stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x030A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCRGBUSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbRgbuse">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x030E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBRGBUSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcUsp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in main stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0312</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCUSP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbUsp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0316</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBUSP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcUskf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x031A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCUSKF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbUskf">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x031E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBUSKF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcupcRgbuse">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0322</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCUPCRGBUSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcupcRgbuse">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0326</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCUPCRGBUSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcupcUsp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x032A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCUPCUSP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcupcUsp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x032E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCUPCUSP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbGlsyStyle">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of string table of style names for
+ glossary entries</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0332</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBGLSYSTYLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbGlsyStyle">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0336</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBGLSYSTYLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlgosl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of undocumented grammar options PL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x033A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLGOSL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlgosl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x033E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLGOSL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcocx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of undocumented ocx data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0342</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCOCX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcocx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0346</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCOCX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfbteLvc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of character property bin table.PLC. FCs
+ in PLC are file offsets. Describes text of main document and all
+ subdocuments.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x034A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFBTELVC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfbteLvc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x034E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFBTELVC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dwLowDateTime">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>(a.k.a FILETIME ftModified)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0352</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DWLOWDATETIME</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dwHighDateTime">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0356</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DWHIGHDATETIME</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcflvc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of LVC PLCF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x035A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFLVC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcflvc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>size of LVC PLCF, ==0 for non-complex files</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x035E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFLVC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcasumy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of autosummary ASUMY PLCF.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0362</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCASUMY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcasumy">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0366</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCASUMY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfgram">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of PLCF (of SPLS structures) which
+ records grammar check state</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x036A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCPLCFGRAM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfgram">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x036E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBPLCFGRAM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbListNames">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of list names string table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0372</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBLISTNAMES</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbListNames">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0376</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBLISTNAMES</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbfUssr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>offset in table stream of undocumented undo / versioning
+ data</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x037A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSTTBFUSSR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbfUssr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x037E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCBSTTBFUSSR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="Fib-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="Fib"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class Fib-->
+ <!--Class FibRgFcLcb2000-->
+ <UML:Class xmi.id="FibRgFcLcb2000" name="FibRgFcLcb2000">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>856</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="fcPlcfTch">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>744</UML:TaggedValue.dataValue>
+ <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:fcPlcfTch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfTch">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>748</UML:TaggedValue.dataValue>
+ <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:lcbPlcfTch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcRmdThreading">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>752</UML:TaggedValue.dataValue>
+ <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:fcRmdThreading</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbRmdThreading">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>756</UML:TaggedValue.dataValue>
+ <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:lcbRmdThreading</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcMid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>760</UML:TaggedValue.dataValue>
+ <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:fcMid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbMid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>764</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="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:lcbMid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSttbRgtplc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>768</UML:TaggedValue.dataValue>
+ <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:fcSttbRgtplc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbSttbRgtplc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>772</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="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:lcbSttbRgtplc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcMsoEnvelope">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>776</UML:TaggedValue.dataValue>
+ <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:fcMsoEnvelope</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="flcbMsoEnvelope">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>780</UML:TaggedValue.dataValue>
+ <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:flcbMsoEnvelope</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfLad">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>784</UML:TaggedValue.dataValue>
+ <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:fcPlcfLad</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfLad">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>788</UML:TaggedValue.dataValue>
+ <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:lcbPlcfLad</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcRgDofr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>792</UML:TaggedValue.dataValue>
+ <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:fcRgDofr</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbRgDofr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>796</UML:TaggedValue.dataValue>
+ <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:lcbRgDofr</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcosl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>800</UML:TaggedValue.dataValue>
+ <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:fcPlcosl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcosl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>804</UML:TaggedValue.dataValue>
+ <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:lcbPlcosl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPlcfCookieOld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>808</UML:TaggedValue.dataValue>
+ <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:fcPlcfCookieOld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPlcfCookieOld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>812</UML:TaggedValue.dataValue>
+ <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:lcbPlcfCookieOld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPgdMotherOld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>816</UML:TaggedValue.dataValue>
+ <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:fcPgdMotherOld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="flcbPgdMotherOld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>820</UML:TaggedValue.dataValue>
+ <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:flcbPgdMotherOld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPgdFtnOld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>824</UML:TaggedValue.dataValue>
+ <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:fcPgdFtnOld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPgdFtnOld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>828</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="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:lcbPgdFtnOld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcBkdFtnOld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>832</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="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:fcBkdFtnOld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbBkdFtnOld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>836</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="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:lcbBkdFtnOld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPgdEdnOld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>840</UML:TaggedValue.dataValue>
+ <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:fcPgdEdnOld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbPgdEdnOld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>844</UML:TaggedValue.dataValue>
+ <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:lcbPgdEdnOld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcBkdEdnOld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>848</UML:TaggedValue.dataValue>
+ <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:fcBkdEdnOld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcbBkdEdnOld">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>852</UML:TaggedValue.dataValue>
+ <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:lcbBkdEdnOld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FibRgFcLcb2000-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FibRgFcLcb2000"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class FibRgFcLcb2000-->
+ <!--Class BKD-->
+ <UML:Class xmi.id="BKD" name="BKD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ibkl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>index to BKL entry in plcfbkl that describes the
+ ending position of this bookmark in the CP stream.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:IBKL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="itcFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when bkf.fCol is 1, this is the index to the first column of a
+ table column bookmark.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>007F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ITCFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fPub">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, this indicates that this bookmark is marking the range
+ of a Macintosh Publisher section.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0080</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FPUB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="itcLim">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when bkf.fCol is 1, this is the index to limit column of a
+ table column bookmark.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7F00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ITCLIM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fCol">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, this bookmark marks a range of columns in a table
+ specified by [bkf.itcFirst, bkf.itcLim).</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCOL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="BKD-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="BKD"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class BKD-->
+ <!--Class SED-->
+ <UML:Class xmi.id="SED" name="SED">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="needsdocument"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>used internally by Word</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcSepx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>file offset in main stream to beginning of SEPX stored for
+ section. If sed.fcSepx == 0xFFFFFFFF, the section properties for
+ the section are equal to the standard SEP (see SEP
+ definition).</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCSEPX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fnMpr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>used internally by Word</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FNMPR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcMpr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>points to offset in FC space of main stream where the Macintosh
+ Print Record for a document created on a Mac will be stored</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCMPR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="sepx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sed</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="SEPX"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="SED-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="SED"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class SED-->
+ <!--Class SHD-->
+ <UML:Class xmi.id="SHD" name="SHD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="icoFore">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>foreground color (see chp.ico)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>001F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ICOFORE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="icoBack">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>background color (see chp.ico)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>03E0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ICOBACK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ipat">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>shading pattern (see ipat table below)
+ 0 Automatic
+ 1 Solid
+ 2 5 Percent
+ 3 10 Percent
+ 4 20 Percent
+ 5 25 Percent
+ 6 30 Percent
+ 7 40 Percent
+ 8 50 Percent
+ 9 60 Percent
+ 10 70 Percent
+ 11 75 Percent
+ 12 80 Percent
+ 13 90 Percent
+ 14 Dark Horizontal
+ 15 Dark Vertical
+ 16 Dark Forward Diagonal
+ 17 Dark Backward Diagonal
+ 18 Dark Cross
+ 19 Dark Diagonal Cross
+ 20 Horizontal
+ 21 Vertical
+ 22 Forward Diagonal
+ 23 Backward Diagonal
+ 24 Cross
+ 25 Diagonal Cross
+ 35 2.5 Percent
+ 36 7.5 Percent
+ 37 12.5 Percent
+ 38 15 Percent
+ 39 17.5 Percent
+ 40 22.5 Percent
+ 41 27.5 Percent
+ 42 32.5 Percent
+ 43 35 Percent
+ 44 37.5 Percent
+ 45 42.5 Percent
+ 46 45 Percent
+ 47 47.5 Percent
+ 48 52.5 Percent
+ 49 55 Percent
+ 50 57.5 Percent
+ 51 62.5 Percent
+ 52 65 Percent
+ 53 67.5 Percent
+ 54 72.5 Percent
+ 55 77.5 Percent
+ 56 82.5 Percent
+ 57 85 Percent
+ 58 87.5 Percent
+ 59 92.5 Percent
+ 60 95 Percent
+ 61 97.5 Percent
+ 62 97 Percent</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FC00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:IPAT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="SHD-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="SHD"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class SHD-->
+ <!--Class CellShd-->
+ <UML:Class xmi.id="CellShd" name="CellShd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shdForeColor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>foreground color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:SHDFORECOLOR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shdBackColor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>background color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:SHDBACKCOLOR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shdPattern">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>pattern</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:SHDPATTERN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="cellShd-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="CellShd"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class CellShd-->
+ <!--Class BRC-->
+ <UML:Class xmi.id="BRC" name="BRC">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dptLineWidth">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>width of a single line in 1/8 pt, max of 32 pt.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00FF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DPTLINEWIDTH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcType">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>border type code:
+ 0 none
+ 1 single
+ 2 thick
+ 3 double
+ 5 hairline
+ 6 dot
+ 7 dash large gap
+ 8 dot dash
+ 9 dot dot dash
+ 10 triple
+ 11 thin-thick small gap
+ 12 thick-thin small gap
+ 13 thin-thick-thin small gap
+ 14 thin-thick medium gap
+ 15 thick-thin medium gap
+ 16 thin-thick-thin medium gap
+ 17 thin-thick large gap
+ 18 thick-thin large gap
+ 19 thin-thick-thin large gap
+ 20 wave
+ 21 double wave
+ 22 dash small gap
+ 23 dash dot stroked
+ 24 emboss 3D
+ 25 engrave 3D
+ codes 64 - 230 represent border art types and are used only for
+ page borders.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FF00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCTYPE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ico">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>color code (see chp.ico)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>00FF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ICO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dptSpace">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>width of space to maintain between border and text within
+ border. Must be 0 when BRC is a substructure of TC. Stored in
+ points.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1F00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DPTSPACE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fShadow">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, border is drawn with shadow. Must be 0 when BRC is a
+ substructure of the TC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FSHADOW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fFrame">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FFRAME</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused2_15">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED2_15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="BRC-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="BRC"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class BRC-->
+ <!--Class TC-->
+ <UML:Class xmi.id="TC" name="TC">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fFirstMerged">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set to 1 when cell is first cell of a range of cells that have
+ been merged. When a cell is merged, the display areas of the merged
+ cells are consolidated and the text within the cells is interpreted
+ as belonging to one text stream for purposes of calculating line
+ breaks.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0001</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FFIRSTMERGED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fMerged">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set to 1 when cell has been merged with preceding cell.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0002</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FMERGED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fVertical">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set to 1 when cell has vertical text flow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0004</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FVERTICAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fBackward">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>for a vertical table cell, text flow is bottom to top when 1
+ and is bottom to top when 0.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0008</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FBACKWARD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fRotateFont">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set to 1 when cell has rotated characters (i.e. uses
+ @font)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0010</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FROTATEFONT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fVertMerge">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set to 1 when cell is vertically merged with the cell(s) above
+ and/or below. When cells are vertically merged, the display area of
+ the merged cells are consolidated. The consolidated area is used to
+ display the contents of the first vertically merged cell (the cell
+ with fVertRestart set to 1), and all other vertically merged cells
+ (those with fVertRestart set to 0) must be empty. Cells can only be
+ merged vertically if their left and right boundaries are (nearly)
+ identical (i.e. if corresponding entries in rgdxaCenter of the
+ table rows differ by at most 3).</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0020</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FVERTMERGE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fVertRestart">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>set to 1 when the cell is the first of a set of vertically
+ merged cells. The contents of a cell with fVertStart set to 1 are
+ displayed in the consolidated area belonging to the entire set of
+ vertically merged cells. Vertically merged cells with fVertRestart
+ set to 0 must be empty.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0040</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FVERTRESTART</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="vertAlign">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specifies the alignment of the cell contents relative to text
+ flow (e.g. in a cell with bottom to top text flow and bottom
+ vertical alignment, the text is shifted horizontally to match the
+ cell's right boundary):
+ 0 top
+ 1 center
+ 2 bottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0180</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:VERTALIGN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fUnused">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FE00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FUNUSED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="CellPreferredSize">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>preferred size of cell</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CellPrefferedSize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>BRC[cbrcTc] rgbrc: notational convenience for referring to
+ brcTop, brcLeft, etc. fields.
+ specification of the top border of a table cell</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCTOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification of left border of table row</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification of bottom border of table row</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCBOTTOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification of right border of table row.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCRIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="TC-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="TC"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class TC-->
+ <!--Class BKF-->
+ <UML:Class name="BKF" xmi.id="BKF">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ibkl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>index to BKL entry in plcfbkl that describes the
+ ending position of this bookmark in the CP stream.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:IBKL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="itcFirst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when bkf.fCol is 1, this is the index to the first column of a
+ table column bookmark.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>007F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ITCFIRST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fPub">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, this indicates that this bookmark is marking the range
+ of a Macintosh Publisher section.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0080</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FPUB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="itcLim">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when bkf.fCol is 1, this is the index to limit column of a
+ table column bookmark.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7F00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ITCLIM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fCol">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when 1, this bookmark marks a range of columns in a table
+ specified by [bkf.itcFirst, bkf.itcLim).</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FCOL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="BKF-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="BKF"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class BKF-->
+ <!--Class LineProps-->
+ <UML:Class name="LineProps" xmi.id="LineProps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linecolor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>color of line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINECOLOR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linewidth">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>width of line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEWIDTH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linetype">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>type of line, see border type code (BRC)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINETYPE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="LineProps-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="LineProps"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class LineProps-->
+ <!--Class TBD-->
+ <UML:Class xmi.id="TBD" name="TBD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="jc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>justification code
+ 0 left tab
+ 1 centered tab
+ 2 right tab
+ 3 decimal tab
+ 4 bar</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>07</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:JC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="tlc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>tab leader code
+ 0 no leader
+ 1 dotted leader
+ 2 hyphenated leader
+ 3 single line leader
+ 4 heavy line leader</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>38</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:TLC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused0_6">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>C0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED0_6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="TBD-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="TBD"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class TBD-->
+ <!--Class METAFILEPICT-->
+ <UML:Class xmi.id="METAFILEPICT" name="METAFILEPICT">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="mm">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Specifies the mapping mode in which the picture is drawn. </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:MM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="xExt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Specifies the size of the metafile picture for all modes except
+ the MM_ISOTROPIC and MM_ANISOTROPIC modes. (For more information
+ about these modes, see the yExt member.) The x-extent specifies the
+ width of the rectangle within which the picture is drawn. The
+ coordinates are in units that correspond to the mapping mode.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XEXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="yExt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Specifies the size of the metafile picture for all modes except
+ the MM_ISOTROPIC and MM_ANISOTROPIC modes. The y-extent specifies
+ the height of the rectangle within which the picture is drawn. The
+ coordinates are in units that correspond to the mapping mode.
+ For MM_ISOTROPIC and MM_ANISOTROPIC modes, which can be scaled,
+ the xExt and yExt members contain an optional suggested size in
+ MM_HIMETRIC units.
+ For MM_ANISOTROPIC pictures, xExt and yExt can be zero when no
+ suggested size is supplied. For MM_ISOTROPIC pictures, an aspect
+ ratio must be supplied even when no suggested size is given. (If a
+ suggested size is given, the aspect ratio is implied by the size.)
+ To give an aspect ratio without implying a suggested size, set xExt
+ and yExt to negative values whose ratio is the appropriate aspect
+ ratio. The magnitude of the negative xExt and yExt values is
+ ignored; only the ratio is used.
+ </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:YEXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="hMF">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Identifies a memory metafile.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:HMF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="METAFILEPICT-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="METAFILEPICT"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class METAFILEPICT-->
+ <!--Class FFDATA-->
+ <UML:Class xmi.id="FFDATA" name="FFDATA">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unknown">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unkonwn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dropdownIndex">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unkonwn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xfc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dropdownIndex</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fTooltip">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>tool tip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:tooltip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fNomark">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>no mark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:nomark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fUseSize">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>use size</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:useSize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fNumersOnly">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>numbers only</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:numbersOnly</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fDateOnly">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>date only</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dateOnly</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fUnused">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xe0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="size">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>size</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:size</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="hpsCheckbox">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:hpsCheckbox</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="title">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>title of the field</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xa</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fftitle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="String"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="FLT">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FLT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="default">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ffdefault</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="checked">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ffchecked</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U16"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="formatting">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ffformatting</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="help">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ffhelp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="tooltip">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fftooltip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FFDATA-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FFDATA"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class FFDATA-->
+ <!--Class PICF-->
+ <UML:Class xmi.id="PICF" name="PICF">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lcb">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>number of bytes in the PIC structure plus size of following
+ picture data which may be a Window's metafile, a bitmap, or the
+ filename of a TIFF file. In the case of a Macintosh PICT picture,
+ this includes the size of the PIC, the standard "x" metafile, and
+ the Macintosh PICT data. See Appendix B for more information.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LCB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cbHeader">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>number of bytes in the PIC (to allow for future
+ expansion).</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CBHEADER</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="mfp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>If a Windows metafile is stored immediately following the PIC
+ structure, the mfp is a Window's METAFILEPICT structure. When the
+ data immediately following the PIC is a TIFF filename, mfp.mm == 98
+ If a bitmap is stored after the pic, mfp.mm == 99
+ When the PIC describes a bitmap, mfp.xExt is the width of the
+ bitmap in pixels and mfp.yExt is the height of the bitmap in
+ pixels..
+ </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:MFP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="METAFILEPICT"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="bm_rcWinMF">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Window's bitmap structure when PIC describes a BITMAP (14
+ bytes).
+ Rect for window origin and extents when metafile is stored --
+ ignored if 0 (8 bytes).</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BM_RCWINMF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dxaGoal">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>horizontal measurement in twips of the rectangle the picture
+ should be imaged within. when scaling bitmaps, dxaGoal and dyaGoal
+ may be ignored if the operation would cause the bitmap to shrink or
+ grow by a non -power-of-two factor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DXAGOAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dyaGoal">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>vertical measurement in twips of the rectangle the picture
+ should be imaged within.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DYAGOAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="mx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>horizontal scaling factor supplied by user expressed in .001%
+ units.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:MX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="my">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>vertical scaling factor supplied by user expressed in .001%
+ units.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x22</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:MY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dxaCropLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the amount the picture has been cropped on the left in twips.
+ for all of the Crop values, a positive measurement means the
+ specified border has been moved inward from its original setting
+ and a negative measurement means the border has been moved outward
+ from its original setting.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x24</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DXACROPLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dyaCropTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the amount the picture has been cropped on the top in
+ twips.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x26</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DYACROPTOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dxaCropRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the amount the picture has been cropped on the right in
+ twips.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x28</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DXACROPRIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dyaCropBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the amount the picture has been cropped on the bottom in
+ twips.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DYACROPBOTTOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Obsolete, superseded by brcTop, etc. In WinWord 1.x, it was the
+ type of border to place around picture
+ 0 single
+ 1 thick
+ 2 double
+ 3 shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>000F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fFrameEmpty">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>picture consists of a single frame</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0010</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FFRAMEEMPTY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fBitmap">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>==1, when picture is just a bitmap</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0020</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FBITMAP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fDrawHatch">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>==1, when picture is an active OLE object</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0040</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FDRAWHATCH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fError">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>==1, when picture is just an error message</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0080</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FERROR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="bpp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>bits per pixel
+ 0 unknown
+ 1 monochrome
+ 4 VGA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FF00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BPP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification for border above picture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCTOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification for border to the left of picture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification for border below picture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x36</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCBOTTOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>specification for border to the right of picture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCRIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dxaOrigin">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>horizontal offset of hand annotation origin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DXAORIGIN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dyaOrigin">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>vertical offset of hand annotation origin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x40</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DYAORIGIN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cProps">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x42</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CPROPS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="DffRecord">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:DffRecord</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="DffRecord"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="noresolve"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="ffdata">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ffdata</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="FFDATA"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="noresolve"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="PICF-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="PICF"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class PICF-->
+ <!--Class FSPA-->
+ <UML:Class xmi.id="FSPA" name="FSPA">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>26</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="spid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape Identifier. Used in conjunction with the office art data
+ (found via fcDggInfo in the FIB) to find the actual
+ data for this shape.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:SPID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="xaLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>xa left of rectangle enclosing shape relative to the origin of
+ the shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XALEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="yaTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>ya top of rectangle enclosing shape relative to the origin of
+ the shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:YATOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="xaRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>xa right of rectangle enclosing shape relative to the origin of
+ the shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:XARIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="yaBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>ya bottom of the rectangle enclosing shape relative to the
+ origin of the shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:YABOTTOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fHdr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1 in the undo doc when shape is from the header doc, 0
+ otherwise (undefined when not in the undo doc)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0001</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FHDR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="bx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>x position of shape relative to anchor CP
+ 0 relative to page margin
+ 1 relative to top of page
+ 2 relative to text (column for horizontal text; paragraph for
+ vertical text)
+ 3 reserved for future use</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0006</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="by">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>y position of shape relative to anchor CP
+ 0 relative to page margin
+ 1 relative to top of page
+ 2 relative to text (paragraph for horizontal text; column for
+ vertical text)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0018</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wr">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>text wrapping mode
+ 0 like 2, but doesn't require absolute object
+ 1 no text next to shape
+ 2 wrap around absolute object
+ 3 wrap as if no object present
+ 4 wrap tightly around object
+ 5 wrap tightly, but allow holes
+ 6-15 reserved for future use</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>01E0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wrk">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>text wrapping mode type (valid only for wrapping modes 2 and
+ 4
+ 0 wrap both sides
+ 1 wrap only on left
+ 2 wrap only on right
+ 3 wrap only on largest side</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1E00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:WRK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fRcaSimple">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when set, temporarily overrides bx, by, forcing the xaLeft,
+ xaRight, yaTop, and yaBottom fields to all be page relative.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>13</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FRCASIMPLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fBelowText">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1 shape is below text
+ 0 shape is above text</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FBELOWTEXT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fAnchorLock">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1 anchor is locked
+ 0 anchor is not locked</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FANCHORLOCK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>count of textboxes in shape (undo doc only)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="shape">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="DffRecord"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FSPA-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FSPA"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class FSPA-->
+ <!--Class FLD-->
+ <UML:Class xmi.id="FLD" name="FLD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ch">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>type of field boundary the FLD describes:
+ 19 field begin mark
+ 20 field separator mark
+ 21 field end mark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused0_5">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>E0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED0_5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="flt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>fld.ch == 19 (field begin mark) -&gt; U8 field type (see flt
+ table below).
+ fld.ch == 20 (field separator mark) -&gt; not present
+ fld.ch == 21 (field end mark) -&gt;
+ fDiffer:1 - ignored for saved file
+ fZombieEmbed:1 - 1 when result still believes this field is an
+ EMBED or LINK field.
+ fResultDirty:1 - when user has edited or formatted the result. ==
+ 0 otherwise.
+ fResultEdited:1 - 1 when user has inserted text into or deleted
+ text from the result.
+ fLocked:1 - 1 when field is locked from recalc.
+ fPrivateResult:1 - 1 whenever the result of the field is never to
+ be shown.
+ fNested:1 - 1 when field is nested within another field.
+ fHasSep:1 - 1 when field has a field separator.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FLT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FLD-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FLD"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class FLD-->
+ <!--Class Rectangle-->
+ <UML:Class xmi.id="Rectangle" name="Rectangle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="left">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>left margin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="top">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>top margin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="right">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>right margin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="bottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>bottom margin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="Rectangle-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="Rectangle"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class Rectangle-->
+ <!--Class FOPTE-->
+ <UML:Class xmi.id="FOPTE" name="FOPTE">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="withindex"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Property ID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3fff</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shppid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fBid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>value is a blip ID u2013 only valid if fComplex is FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfBid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fComplex">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>complex property, value is length</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfComplex</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="op">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="name">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpname</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="value">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpvalue</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="Value"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="stringValue">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpstringvalue</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="Value"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="noresolve"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FOPTE-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FOPTE"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class FOPTE-->
+ <!--Class FDGG-->
+ <UML:Class xmi.id="FDGG" name="FDGG">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="spidMax">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The current maximum shape ID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpspidMax</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cidcl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The number of ID clusters (FIDCLs)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpcidcl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cspSaved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The total number of shapes saved (including deleted shapes, if undo information was saved)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpcspSaved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cdgSaved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The total number of drawings saved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpcdgSaved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FDGG-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FDGG"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class FDGG-->
+ <!--Class FIDCL-->
+ <UML:Class xmi.id="FIDCL" name="FIDCL">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="dgid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>DG owning the SPIDs in this cluster</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpdgid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cspidCur">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>number of SPIDs used so far</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpcspidCur</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FIDCL-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FIDCL"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class FIDCL-->
+ <!--Class FBSE-->
+ <UML:Class xmi.id="FBSE" name="FBSE">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x24</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="btWin32">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Required type on Win32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpbtWin32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="btMacOS">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Required type on Mac</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpbtMacOS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="rgbUid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Identifier of blip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shprgbUid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="arraycount"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="tag">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>currently unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shptag</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="size">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip size in stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpsize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cRef">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Reference count on the blip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x18</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpcRef</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="foDelay">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>File offset in the delay stream</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfoDelay</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="usage">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How this blip is used (MSOBLIPUSAGE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpusage</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cbName">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>length of the blip name</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x21</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpcbName</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused2">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>for the future</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x22</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpunused2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused3">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>for the future</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x23</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpunused3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FBSE-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FBSE"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class FBSE-->
+ <!--Class FRD-->
+ <UML:Class xmi.id="FRD" name="FRD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FRD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FRD-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FRD"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class FRD-->
+ <!--Class ATRD-->
+ <UML:Class xmi.id="ATRD" name="ATRD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>28</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ibst">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>index into GrpXstAtnOwners</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:IBST</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ak">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0003</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:AK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unused22_2">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FFFC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>:14</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:UNUSED22_2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="grfbmc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unused</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x18</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:GRFBMC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lTagBkmk">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when not -1, this tag identifies the annotation bookmark that
+ locates the range of CPs in the main document which this annotation
+ references.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LTAGBKMK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="xstUsrInitl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:xstUsrInitl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>pascal-style string holding initials of annotation author</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="ATRD-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="ATRD"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class ATRD-->
+ <!--Class FTXBXS-->
+ <UML:Class xmi.id="FTXBXS" name="FTXBXS">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>22</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cTxbx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when not fReusable, counts the number of textboxes in this
+ story chain</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CTXBX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="iNextReuse">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>when fReusable, the index of the next in the linked list of
+ reusable FTXBXSs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:INEXTREUSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="cReusable">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>if fReusable, counts the number of reusable FTXBXSs follow this
+ one in the linked list</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CREUSABLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fReusable">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>this FTXBXS is not currently in use</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FREUSABLE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="reserved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xA</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:RESERVED</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape Identifier (see FSPA) for first Office Shape in textbox
+ chain.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="txidUndo">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:TXIDUNDO</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="S32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FTXBXS-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FTXBXS"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class FTXBXS-->
+ <!--Class FDG-->
+ <UML:Class xmi.id="FDG" name="FDG">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="csp">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The number of shapes in this drawing</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:csp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="spidCur">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The last MSOSPID given to an SP in this DG</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:spidCur</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FDG-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FDG"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class FDG-->
+ <!--Class Tplc-->
+ <UML:Class xmi.id="Tplc" name="Tplc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fBuildIn">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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>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:fBuildIn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="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="ilgbdM1">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <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>0x7fff</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ilgbdM1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:lid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="Tplc-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="Tplc"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--Class Tplc-->
+ <!--WW8 resources-->
+ <!--SPRMS-->
+ <!--SPRM sprmPContextualSpacing-->
+ <UML:Class xmi.id="sprmPContextualSpacing" name="sprmPContextualSpacing">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x246D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPIContextualSpacing</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPContextualSpacing-->
+ <!--SPRM sprmPIstdPermute-->
+ <UML:Class xmi.id="sprmPIstdPermute" name="sprmPIstdPermute">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC601</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPIstdPermute</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPIstdPermute-->
+ <!--SPRM sprmPTabProps-->
+ <UML:Class xmi.id="sprmPTabProps" name="sprmPTabProps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x646B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPTabProps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPTabProps-->
+ <!--SPRM sprmTFCantSplit90-->
+ <UML:Class xmi.id="sprmTFCantSplit90" name="sprmTFCantSplit90">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3466</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTFCantSplit90</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTFCantSplit90-->
+ <!--SPRM sprmTCantSplit-->
+ <UML:Class xmi.id="sprmTCantSplit" name="sprmTCantSplit">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3644</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCantSplit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTCantSplit-->
+ <!--SPRM sprmPIncLvl-->
+ <UML:Class xmi.id="sprmPIncLvl" name="sprmPIncLvl">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2602</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPIncLvl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPIncLvl-->
+ <!--SPRM sprmPJcExtra-->
+ <UML:Class xmi.id="sprmPJcExtra" name="sprmPJcExtra">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2461</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPJcExtra</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPJcExtra-->
+ <!--SPRM sprmPJc-->
+ <UML:Class xmi.id="sprmPJc" name="sprmPJc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2403</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPJc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPJc-->
+ <!--SPRM sprmPFSideBySide-->
+ <UML:Class xmi.id="sprmPFSideBySide" name="sprmPFSideBySide">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2404</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFSideBySide</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFSideBySide-->
+ <!--SPRM sprmPFKeep-->
+ <UML:Class xmi.id="sprmPFKeep" name="sprmPFKeep">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2405</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFKeep</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFKeep-->
+ <!--SPRM sprmPFKeepFollow-->
+ <UML:Class xmi.id="sprmPFKeepFollow" name="sprmPFKeepFollow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2406</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFKeepFollow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFKeepFollow-->
+ <!--SPRM sprmPFPageBreakBefore-->
+ <UML:Class xmi.id="sprmPFPageBreakBefore" name="sprmPFPageBreakBefore">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2407</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFPageBreakBefore</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFPageBreakBefore-->
+ <!--SPRM sprmPBrcl-->
+ <UML:Class xmi.id="sprmPBrcl" name="sprmPBrcl">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2408</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPBrcl-->
+ <!--SPRM sprmPBrcp-->
+ <UML:Class xmi.id="sprmPBrcp" name="sprmPBrcp">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2409</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPBrcp-->
+ <!--SPRM sprmPIlvl-->
+ <UML:Class xmi.id="sprmPIlvl" name="sprmPIlvl">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x260A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPIlvl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPIlvl-->
+ <!--SPRM sprmPIlfo-->
+ <UML:Class xmi.id="sprmPIlfo" name="sprmPIlfo">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x460B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPIlfo</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPIlfo-->
+ <!--SPRM sprmPFNoLineNumb-->
+ <UML:Class xmi.id="sprmPFNoLineNumb" name="sprmPFNoLineNumb">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x240C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFNoLineNumb</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFNoLineNumb-->
+ <!--SPRM sprmPChgTabsPapx-->
+ <UML:Class xmi.id="sprmPChgTabsPapx" name="sprmPChgTabsPapx">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nopayloadoffset"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC60D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPChgTabsPapx</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="dxaDel">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dxaDel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>array of tab positions for which tabs should be deleted</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="S16"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="dxaAdd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:dxaAdd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>array of tab positions for which tabs should be added</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="S16"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="tbdAdd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:tbdAdd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>array of tab descriptors corresponding to rgdxaAdd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="TBD"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPChgTabsPapx-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPChgTabsPapx"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmPChgTabsPapx-->
+ <!--SPRM sprmPDxaRight-->
+ <UML:Class xmi.id="sprmPDxaRight" name="sprmPDxaRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x840E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDxaRight-->
+ <!--SPRM sprmPDxaLeft-->
+ <UML:Class xmi.id="sprmPDxaLeft" name="sprmPDxaLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x840F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDxaLeft-->
+ <!--SPRM sprmPNest-->
+ <UML:Class xmi.id="sprmPNest" name="sprmPNest">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4610</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPNest</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPNest-->
+ <!--SPRM sprmPDxaLeft180-->
+ <UML:Class xmi.id="sprmPDxaLeft180" name="sprmPDxaLeft180">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8411</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaLeft1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDxaLeft180-->
+ <!--SPRM sprmPDyaLine-->
+ <UML:Class xmi.id="sprmPDyaLine" name="sprmPDyaLine">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6412</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDyaLine</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDyaLine-->
+ <!--SPRM sprmPDyaBefore-->
+ <UML:Class xmi.id="sprmPDyaBefore" name="sprmPDyaBefore">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xA413</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDyaBefore</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDyaBefore-->
+ <!--SPRM sprmPDyaAfter-->
+ <UML:Class xmi.id="sprmPDyaAfter" name="sprmPDyaAfter">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xA414</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDyaAfter</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDyaAfter-->
+ <!--SPRM sprmPChgTabs-->
+ <UML:Class xmi.id="sprmPChgTabs" name="sprmPChgTabs">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC615</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPChgTabs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPChgTabs-->
+ <!--SPRM sprmPFInTable-->
+ <UML:Class xmi.id="sprmPFInTable" name="sprmPFInTable">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2416</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFInTable</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFInTable-->
+ <!--SPRM sprmPCell-->
+ <UML:Class xmi.id="sprmPCell" name="sprmPCell">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x244b</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPCell</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPCell-->
+ <!--SPRM sprmPRow-->
+ <UML:Class xmi.id="sprmPRow" name="sprmPRow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x244c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPRow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPRow-->
+ <!--SPRM sprmPFTtp-->
+ <UML:Class xmi.id="sprmPFTtp" name="sprmPFTtp">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2417</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFTtp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFTtp-->
+ <!--SPRM sprmPDxaAbs-->
+ <UML:Class xmi.id="sprmPDxaAbs" name="sprmPDxaAbs">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8418</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaAbs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDxaAbs-->
+ <!--SPRM sprmPDyaAbs-->
+ <UML:Class xmi.id="sprmPDyaAbs" name="sprmPDyaAbs">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8419</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDyaAbs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDyaAbs-->
+ <!--SPRM sprmPDxaWidth-->
+ <UML:Class xmi.id="sprmPDxaWidth" name="sprmPDxaWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x841A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDxaWidth-->
+ <!--SPRM sprmPPc-->
+ <UML:Class xmi.id="sprmPPc" name="sprmPPc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x261B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPPc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPPc-->
+ <!--SPRM sprmPBrcTop10-->
+ <UML:Class xmi.id="sprmPBrcTop10" name="sprmPBrcTop10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x461C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcTop10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPBrcTop10-->
+ <!--SPRM sprmPBrcLeft10-->
+ <UML:Class xmi.id="sprmPBrcLeft10" name="sprmPBrcLeft10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x461D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcLeft10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPBrcLeft10-->
+ <!--SPRM sprmPBrcBottom10-->
+ <UML:Class xmi.id="sprmPBrcBottom10" name="sprmPBrcBottom10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x461E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcBottom10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPBrcBottom10-->
+ <!--SPRM sprmPBrcRight10-->
+ <UML:Class xmi.id="sprmPBrcRight10" name="sprmPBrcRight10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x461F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcRight10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPBrcRight10-->
+ <!--SPRM sprmPBrcBetween10-->
+ <UML:Class xmi.id="sprmPBrcBetween10" name="sprmPBrcBetween10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4620</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcBetween10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPBrcBetween10-->
+ <!--SPRM sprmPBrcBar10-->
+ <UML:Class xmi.id="sprmPBrcBar10" name="sprmPBrcBar10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4621</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcBar10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPBrcBar10-->
+ <!--SPRM sprmPDxaFromText10-->
+ <UML:Class xmi.id="sprmPDxaFromText10" name="sprmPDxaFromText10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4622</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaFromText10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDxaFromText10-->
+ <!--SPRM sprmPWr-->
+ <UML:Class xmi.id="sprmPWr" name="sprmPWr">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2423</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPWr</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPWr-->
+ <!--SPRM sprmPBrcBar-->
+ <UML:Class xmi.id="sprmPBrcBar" name="sprmPBrcBar">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6629</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcBar</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBrcBar-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBrcBar"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmPBrcBar-->
+ <!--SPRM sprmPFNoAutoHyph-->
+ <UML:Class xmi.id="sprmPFNoAutoHyph" name="sprmPFNoAutoHyph">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x242A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFNoAutoHyph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFNoAutoHyph-->
+ <!--SPRM sprmPWHeightAbs-->
+ <UML:Class xmi.id="sprmPWHeightAbs" name="sprmPWHeightAbs">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x442B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPWHeightAbs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPWHeightAbs-->
+ <!--SPRM sprmPDcs-->
+ <UML:Class xmi.id="sprmPDcs" name="sprmPDcs">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x442C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDcs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDcs-->
+ <!--SPRM sprmPShd-->
+ <UML:Class xmi.id="sprmPShd" name="sprmPShd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x442D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPShd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPShd-->
+ <!--SPRM sprmPDyaFromText-->
+ <UML:Class xmi.id="sprmPDyaFromText" name="sprmPDyaFromText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x842E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDyaFromText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDyaFromText-->
+ <!--SPRM sprmPDxaFromText-->
+ <UML:Class xmi.id="sprmPDxaFromText" name="sprmPDxaFromText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x842F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaFromText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDxaFromText-->
+ <!--SPRM sprmPFLocked-->
+ <UML:Class xmi.id="sprmPFLocked" name="sprmPFLocked">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2430</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFLocked</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFLocked-->
+ <!--SPRM sprmPFWidowControl-->
+ <UML:Class xmi.id="sprmPFWidowControl" name="sprmPFWidowControl">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2431</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFWidowControl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFWidowControl-->
+ <!--SPRM sprmPRuler-->
+ <UML:Class xmi.id="sprmPRuler" name="sprmPRuler">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC632</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPRuler</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPRuler-->
+ <!--SPRM sprmPFKinsoku-->
+ <UML:Class xmi.id="sprmPFKinsoku" name="sprmPFKinsoku">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2433</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFKinsoku</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFKinsoku-->
+ <!--SPRM sprmPFWordWrap-->
+ <UML:Class xmi.id="sprmPFWordWrap" name="sprmPFWordWrap">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2434</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFWordWrap</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFWordWrap-->
+ <!--SPRM sprmPFOverflowPunct-->
+ <UML:Class xmi.id="sprmPFOverflowPunct" name="sprmPFOverflowPunct">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2435</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFOverflowPunct</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFOverflowPunct-->
+ <!--SPRM sprmPFTopLinePunct-->
+ <UML:Class xmi.id="sprmPFTopLinePunct" name="sprmPFTopLinePunct">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2436</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFTopLinePunct</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFTopLinePunct-->
+ <!--SPRM sprmPFAutoSpaceDE-->
+ <UML:Class xmi.id="sprmPFAutoSpaceDE" name="sprmPFAutoSpaceDE">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2437</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFAutoSpaceDE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFAutoSpaceDE-->
+ <!--SPRM sprmPFAutoSpaceDN-->
+ <UML:Class xmi.id="sprmPFAutoSpaceDN" name="sprmPFAutoSpaceDN">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2438</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFAutoSpaceDN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFAutoSpaceDN-->
+ <!--SPRM sprmPWAlignFont-->
+ <UML:Class xmi.id="sprmPWAlignFont" name="sprmPWAlignFont">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4439</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPWAlignFont</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPWAlignFont-->
+ <!--SPRM sprmPFrameTextFlow-->
+ <UML:Class xmi.id="sprmPFrameTextFlow" name="sprmPFrameTextFlow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x443A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFrameTextFlow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFrameTextFlow-->
+ <!--SPRM sprmPISnapBaseLine-->
+ <UML:Class xmi.id="sprmPISnapBaseLine" name="sprmPISnapBaseLine">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x243B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPISnapBaseLine</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPISnapBaseLine-->
+ <!--SPRM sprmPAnld-->
+ <UML:Class xmi.id="sprmPAnld" name="sprmPAnld">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC63E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPAnld</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPAnld-->
+ <!--SPRM sprmPPropRMark-->
+ <UML:Class xmi.id="sprmPPropRMark" name="sprmPPropRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC63F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPPropRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPPropRMark-->
+ <!--SPRM sprmPOutLvl-->
+ <UML:Class xmi.id="sprmPOutLvl" name="sprmPOutLvl">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2640</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPOutLvl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPOutLvl-->
+ <!--SPRM sprmPFBiDi-->
+ <UML:Class xmi.id="sprmPFBiDi" name="sprmPFBiDi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2441</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFBiDi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFBiDi-->
+ <!--SPRM sprmPFNumRMIns-->
+ <UML:Class xmi.id="sprmPFNumRMIns" name="sprmPFNumRMIns">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2443</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFNumRMIns</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFNumRMIns-->
+ <!--SPRM sprmPCrLf-->
+ <UML:Class xmi.id="sprmPCrLf" name="sprmPCrLf">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2444</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPCrLf</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPCrLf-->
+ <!--SPRM sprmPNumRM-->
+ <UML:Class xmi.id="sprmPNumRM" name="sprmPNumRM">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xC645</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPNumRM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPNumRM-->
+ <!--SPRM sprmPHugePapx-->
+ <UML:Class xmi.id="sprmPHugePapx" name="sprmPHugePapx">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6645</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPHugePapx</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPHugePapx-->
+ <!--SPRM sprmPFUsePgsuSettings-->
+ <UML:Class xmi.id="sprmPFUsePgsuSettings" name="sprmPFUsePgsuSettings">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2447</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFUsePgsuSettings</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFUsePgsuSettings-->
+ <!--SPRM sprmPFAdjustRight-->
+ <UML:Class xmi.id="sprmPFAdjustRight" name="sprmPFAdjustRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2448</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPFAdjustRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPFAdjustRight-->
+ <!--SPRM sprmCFRMarkDel-->
+ <UML:Class xmi.id="sprmCFRMarkDel" name="sprmCFRMarkDel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0800</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFRMarkDel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFRMarkDel-->
+ <!--SPRM sprmCFRMark-->
+ <UML:Class xmi.id="sprmCFRMark" name="sprmCFRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0801</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFRMark-->
+ <!--SPRM sprmCFFldVanish-->
+ <UML:Class xmi.id="sprmCFFldVanish" name="sprmCFFldVanish">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0802</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFFldVanish</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFFldVanish-->
+ <!--SPRM sprmCPicLocation-->
+ <UML:Class xmi.id="sprmCPicLocation" name="sprmCPicLocation">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6A03</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCPicLocation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcPic">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>picture location</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fcPic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmCPicLocation-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmCPicLocation"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmCPicLocation-->
+ <!--SPRM sprmCIbstRMark-->
+ <UML:Class xmi.id="sprmCIbstRMark" name="sprmCIbstRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4804</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIbstRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCIbstRMark-->
+ <!--SPRM sprmCDttmRMark-->
+ <UML:Class xmi.id="sprmCDttmRMark" name="sprmCDttmRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6805</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCDttmRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCDttmRMark-->
+ <!--SPRM sprmCFData-->
+ <UML:Class xmi.id="sprmCFData" name="sprmCFData">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0806</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFData</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFData-->
+ <!--SPRM sprmCIdslRMark-->
+ <UML:Class xmi.id="sprmCIdslRMark" name="sprmCIdslRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4807</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIdslRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCIdslRMark-->
+ <!--SPRM sprmCChs-->
+ <UML:Class xmi.id="sprmCChs" name="sprmCChs">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xEA08</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCChs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCChs-->
+ <!--SPRM sprmCSymbol-->
+ <UML:Class xmi.id="sprmCSymbol" name="sprmCSymbol">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6A09</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCSymbol</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="font">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>index of font for symbol in font table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x02</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:FONT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="char">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character code of symbol</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x04</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CHAR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmCSymbol-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmCSymbol"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmCSymbol-->
+ <!--SPRM sprmCFOle2-->
+ <UML:Class xmi.id="sprmCFOle2" name="sprmCFOle2">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x080A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFOle2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFOle2-->
+ <!--SPRM sprmCIdCharType-->
+ <UML:Class xmi.id="sprmCIdCharType" name="sprmCIdCharType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x480B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIdCharType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCIdCharType-->
+ <!--SPRM sprmCHighlight-->
+ <UML:Class xmi.id="sprmCHighlight" name="sprmCHighlight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A0C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHighlight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCHighlight-->
+ <!--SPRM sprmCObjLocation-->
+ <UML:Class xmi.id="sprmCObjLocation" name="sprmCObjLocation">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x680E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCObjLocation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCObjLocation-->
+ <!--SPRM sprmCFFtcAsciSymb-->
+ <UML:Class xmi.id="sprmCFFtcAsciSymb" name="sprmCFFtcAsciSymb">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFFtcAsciSymb</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFFtcAsciSymb-->
+ <!--SPRM sprmCIstd-->
+ <UML:Class xmi.id="sprmCIstd" name="sprmCIstd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A30</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIstd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCIstd-->
+ <!--SPRM sprmCIstdPermute-->
+ <UML:Class xmi.id="sprmCIstdPermute" name="sprmCIstdPermute">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA31</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIstdPermute</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCIstdPermute-->
+ <!--SPRM sprmCDefault-->
+ <UML:Class xmi.id="sprmCDefault" name="sprmCDefault">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCDefault</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCDefault-->
+ <!--SPRM sprmCPlain-->
+ <UML:Class xmi.id="sprmCPlain" name="sprmCPlain">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A33</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCPlain</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCPlain-->
+ <!--SPRM sprmCKcd-->
+ <UML:Class xmi.id="sprmCKcd" name="sprmCKcd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A34</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCKcd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCKcd-->
+ <!--SPRM sprmCFBold-->
+ <UML:Class xmi.id="sprmCFBold" name="sprmCFBold">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0835</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFBold</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFBold-->
+ <!--SPRM sprmCFItalic-->
+ <UML:Class xmi.id="sprmCFItalic" name="sprmCFItalic">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0836</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFItalic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFItalic-->
+ <!--SPRM sprmCFStrike-->
+ <UML:Class xmi.id="sprmCFStrike" name="sprmCFStrike">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0837</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFStrike</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFStrike-->
+ <!--SPRM sprmCFOutline-->
+ <UML:Class xmi.id="sprmCFOutline" name="sprmCFOutline">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0838</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFOutline</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFOutline-->
+ <!--SPRM sprmCFShadow-->
+ <UML:Class xmi.id="sprmCFShadow" name="sprmCFShadow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0839</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFShadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFShadow-->
+ <!--SPRM sprmCFSmallCaps-->
+ <UML:Class xmi.id="sprmCFSmallCaps" name="sprmCFSmallCaps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x083A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFSmallCaps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFSmallCaps-->
+ <!--SPRM sprmCFCaps-->
+ <UML:Class xmi.id="sprmCFCaps" name="sprmCFCaps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x083B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFCaps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFCaps-->
+ <!--SPRM sprmCFVanish-->
+ <UML:Class xmi.id="sprmCFVanish" name="sprmCFVanish">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x083C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFVanish</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFVanish-->
+ <!--SPRM sprmCFtcDefault-->
+ <UML:Class xmi.id="sprmCFtcDefault" name="sprmCFtcDefault">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A3D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFtcDefault</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFtcDefault-->
+ <!--SPRM sprmCKul-->
+ <UML:Class xmi.id="sprmCKul" name="sprmCKul">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A3E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCKul</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCKul-->
+ <!--SPRM sprmCSizePos-->
+ <UML:Class xmi.id="sprmCSizePos" name="sprmCSizePos">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xEA3F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCSizePos</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCSizePos-->
+ <!--SPRM sprmCDxaSpace-->
+ <UML:Class xmi.id="sprmCDxaSpace" name="sprmCDxaSpace">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8840</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCDxaSpace</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCDxaSpace-->
+ <!--SPRM sprmCLid-->
+ <UML:Class xmi.id="sprmCLid" name="sprmCLid">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A41</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCLid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCLid-->
+ <!--SPRM sprmCIco-->
+ <UML:Class xmi.id="sprmCIco" name="sprmCIco">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A42</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIco</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCIco-->
+ <!--SPRM sprmCHps-->
+ <UML:Class xmi.id="sprmCHps" name="sprmCHps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A43</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCHps-->
+ <!--SPRM sprmCHpsInc-->
+ <UML:Class xmi.id="sprmCHpsInc" name="sprmCHpsInc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A44</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsInc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCHpsInc-->
+ <!--SPRM sprmCHpsPos-->
+ <UML:Class xmi.id="sprmCHpsPos" name="sprmCHpsPos">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4845</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsPos</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCHpsPos-->
+ <!--SPRM sprmCHpsPosAdj-->
+ <UML:Class xmi.id="sprmCHpsPosAdj" name="sprmCHpsPosAdj">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A46</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsPosAdj</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCHpsPosAdj-->
+ <!--SPRM sprmCMajority-->
+ <UML:Class xmi.id="sprmCMajority" name="sprmCMajority">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA47</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCMajority</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCMajority-->
+ <!--SPRM sprmCIss-->
+ <UML:Class xmi.id="sprmCIss" name="sprmCIss">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A48</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIss</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCIss-->
+ <!--SPRM sprmCHpsNew50-->
+ <UML:Class xmi.id="sprmCHpsNew50" name="sprmCHpsNew50">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA49</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsNew50</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCHpsNew50-->
+ <!--SPRM sprmCHpsInc1-->
+ <UML:Class xmi.id="sprmCHpsInc1" name="sprmCHpsInc1">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA4A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsInc1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCHpsInc1-->
+ <!--SPRM sprmCHpsKern-->
+ <UML:Class xmi.id="sprmCHpsKern" name="sprmCHpsKern">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x484B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsKern</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCHpsKern-->
+ <!--SPRM sprmCMajority50-->
+ <UML:Class xmi.id="sprmCMajority50" name="sprmCMajority50">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA4C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCMajority50</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCMajority50-->
+ <!--SPRM sprmCHpsMul-->
+ <UML:Class xmi.id="sprmCHpsMul" name="sprmCHpsMul">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A4D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsMul</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCHpsMul-->
+ <!--SPRM sprmCYsri-->
+ <UML:Class xmi.id="sprmCYsri" name="sprmCYsri">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x484E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCYsri</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCYsri-->
+ <!--SPRM sprmCRgFtc0-->
+ <UML:Class xmi.id="sprmCRgFtc0" name="sprmCRgFtc0">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A4F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCRgFtc0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCRgFtc0-->
+ <!--SPRM sprmCRgFtc1-->
+ <UML:Class xmi.id="sprmCRgFtc1" name="sprmCRgFtc1">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A50</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCRgFtc1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCRgFtc1-->
+ <!--SPRM sprmCRgFtc2-->
+ <UML:Class xmi.id="sprmCRgFtc2" name="sprmCRgFtc2">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A51</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCRgFtc2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCRgFtc2-->
+ <!--SPRM sprmCCharScale-->
+ <UML:Class xmi.id="sprmCCharScale" name="sprmCCharScale">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4852</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCCharScale</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCCharScale-->
+ <!--SPRM sprmCFDStrike-->
+ <UML:Class xmi.id="sprmCFDStrike" name="sprmCFDStrike">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2A53</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFDStrike</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFDStrike-->
+ <!--SPRM sprmCFImprint-->
+ <UML:Class xmi.id="sprmCFImprint" name="sprmCFImprint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0854</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFImprint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFImprint-->
+ <!--SPRM sprmCFNoProof-->
+ <UML:Class xmi.id="sprmCFNoProof" name="sprmCFNoProof">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0875</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFNoProof</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFNoProof-->
+ <!--SPRM sprmCFspecVanish-->
+ <UML:Class xmi.id="sprmCFspecVanish" name="sprmCFspecVanish">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0818</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFspecVanish</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFspecVanish-->
+ <!--SPRM sprmCFitText-->
+ <UML:Class xmi.id="sprmCFitText" name="sprmCFitText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xca76</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFitText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFitText-->
+ <!--SPRM sprmCComplexScript-->
+ <UML:Class xmi.id="sprmCComplexScript" name="sprmCComplexScript">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x882</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCComplexScript</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCComplexScript-->
+ <!--SPRM sprmPTightWrap-->
+ <UML:Class xmi.id="sprmPTightWrap" name="sprmPTightWrap">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2471</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPTightWrap</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPTightWrap-->
+ <!--SPRM sprmCFSpec-->
+ <UML:Class xmi.id="sprmCFSpec" name="sprmCFSpec">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0855</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFSpec</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFSpec-->
+ <!--SPRM sprmCFObj-->
+ <UML:Class xmi.id="sprmCFObj" name="sprmCFObj">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0856</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFObj</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFObj-->
+ <!--SPRM sprmCPropRMark-->
+ <UML:Class xmi.id="sprmCPropRMark" name="sprmCPropRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA57</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCPropRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCPropRMark-->
+ <!--SPRM sprmCFEmboss-->
+ <UML:Class xmi.id="sprmCFEmboss" name="sprmCFEmboss">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0858</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFEmboss</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFEmboss-->
+ <!--SPRM sprmCSfxText-->
+ <UML:Class xmi.id="sprmCSfxText" name="sprmCSfxText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2859</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCSfxText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCSfxText-->
+ <!--SPRM sprmCFBiDi-->
+ <UML:Class xmi.id="sprmCFBiDi" name="sprmCFBiDi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x085A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFBiDi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFBiDi-->
+ <!--SPRM sprmCFDiacColor-->
+ <UML:Class xmi.id="sprmCFDiacColor" name="sprmCFDiacColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x085B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFDiacColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFDiacColor-->
+ <!--SPRM sprmCFBoldBi-->
+ <UML:Class xmi.id="sprmCFBoldBi" name="sprmCFBoldBi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x085C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFBoldBi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFBoldBi-->
+ <!--SPRM sprmCFItalicBi-->
+ <UML:Class xmi.id="sprmCFItalicBi" name="sprmCFItalicBi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x085D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFItalicBi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFItalicBi-->
+ <!--SPRM sprmCFtcBi-->
+ <UML:Class xmi.id="sprmCFtcBi" name="sprmCFtcBi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A5E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFtcBi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFtcBi-->
+ <!--SPRM sprmCLidBi-->
+ <UML:Class xmi.id="sprmCLidBi" name="sprmCLidBi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x485F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCLidBi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCLidBi-->
+ <!--SPRM sprmCIcoBi-->
+ <UML:Class xmi.id="sprmCIcoBi" name="sprmCIcoBi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A60</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIcoBi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCIcoBi-->
+ <!--SPRM sprmCHpsBi-->
+ <UML:Class xmi.id="sprmCHpsBi" name="sprmCHpsBi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4A61</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCHpsBi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCHpsBi-->
+ <!--SPRM sprmCDispFldRMark-->
+ <UML:Class xmi.id="sprmCDispFldRMark" name="sprmCDispFldRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA62</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCDispFldRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCDispFldRMark-->
+ <!--SPRM sprmCIbstRMarkDel-->
+ <UML:Class xmi.id="sprmCIbstRMarkDel" name="sprmCIbstRMarkDel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4863</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIbstRMarkDel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCIbstRMarkDel-->
+ <!--SPRM sprmCDttmRMarkDel-->
+ <UML:Class xmi.id="sprmCDttmRMarkDel" name="sprmCDttmRMarkDel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6864</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCDttmRMarkDel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCDttmRMarkDel-->
+ <!--SPRM sprmCBrc-->
+ <UML:Class xmi.id="sprmCBrc" name="sprmCBrc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6865</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCBrc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCBrc-->
+ <!--SPRM sprmCShd-->
+ <UML:Class xmi.id="sprmCShd" name="sprmCShd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4866</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCShd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCShd-->
+ <!--SPRM sprmCIdslRMarkDel-->
+ <UML:Class xmi.id="sprmCIdslRMarkDel" name="sprmCIdslRMarkDel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4867</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIdslRMarkDel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCIdslRMarkDel-->
+ <!--SPRM sprmCFUsePgsuSettings-->
+ <UML:Class xmi.id="sprmCFUsePgsuSettings" name="sprmCFUsePgsuSettings">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0868</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCFUsePgsuSettings</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCFUsePgsuSettings-->
+ <!--SPRM sprmCCpg-->
+ <UML:Class xmi.id="sprmCCpg" name="sprmCCpg">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x486B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCCpg</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCCpg-->
+ <!--SPRM sprmCRgLid0_80-->
+ <UML:Class xmi.id="sprmCRgLid0_80" name="sprmCRgLid0_80">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x486D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCRgLid0_80</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCRgLid0_80-->
+ <!--SPRM sprmCRgLid1-->
+ <UML:Class xmi.id="sprmCRgLid1" name="sprmCRgLid1">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x486E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCRgLid1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCRgLid1-->
+ <!--SPRM sprmCIdctHint-->
+ <UML:Class xmi.id="sprmCIdctHint" name="sprmCIdctHint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x286F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCIdctHint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCIdctHint-->
+ <!--SPRM sprmPicBrcl-->
+ <UML:Class xmi.id="sprmPicBrcl" name="sprmPicBrcl">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2E00</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPicBrcl</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPicBrcl-->
+ <!--SPRM sprmPicScale-->
+ <UML:Class xmi.id="sprmPicScale" name="sprmPicScale">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCE01</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPicScale</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPicScale-->
+ <!--SPRM sprmPicBrcTop-->
+ <UML:Class xmi.id="sprmPicBrcTop" name="sprmPicBrcTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6C02</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPicBrcTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPicBrcTop-->
+ <!--SPRM sprmPicBrcLeft-->
+ <UML:Class xmi.id="sprmPicBrcLeft" name="sprmPicBrcLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6C03</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPicBrcLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPicBrcLeft-->
+ <!--SPRM sprmPicBrcBottom-->
+ <UML:Class xmi.id="sprmPicBrcBottom" name="sprmPicBrcBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6C04</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPicBrcBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPicBrcBottom-->
+ <!--SPRM sprmPicBrcRight-->
+ <UML:Class xmi.id="sprmPicBrcRight" name="sprmPicBrcRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6C05</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPicBrcRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPicBrcRight-->
+ <!--SPRM sprmScnsPgn-->
+ <UML:Class xmi.id="sprmScnsPgn" name="sprmScnsPgn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmScnsPgn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmScnsPgn-->
+ <!--SPRM sprmSiHeadingPgn-->
+ <UML:Class xmi.id="sprmSiHeadingPgn" name="sprmSiHeadingPgn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3001</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSiHeadingPgn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSiHeadingPgn-->
+ <!--SPRM sprmSOlstAnm-->
+ <UML:Class xmi.id="sprmSOlstAnm" name="sprmSOlstAnm">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD202</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSOlstAnm</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSOlstAnm-->
+ <!--SPRM sprmSDxaColWidth-->
+ <UML:Class xmi.id="sprmSDxaColWidth" name="sprmSDxaColWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xF203</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaColWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDxaColWidth-->
+ <!--SPRM sprmSDxaColSpacing-->
+ <UML:Class xmi.id="sprmSDxaColSpacing" name="sprmSDxaColSpacing">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xF204</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaColSpacing</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDxaColSpacing-->
+ <!--SPRM sprmSFEvenlySpaced-->
+ <UML:Class xmi.id="sprmSFEvenlySpaced" name="sprmSFEvenlySpaced">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3005</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFEvenlySpaced</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSFEvenlySpaced-->
+ <!--SPRM sprmSFProtected-->
+ <UML:Class xmi.id="sprmSFProtected" name="sprmSFProtected">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3006</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFProtected</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSFProtected-->
+ <!--SPRM sprmSDmBinFirst-->
+ <UML:Class xmi.id="sprmSDmBinFirst" name="sprmSDmBinFirst">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5007</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDmBinFirst</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDmBinFirst-->
+ <!--SPRM sprmSDmBinOther-->
+ <UML:Class xmi.id="sprmSDmBinOther" name="sprmSDmBinOther">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5008</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDmBinOther</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDmBinOther-->
+ <!--SPRM sprmSBkc-->
+ <UML:Class xmi.id="sprmSBkc" name="sprmSBkc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3009</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBkc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSBkc-->
+ <!--SPRM sprmSFTitlePage-->
+ <UML:Class xmi.id="sprmSFTitlePage" name="sprmSFTitlePage">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x300A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFTitlePage</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSFTitlePage-->
+ <!--SPRM sprmSCcolumns-->
+ <UML:Class xmi.id="sprmSCcolumns" name="sprmSCcolumns">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x500B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSCcolumns</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSCcolumns-->
+ <!--SPRM sprmSDxaColumns-->
+ <UML:Class xmi.id="sprmSDxaColumns" name="sprmSDxaColumns">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x900C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaColumns</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDxaColumns-->
+ <!--SPRM sprmSFAutoPgn-->
+ <UML:Class xmi.id="sprmSFAutoPgn" name="sprmSFAutoPgn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x300D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFAutoPgn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSFAutoPgn-->
+ <!--SPRM sprmSNfcPgn-->
+ <UML:Class xmi.id="sprmSNfcPgn" name="sprmSNfcPgn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x300E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSNfcPgn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSNfcPgn-->
+ <!--SPRM sprmSDyaPgn-->
+ <UML:Class xmi.id="sprmSDyaPgn" name="sprmSDyaPgn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB00F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDyaPgn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDyaPgn-->
+ <!--SPRM sprmSDxaPgn-->
+ <UML:Class xmi.id="sprmSDxaPgn" name="sprmSDxaPgn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB010</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaPgn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDxaPgn-->
+ <!--SPRM sprmSFPgnRestart-->
+ <UML:Class xmi.id="sprmSFPgnRestart" name="sprmSFPgnRestart">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3011</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFPgnRestart</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSFPgnRestart-->
+ <!--SPRM sprmSFEndnote-->
+ <UML:Class xmi.id="sprmSFEndnote" name="sprmSFEndnote">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3012</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFEndnote</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSFEndnote-->
+ <!--SPRM sprmSLnc-->
+ <UML:Class xmi.id="sprmSLnc" name="sprmSLnc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3013</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSLnc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSLnc-->
+ <!--SPRM sprmSGprfIhdt-->
+ <UML:Class xmi.id="sprmSGprfIhdt" name="sprmSGprfIhdt">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3014</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSGprfIhdt</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSGprfIhdt-->
+ <!--SPRM sprmSNLnnMod-->
+ <UML:Class xmi.id="sprmSNLnnMod" name="sprmSNLnnMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5015</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSNLnnMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSNLnnMod-->
+ <!--SPRM sprmSDxaLnn-->
+ <UML:Class xmi.id="sprmSDxaLnn" name="sprmSDxaLnn">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9016</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaLnn</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDxaLnn-->
+ <!--SPRM sprmSDyaHdrTop-->
+ <UML:Class xmi.id="sprmSDyaHdrTop" name="sprmSDyaHdrTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB017</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDyaHdrTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDyaHdrTop-->
+ <!--SPRM sprmSDyaHdrBottom-->
+ <UML:Class xmi.id="sprmSDyaHdrBottom" name="sprmSDyaHdrBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB018</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDyaHdrBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDyaHdrBottom-->
+ <!--SPRM sprmSLBetween-->
+ <UML:Class xmi.id="sprmSLBetween" name="sprmSLBetween">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3019</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSLBetween</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSLBetween-->
+ <!--SPRM sprmSVjc-->
+ <UML:Class xmi.id="sprmSVjc" name="sprmSVjc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x301A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSVjc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSVjc-->
+ <!--SPRM sprmSLnnMin-->
+ <UML:Class xmi.id="sprmSLnnMin" name="sprmSLnnMin">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x501B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSLnnMin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSLnnMin-->
+ <!--SPRM sprmSPgnStart-->
+ <UML:Class xmi.id="sprmSPgnStart" name="sprmSPgnStart">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x501C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSPgnStart</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSPgnStart-->
+ <!--SPRM sprmSBOrientation-->
+ <UML:Class xmi.id="sprmSBOrientation" name="sprmSBOrientation">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x301D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBOrientation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSBOrientation-->
+ <!--SPRM sprmSBCustomize-->
+ <UML:Class xmi.id="sprmSBCustomize" name="sprmSBCustomize">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x301E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBCustomize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSBCustomize-->
+ <!--SPRM sprmSXaPage-->
+ <UML:Class xmi.id="sprmSXaPage" name="sprmSXaPage">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB01F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSXaPage</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSXaPage-->
+ <!--SPRM sprmSYaPage-->
+ <UML:Class xmi.id="sprmSYaPage" name="sprmSYaPage">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB020</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSYaPage</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSYaPage-->
+ <!--SPRM sprmSDxaLeft-->
+ <UML:Class xmi.id="sprmSDxaLeft" name="sprmSDxaLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB021</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDxaLeft-->
+ <!--SPRM sprmSDxaRight-->
+ <UML:Class xmi.id="sprmSDxaRight" name="sprmSDxaRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB022</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxaRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDxaRight-->
+ <!--SPRM sprmSDyaTop-->
+ <UML:Class xmi.id="sprmSDyaTop" name="sprmSDyaTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9023</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDyaTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDyaTop-->
+ <!--SPRM sprmSDyaBottom-->
+ <UML:Class xmi.id="sprmSDyaBottom" name="sprmSDyaBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9024</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDyaBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDyaBottom-->
+ <!--SPRM sprmSDzaGutter-->
+ <UML:Class xmi.id="sprmSDzaGutter" name="sprmSDzaGutter">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xB025</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDzaGutter</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDzaGutter-->
+ <!--SPRM sprmSDmPaperReq-->
+ <UML:Class xmi.id="sprmSDmPaperReq" name="sprmSDmPaperReq">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5026</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDmPaperReq</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDmPaperReq-->
+ <!--SPRM sprmSPropRMark-->
+ <UML:Class xmi.id="sprmSPropRMark" name="sprmSPropRMark">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD227</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSPropRMark</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSPropRMark-->
+ <!--SPRM sprmSFBiDi-->
+ <UML:Class xmi.id="sprmSFBiDi" name="sprmSFBiDi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3228</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFBiDi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSFBiDi-->
+ <!--SPRM sprmSFFacingCol-->
+ <UML:Class xmi.id="sprmSFFacingCol" name="sprmSFFacingCol">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3229</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFFacingCol</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSFFacingCol-->
+ <!--SPRM sprmSFRTLGutter-->
+ <UML:Class xmi.id="sprmSFRTLGutter" name="sprmSFRTLGutter">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x322A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSFRTLGutter</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSFRTLGutter-->
+ <!--SPRM sprmSBrcTop-->
+ <UML:Class xmi.id="sprmSBrcTop" name="sprmSBrcTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x702B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBrcTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSBrcTop-->
+ <!--SPRM sprmSBrcLeft-->
+ <UML:Class xmi.id="sprmSBrcLeft" name="sprmSBrcLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x702C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBrcLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSBrcLeft-->
+ <!--SPRM sprmSBrcBottom-->
+ <UML:Class xmi.id="sprmSBrcBottom" name="sprmSBrcBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x702D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBrcBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSBrcBottom-->
+ <!--SPRM sprmSBrcRight-->
+ <UML:Class xmi.id="sprmSBrcRight" name="sprmSBrcRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x702E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSBrcRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSBrcRight-->
+ <!--SPRM sprmSPgbProp-->
+ <UML:Class xmi.id="sprmSPgbProp" name="sprmSPgbProp">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x522F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSPgbProp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSPgbProp-->
+ <!--SPRM sprmSDxtCharSpace-->
+ <UML:Class xmi.id="sprmSDxtCharSpace" name="sprmSDxtCharSpace">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7030</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDxtCharSpace</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDxtCharSpace-->
+ <!--SPRM sprmSDyaLinePitch-->
+ <UML:Class xmi.id="sprmSDyaLinePitch" name="sprmSDyaLinePitch">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9031</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSDyaLinePitch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSDyaLinePitch-->
+ <!--SPRM sprmSClm-->
+ <UML:Class xmi.id="sprmSClm" name="sprmSClm">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5032</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSClm</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSClm-->
+ <!--SPRM sprmSTextFlow-->
+ <UML:Class xmi.id="sprmSTextFlow" name="sprmSTextFlow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5033</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmSTextFlow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmSTextFlow-->
+ <!--SPRM sprmTJc-->
+ <UML:Class xmi.id="sprmTJc" name="sprmTJc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5400</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTJc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTJc-->
+ <!--SPRM sprmTDxaLeft-->
+ <UML:Class xmi.id="sprmTDxaLeft" name="sprmTDxaLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9601</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDxaLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTDxaLeft-->
+ <!--SPRM sprmTDxaGapHalf-->
+ <UML:Class xmi.id="sprmTDxaGapHalf" name="sprmTDxaGapHalf">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9602</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDxaGapHalf</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTDxaGapHalf-->
+ <!--SPRM sprmTFCantSplit-->
+ <UML:Class xmi.id="sprmTFCantSplit" name="sprmTFCantSplit">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3403</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTFCantSplit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTFCantSplit-->
+ <!--SPRM sprmTTableHeader-->
+ <UML:Class xmi.id="sprmTTableHeader" name="sprmTTableHeader">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3404</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTTableHeader</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTTableHeader-->
+ <!--SPRM sprmTTableBorders-->
+ <UML:Class xmi.id="sprmTTableBorders" name="sprmTTableBorders">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD605</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTTableBorders</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="rgbbrc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:rgbrc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="BRC"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTTableBorders-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTTableBorders"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTTableBorders-->
+ <!--SPRM sprmTDefTable10-->
+ <UML:Class xmi.id="sprmTDefTable10" name="sprmTDefTable10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD606</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDefTable10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTDefTable10-->
+ <!--SPRM sprmTDyaRowHeight-->
+ <UML:Class xmi.id="sprmTDyaRowHeight" name="sprmTDyaRowHeight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9407</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDyaRowHeight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTDyaRowHeight-->
+ <!--SPRM sprmTDefTable-->
+ <UML:Class xmi.id="sprmTDefTable" name="sprmTDefTable">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD608</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDefTable</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="cellx">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:cellx</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U16"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="tc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:tc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="TC"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTDefTable-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTDefTable"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTDefTable-->
+ <!--SPRM sprmTDefTableShd-->
+ <UML:Class xmi.id="sprmTDefTableShd" name="sprmTDefTableShd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD609</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDefTableShd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="shd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="SHD"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTDefTableShd-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTDefTableShd"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTDefTableShd-->
+ <!--SPRM sprmTCellShd-->
+ <UML:Class xmi.id="sprmTCellShd" name="sprmTCellShd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD612</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCellShd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="shd">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:cellShd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="CellShd"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTCelShd-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTCellShd"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTCellShd-->
+ <!--SPRM sprmTTlp-->
+ <UML:Class xmi.id="sprmTTlp" name="sprmTTlp">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x740A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTTlp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:Classifier.feature>
+ <UML:Attribute name="itl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:itl</UML:TaggedValue.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="fatlBorders">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fatlBorders</UML:TaggedValue.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="fatlShading">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fatlShading</UML:TaggedValue.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="fatlFont">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fatlFont</UML:TaggedValue.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="fatlColor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fatlColor</UML:TaggedValue.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="fatlBestFit">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fatlBestFit</UML:TaggedValue.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="fatlHdrRows">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fatlHdrRows</UML:TaggedValue.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="fatlLastRow">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x40</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fatlLastRow</UML:TaggedValue.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="fatlHdrCols">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x80</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fatlHdrCols</UML:TaggedValue.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="fatlLastCol">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x100</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fatlLastCol</UML:TaggedValue.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="fatlNoRowBands">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x200</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fatlNoRowBands</UML:TaggedValue.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="fatlNoColBands">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x400</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fatlNoColBands</UML:TaggedValue.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="sprmTTlp-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTTlp"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTTlp-->
+ <!--SPRM sprmTFBiDi-->
+ <UML:Class xmi.id="sprmTFBiDi" name="sprmTFBiDi">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x560B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTFBiDi</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTFBiDi-->
+ <!--SPRM sprmTHTMLProps-->
+ <UML:Class xmi.id="sprmTHTMLProps" name="sprmTHTMLProps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x740C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTHTMLProps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTHTMLProps-->
+ <!--SPRM sprmTSetBrc-->
+ <UML:Class xmi.id="sprmTSetBrc" name="sprmTSetBrc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD620</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTSetBrc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTSetBrc-->
+ <!--SPRM sprmTInsert-->
+ <UML:Class xmi.id="sprmTInsert" name="sprmTInsert">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7621</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTInsert</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTInsert-->
+ <!--SPRM sprmTDelete-->
+ <UML:Class xmi.id="sprmTDelete" name="sprmTDelete">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5622</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDelete</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTDelete-->
+ <!--SPRM sprmTDxaCol-->
+ <UML:Class xmi.id="sprmTDxaCol" name="sprmTDxaCol">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7623</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDxaCol</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTDxaCol-->
+ <!--SPRM sprmTMerge-->
+ <UML:Class xmi.id="sprmTMerge" name="sprmTMerge">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5624</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTMerge</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTMerge-->
+ <!--SPRM sprmTSplit-->
+ <UML:Class xmi.id="sprmTSplit" name="sprmTSplit">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5625</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTSplit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTSplit-->
+ <!--SPRM sprmTSetBrc10-->
+ <UML:Class xmi.id="sprmTSetBrc10" name="sprmTSetBrc10">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD626</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTSetBrc10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTSetBrc10-->
+ <!--SPRM sprmTSetShd-->
+ <UML:Class xmi.id="sprmTSetShd" name="sprmTSetShd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7627</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTSetShd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTSetShd-->
+ <!--SPRM sprmTSetShdOdd-->
+ <UML:Class xmi.id="sprmTSetShdOdd" name="sprmTSetShdOdd">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7628</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTSetShdOdd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTSetShdOdd-->
+ <!--SPRM sprmTTextFlow-->
+ <UML:Class xmi.id="sprmTTextFlow" name="sprmTTextFlow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7629</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTTextFlow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTTextFlow-->
+ <!--SPRM sprmTDiagLine-->
+ <UML:Class xmi.id="sprmTDiagLine" name="sprmTDiagLine">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD62A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDiagLine</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTDiagLine-->
+ <!--SPRM sprmTVertMerge-->
+ <UML:Class xmi.id="sprmTVertMerge" name="sprmTVertMerge">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD62B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTVertMerge</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTVertMerge-->
+ <!--SPRM sprmTVertAlign-->
+ <UML:Class xmi.id="sprmTVertAlign" name="sprmTVertAlign">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD62C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTVertAlign</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTVertAlign-->
+ <!--SPRM sprmTCellTopColor-->
+ <UML:Class xmi.id="sprmTCellTopColor" name="sprmTCellTopColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD61A</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCellTopColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="cellTopColor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:cellTopColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTCellTopColor-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTCellTopColor"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTCellTopColor-->
+ <!--SPRM sprmTCellLeftColor-->
+ <UML:Class xmi.id="sprmTCellLeftColor" name="sprmTCellLeftColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD61B</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCellLeftColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="cellLeftColor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:cellLeftColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTCellLeftColor-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTCellLeftColor"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTCellLeftColor-->
+ <!--SPRM sprmTCellBottomColor-->
+ <UML:Class xmi.id="sprmTCellBottomColor" name="sprmTCellBottomColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD61C</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCellBottomColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="cellBottomColor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:cellBottomColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTCellBottomColor-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTCellBottomColor"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTCellBottomColor-->
+ <!--SPRM sprmTCellRightColor-->
+ <UML:Class xmi.id="sprmTCellRightColor" name="sprmTCellRightColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD61D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCellRightColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="cellRightColor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:cellRightColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTCellRightColor-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTCellRightColor"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTCellRightColor-->
+ <!--SPRM sprmTGridLineProps-->
+ <UML:Class xmi.id="sprmTGridLineProps" name="sprmTGridLineProps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD613</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTGridLineProps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x33</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <!--
+ <UML:Operation name="gridLineProps" >
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:gridLineProps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid" />
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return" >
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="LineProps" />
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array" />
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ -->
+ <UML:Attribute name="linePropsTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>top line properties</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSTOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>left line properties</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xb</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>bottom line properties</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x13</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSBOTTOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>right line properties</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1b</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSRIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsHorizontal">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>horizontal line properties</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x23</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSHORIZONTAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsVertical">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>vertical line properties</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2b</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSVERTICAL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTGridLineProps-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTGridLineProps"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTGridLineProps-->
+ <!--SPRM sprmCInsrsid-->
+ <UML:Class xmi.id="sprmCInsrsid" name="sprmCIndrsid">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6816</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:insrsid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCInsrsid-->
+ <!--SPRM sprmCdelrsid-->
+ <UML:Class xmi.id="sprmCdelrsid" name="sprmCdelrsid">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6817</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:delrsid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCdelrsid-->
+ <!--SPRM sprmPTableDepth-->
+ <UML:Class xmi.id="sprmPTableDepth" name="sprmPTableDepth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6649</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPTableDepth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPTableDepth-->
+ <!--SPRM sprmTCellShadow-->
+ <UML:Class xmi.id="sprmTCellShadow" name="sprmTCellShadow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8nocalcsize"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xd670</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCellShadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="cellShadow">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:CELLSHADOW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="CellShd"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTCellShadow-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTCellShadow"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTCellShadow-->
+ <!--SPRM sprmPBrcTop-->
+ <UML:Class xmi.id="sprmPBrcTop" name="sprmPBrcTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6424</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>BRC of top line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCTOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBrcTop-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBrcTop"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmPBrcTop-->
+ <!--SPRM sprmPBrcLeft-->
+ <UML:Class xmi.id="sprmPBrcLeft" name="sprmPBrcLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6425</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>BRC of left line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBrcLeft-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBrcLeft"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmPBrcLeft-->
+ <!--SPRM sprmPBrcBottom-->
+ <UML:Class xmi.id="sprmPBrcBottom" name="sprmPBrcBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6426</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>BRC of bottom line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBrcBottom-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBrcBottom"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmPBrcBottom-->
+ <!--SPRM sprmPBrcRight-->
+ <UML:Class xmi.id="sprmPBrcRight" name="sprmPBrcRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6427</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>BRC of top line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCRIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBrcRight-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBrcRight"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmPBrcRight-->
+ <!--SPRM sprmPBrcBetween-->
+ <UML:Class xmi.id="sprmPBrcBetween" name="sprmPBrcBetween">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6428</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBrcBetween</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="brcBetween">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>BRC</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:BRCBETWEEN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="BRC"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBrcBetween-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBrcBetween"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmPBrcBetween-->
+ <!--SPRM sprmPBorderTop-->
+ <UML:Class xmi.id="sprmPBorderTop" name="sprmPBorderTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc64e</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBorderTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsTop">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>properties of top line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSTOP</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBorderTop-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBorderTop"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmPBorderTop-->
+ <!--SPRM sprmPBorderLeft-->
+ <UML:Class xmi.id="sprmPBorderLeft" name="sprmPBorderLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc64f</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBorderLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsLeft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>properties of left line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSLEFT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBorderLeft-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBorderLeft"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmPBorderLeft-->
+ <!--SPRM sprmPBorderBottom-->
+ <UML:Class xmi.id="sprmPBorderBottom" name="sprmPBorderBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc650</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBorderBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsBottom">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>properties of bottom line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSBOTTOM</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBorderBottom-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBorderBottom"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmPBorderBottom-->
+ <!--SPRM sprmPBorderRight-->
+ <UML:Class xmi.id="sprmPBorderRight" name="sprmPBorderRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc651</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBorderRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsRight">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>properties of right line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSRIGHT</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBorderRight-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBorderRight"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmPBorderRight-->
+ <!--SPRM sprmPBorderBetween-->
+ <UML:Class xmi.id="sprmPBorderBetween" name="sprmPBorderBetween">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc652</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBorderBetween</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="linePropsBetween">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>properties of line in between</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPSBETWEEN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmPBorderBetween-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmPBorderBetween"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmPBorderBetween-->
+ <!--SPRM sprmCBorder-->
+ <UML:Class xmi.id="sprmCBorder" name="sprmCBorder">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xca72</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPBorderBetween</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="lineProps">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>properties of line in between</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:LINEPROPS</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="LineProps"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmCBorder-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmCBorder"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmCBorder-->
+ <!--SPRM sprmTTPreferredWidth-->
+ <UML:Class xmi.id="sprmTTPreferredWidth" name="sprmTTPreferredWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTTPreferredWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf614</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unit">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:unit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="preferredWidth">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>preferred width</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:preferredWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTTPreferredWidth-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTTPreferredWidth"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTTPreferredWidth-->
+ <!--SPRM sprmTTRLeft-->
+ <UML:Class xmi.id="sprmTTRLeft" name="sprmTTRLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTTRLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf661</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="unit">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:unit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="trleft">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table indent from left</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:trleft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U16"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTTRLeft-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTTRLeft"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTTRLeft-->
+ <!--SPRM sprmCEastAsianLayout-->
+ <UML:Class xmi.id="sprmCEastAsianLayout" name="sprmCEastAsianLayout">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCA78</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCEastAsianLayout</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fcEastAsianLayout">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>East Asian Typography Setting</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fcEastAsianLayout</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmCEastAsianLayout-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmCEastAsianLayout"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmCEastAsianLayout-->
+ <!--SPRM sprmTWidthBefore-->
+ <UML:Class xmi.id="sprmTWidthBefore" name="sprmTWidthBefore">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xF617</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTWidthBefore</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ftsWidth">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ftsWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wWidth">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:wWidth</UML:TaggedValue.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="sprmTWidthBefore-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTWidthBefore"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTWidthBefore-->
+ <!--SPRM sprmTWidthAfter-->
+ <UML:Class xmi.id="sprmTWidthAfter" name="sprmTWidthAfter">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xF618</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTWidthAfter</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ftsWidth">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ftsWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wWidth">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:wWidth</UML:TaggedValue.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="sprmTWidthAfter-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTWidthAfter"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTWidthAfter-->
+ <!--SPRM sprmPDxaLeft1-->
+ <UML:Class xmi.id="sprmPDxaLeft1" name="sprmPDxaLeft1">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8460</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPDxaLeft1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPDxaLeft1-->
+ <!--SPRM sprmPRsid-->
+ <UML:Class xmi.id="sprmPRsid" name="sprmPRsid">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6467</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmPRsid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmPRsid-->
+ <!--SPRM sprmCRsidProp-->
+ <UML:Class xmi.id="sprmCRsidProp" name="sprmCRsidProp">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6815</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCRsidProp</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>paragraph</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCRsidProp-->
+ <!--SPRM sprmCRgLid0-->
+ <UML:Class xmi.id="sprmCRgLid0" name="sprmCRgLid0">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4873</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmCRgLid0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>character</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmCRgLid0-->
+ <!--SPRM sprmTCellPaddingDefault-->
+ <UML:Class xmi.id="sprmTCellPaddingDefault" name="sprmTCellPaddingDefault">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xD634</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTCellPaddingDefault</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="itc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:itc</UML:TaggedValue.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="grfbrc">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:grfbrc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="ftsWidth">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:ftsWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="wWidth">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:wWidth</UML:TaggedValue.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="sprmTCellPaddingDefault-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTCellPaddingDefault"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTCellPaddingDefault-->
+ <!--SPRM sprmTRsid-->
+ <UML:Class xmi.id="sprmTRsid" name="sprmTRsid">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x7479</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTRsid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTRsid-->
+ <!--SPRM sprmTFAutofit-->
+ <UML:Class xmi.id="sprmTFAutofit" name="sprmTFAutofit">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3615</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTFAutofit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTFAutofit-->
+ <!--SPRM sprmTPc-->
+ <UML:Class xmi.id="sprmTPc" name="sprmTPc">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x360D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTPc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="padding">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:padding</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pcVert">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xc</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:pcVert</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="pcHorz">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:pcHorz</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U8"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="sprmTPc-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="sprmTPc"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--SPRM sprmTPc-->
+ <!--SPRM sprmTDyaAbs-->
+ <UML:Class xmi.id="sprmTDyaAbs" name="sprmTDyaAbs">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x940F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDyaAbs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTDyaAbs-->
+ <!--SPRM sprmTDxaFromText-->
+ <UML:Class xmi.id="sprmTDxaFromText" name="sprmTDxaFromText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9410</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDxaFromText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTDxaFromText-->
+ <!--SPRM sprmTDyaFromText-->
+ <UML:Class xmi.id="sprmTDyaFromText" name="sprmTDyaFromText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x9411</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDyaFromText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTDyaFromText-->
+ <!--SPRM sprmTDxaFromTextRight-->
+ <UML:Class xmi.id="sprmTDxaFromTextRight" name="sprmTDxaFromTextRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x941E</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDxaFromTextRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTDxaFromTextRight-->
+ <!--SPRM sprmTDyaFromTextBottom-->
+ <UML:Class xmi.id="sprmTDyaFromTextBottom" name="sprmTDyaFromTextBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x941F</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTDyaFromTextBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTDyaFromTextBottom-->
+ <!--SPRM sprmTFNoAllowOverlap-->
+ <UML:Class xmi.id="sprmTFNoAllowOverlap" name="sprmTFNoAllowOverlap">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8sprm"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x3465</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmcode"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:sprmTFNoAllowOverlap</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="sprmid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>table</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="kind"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--SPRM sprmTFNoAllowOverlap-->
+ <!--SPRMS-->
+ <!--DFFS-->
+ <!--DFF UDefProp-->
+ <UML:Class xmi.id="UDefProp" name="UDefProp">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="resolvenoauto"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf122</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="UDefProp-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="UDefProp"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--DFF UDefProp-->
+ <!--DFF FSPGR-->
+ <UML:Class xmi.id="FSPGR" name="FSPGR">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf009</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="rectangle">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the rectangle of the grouped shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:rectangle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="Rectangle"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FSPGR-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FSPGR"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--DFF FSPGR-->
+ <!--DFF OPT-->
+ <UML:Class xmi.id="OPT" name="OPT">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf00b</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="property">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpopt</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="FOPTE"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ <UML:Operation name="extraoffset">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpoptextraoffset</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="U32"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="noresolve"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="OPT-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="OPT"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--DFF OPT-->
+ <!--DFF FSP-->
+ <UML:Class xmi.id="FSP" name="FSP">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf00a</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shptype">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>shape type</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>12</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xfff0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shptype</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="shptypename">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shptypename</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpid">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>shape id</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfGroup">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>This shape is a group shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfGroup</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfChild">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Not a top-level shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfChild</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfPatriarch">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>This is the topmost group shape. Exactly one of these per drawing.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>2</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfPatriarch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfDeleted">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The shape has been deleted</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfDeleted</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfOleShape">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The shape is an OLE object</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfOleShape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfHaveMaster">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape has a hspMaster property</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfHaveMaster</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfFlipH">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape is flipped horizontally</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x40</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>6</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfFlipH</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfFlipV">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape is flipped vertically</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x80</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>7</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfFlipV</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfConnector">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Connector type of shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x100</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfConnector</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfHaveAnchor">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape has an anchor of some kind</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x200</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfHaveAnchor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfBackground">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Background shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x400</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfBackground</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="shpfHaveSpt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape has a shape type property</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x800</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>11</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfHaveSpt</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Attribute name="reserved">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Not yet used</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x0c</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>20</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xfffff000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:reserved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="U32"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="FSP-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="FSP"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--DFF FSP-->
+ <!--DFF DGG-->
+ <UML:Class xmi.id="DGG" name="DGG">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf006</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fdgg">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the dgg structure</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpdgg</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="FDGG"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="fidcl">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpdgg</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="FIDCL"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="DGG-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="DGG"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--DFF DGG-->
+ <!--DFF BSE-->
+ <UML:Class xmi.id="BSE" name="BSE">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf007</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fbse">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the FBSE structure</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpfbse</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="FBSE"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="blipname">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shpblipbname</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="String"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature><UML:Operation name="blip"><UML:ModelElement.taggedValue><UML:TaggedValue><UML:TaggedValue.dataValue>rtf:blip</UML:TaggedValue.dataValue><UML:TaggedValue.type><UML:TagDefinition xmi.idref="opid"/></UML:TaggedValue.type></UML:TaggedValue></UML:ModelElement.taggedValue><UML:BehavioralFeature.parameter><UML:Parameter kind="return" name="return"><UML:Parameter.type><UML:Class xmi.idref="DffRecord"/></UML:Parameter.type></UML:Parameter></UML:BehavioralFeature.parameter><UML:ModelElement.stereotype><UML:Stereotype xmi.idref="attribute"/></UML:ModelElement.stereotype></UML:Operation>
+ g </UML:Classifier.feature>
+ <!--
+ <UML:Classifier.feature>
+ <UML:Operation name="binary">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:binary</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="Binary"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="binary"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ -->
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="BSE-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="BSE"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--DFF BSE-->
+ <!--DFF BlipPng-->
+ <UML:Class xmi.id="BlipPng" name="BlipPng">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf01e</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="payload">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the actual PNG</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x19</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:payload</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="Blob"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attributeremainder"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="BlipPng-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="BlipPng"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--DFF BlipPng-->
+ <!--DFF BlipDib-->
+ <UML:Class xmi.id="BlipDib" name="BlipDib">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf01f</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="payload">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>the actual DIB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x19</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:payload</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="Blob"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attributeremainder"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="BlipDib-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="BlipDib"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--DFF BlipDib-->
+ <!--DFF SpContainer-->
+ <UML:Class xmi.id="SpContainer" name="SpContainer">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf004</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Operation name="blip">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:blip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="BSE"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ <UML:Classifier.feature>
+ <UML:Operation name="shptxt">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:shptxt</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="opid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class xmi.idref="TextboxText"/>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="SpContainer-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="SpContainer"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--DFF SpContainer-->
+ <!--DFF Dg-->
+ <UML:Class xmi.id="Dg" name="Dg">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffrecord"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xf008</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="dffid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:Classifier.feature>
+ <UML:Attribute name="fdg">
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The FDG data structure</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>64</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rtf:fdg</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType xmi.idref="FDG"/>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </UML:Class>
+ <UML:Generalization isSpecification="false" xmi.id="Dg-Properties">
+ <UML:Generalization.child>
+ <UML:Class xmi.idref="Dg"/>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties"/>
+ </UML:Generalization.parent>
+ </UML:Generalization>
+ <!--DFF Dg-->
+ <!--DFFS-->
+ <!--DFFOPT-->
+ <!--DFFOPT rotation-->
+ <UML:Class xmi.id="rotation" name="rotation">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shprotation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>4</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>fixed point: 16.16
+ degrees</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT rotation-->
+ <!--DFFOPT fLockRotation-->
+ <UML:Class xmi.id="fLockRotation" name="fLockRotation">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockRotation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>119</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>No rotation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fLockRotation-->
+ <!--DFFOPT fLockAspectRatio-->
+ <UML:Class xmi.id="fLockAspectRatio" name="fLockAspectRatio">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockAspectRatio</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>120</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Don't allow changes in
+ aspect ratio</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fLockAspectRatio-->
+ <!--DFFOPT fLockPosition-->
+ <UML:Class xmi.id="fLockPosition" name="fLockPosition">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockPosition</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>121</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Don't allow the shape to
+ be moved</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fLockPosition-->
+ <!--DFFOPT fLockAgainstSelect-->
+ <UML:Class xmi.id="fLockAgainstSelect" name="fLockAgainstSelect">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockAgainstSelect</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>122</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape may not be
+ selected</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fLockAgainstSelect-->
+ <!--DFFOPT fLockCropping-->
+ <UML:Class xmi.id="fLockCropping" name="fLockCropping">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockCropping</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>123</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>No cropping this
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fLockCropping-->
+ <!--DFFOPT fLockVertices-->
+ <UML:Class xmi.id="fLockVertices" name="fLockVertices">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockVertices</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>124</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Edit Points not
+ allowed</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fLockVertices-->
+ <!--DFFOPT fLockText-->
+ <UML:Class xmi.id="fLockText" name="fLockText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>125</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Do not edit
+ text</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fLockText-->
+ <!--DFFOPT fLockAdjustHandles-->
+ <UML:Class xmi.id="fLockAdjustHandles" name="fLockAdjustHandles">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockAdjustHandles</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>126</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Do not adjust</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fLockAdjustHandles-->
+ <!--DFFOPT fLockAgainstGrouping-->
+ <UML:Class xmi.id="fLockAgainstGrouping" name="fLockAgainstGrouping">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockAgainstGrouping</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>127</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Do not group this
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fLockAgainstGrouping-->
+ <!--DFFOPT lTxid-->
+ <UML:Class xmi.id="lTxid" name="lTxid">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplTxid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>128</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>id for the text, value
+ determined by the host</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lTxid-->
+ <!--DFFOPT dxTextLeft-->
+ <UML:Class xmi.id="dxTextLeft" name="dxTextLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxTextLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>129</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/10 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>margins relative to
+ shape's inscribed text rectangle (in EMUs)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT dxTextLeft-->
+ <!--DFFOPT dyTextTop-->
+ <UML:Class xmi.id="dyTextTop" name="dyTextTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdyTextTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>130</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/20 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT dyTextTop-->
+ <!--DFFOPT dxTextRight-->
+ <UML:Class xmi.id="dxTextRight" name="dxTextRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxTextRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>131</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/10 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT dxTextRight-->
+ <!--DFFOPT dyTextBottom-->
+ <UML:Class xmi.id="dyTextBottom" name="dyTextBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdyTextBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>132</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/20 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT dyTextBottom-->
+ <!--DFFOPT WrapText-->
+ <UML:Class xmi.id="WrapText" name="WrapText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpWrapText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>133</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Wrap text at shape
+ margins</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT WrapText-->
+ <!--DFFOPT scaleText-->
+ <UML:Class xmi.id="scaleText" name="scaleText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpscaleText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>134</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Text zoom/scale (used if
+ fFitTextToShape)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT scaleText-->
+ <!--DFFOPT anchorText-->
+ <UML:Class xmi.id="anchorText" name="anchorText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpanchorText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>135</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Top</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How to anchor the
+ text</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT anchorText-->
+ <!--DFFOPT txflTextFlow-->
+ <UML:Class xmi.id="txflTextFlow" name="txflTextFlow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shptxflTextFlow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>136</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>HorzN</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Text flow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT txflTextFlow-->
+ <!--DFFOPT cdirFont-->
+ <UML:Class xmi.id="cdirFont" name="cdirFont">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpcdirFont</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>137</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>msocdir0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Font rotation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT cdirFont-->
+ <!--DFFOPT hspNext-->
+ <UML:Class xmi.id="hspNext" name="hspNext">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shphspNext</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>138</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>ID of the next shape
+ (used by Word for linked textboxes)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT hspNext-->
+ <!--DFFOPT txdir-->
+ <UML:Class xmi.id="txdir" name="txdir">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shptxdir</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>139</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>LTR</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Bi-Di Text
+ direction</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT txdir-->
+ <!--DFFOPT fSelectText-->
+ <UML:Class xmi.id="fSelectText" name="fSelectText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfSelectText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>187</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE if single click
+ selects text, FALSE if two clicks</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fSelectText-->
+ <!--DFFOPT fAutoTextMargin-->
+ <UML:Class xmi.id="fAutoTextMargin" name="fAutoTextMargin">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfAutoTextMargin</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>188</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>use host's margin
+ calculations</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fAutoTextMargin-->
+ <!--DFFOPT fRotateText-->
+ <UML:Class xmi.id="fRotateText" name="fRotateText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfRotateText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>189</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Rotate text with
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fRotateText-->
+ <!--DFFOPT fFitShapeToText-->
+ <UML:Class xmi.id="fFitShapeToText" name="fFitShapeToText">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfFitShapeToText</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>190</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Size shape to fit text
+ size</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fFitShapeToText-->
+ <!--DFFOPT fFitTextToShape-->
+ <UML:Class xmi.id="fFitTextToShape" name="fFitTextToShape">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfFitTextToShape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>191</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Size text to fit shape
+ size</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fFitTextToShape-->
+ <!--DFFOPT gtextUNICODE-->
+ <UML:Class xmi.id="gtextUNICODE" name="gtextUNICODE">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextUNICODE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>192</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>UNICODE text
+ string</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextUNICODE-->
+ <!--DFFOPT gtextRTF-->
+ <UML:Class xmi.id="gtextRTF" name="gtextRTF">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextRTF</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>193</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>RTF text
+ string</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextRTF-->
+ <!--DFFOPT gtextAlign-->
+ <UML:Class xmi.id="gtextAlign" name="gtextAlign">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextAlign</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>194</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Center</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>alignment on
+ curve</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextAlign-->
+ <!--DFFOPT gtextSize-->
+ <UML:Class xmi.id="gtextSize" name="gtextSize">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextSize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>195</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>36&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>default point
+ size</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextSize-->
+ <!--DFFOPT gtextSpacing-->
+ <UML:Class xmi.id="gtextSpacing" name="gtextSpacing">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextSpacing</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>196</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>fixed point
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextSpacing-->
+ <!--DFFOPT gtextFont-->
+ <UML:Class xmi.id="gtextFont" name="gtextFont">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFont</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>197</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>font family
+ name</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFont-->
+ <!--DFFOPT gtextFReverseRows-->
+ <UML:Class xmi.id="gtextFReverseRows" name="gtextFReverseRows">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFReverseRows</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>240</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Reverse row
+ order</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFReverseRows-->
+ <!--DFFOPT fGtext-->
+ <UML:Class xmi.id="fGtext" name="fGtext">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfGtext</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>241</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Has text
+ effect</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fGtext-->
+ <!--DFFOPT gtextFVertical-->
+ <UML:Class xmi.id="gtextFVertical" name="gtextFVertical">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFVertical</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>242</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Rotate
+ characters</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFVertical-->
+ <!--DFFOPT gtextFKern-->
+ <UML:Class xmi.id="gtextFKern" name="gtextFKern">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFKern</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>243</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Kern
+ characters</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFKern-->
+ <!--DFFOPT gtextFTight-->
+ <UML:Class xmi.id="gtextFTight" name="gtextFTight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFTight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>244</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Tightening or
+ tracking</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFTight-->
+ <!--DFFOPT gtextFStretch-->
+ <UML:Class xmi.id="gtextFStretch" name="gtextFStretch">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFStretch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>245</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Stretch to fit
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFStretch-->
+ <!--DFFOPT gtextFShrinkFit-->
+ <UML:Class xmi.id="gtextFShrinkFit" name="gtextFShrinkFit">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFShrinkFit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>246</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Char bounding
+ box</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFShrinkFit-->
+ <!--DFFOPT gtextFBestFit-->
+ <UML:Class xmi.id="gtextFBestFit" name="gtextFBestFit">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFBestFit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>247</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Scale
+ text-on-path</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFBestFit-->
+ <!--DFFOPT gtextFNormalize-->
+ <UML:Class xmi.id="gtextFNormalize" name="gtextFNormalize">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFNormalize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>248</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Stretch char
+ height</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFNormalize-->
+ <!--DFFOPT gtextFDxMeasure-->
+ <UML:Class xmi.id="gtextFDxMeasure" name="gtextFDxMeasure">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFDxMeasure</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>249</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Do not measure along
+ path</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFDxMeasure-->
+ <!--DFFOPT gtextFBold-->
+ <UML:Class xmi.id="gtextFBold" name="gtextFBold">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFBold</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>250</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Bold font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFBold-->
+ <!--DFFOPT gtextFItalic-->
+ <UML:Class xmi.id="gtextFItalic" name="gtextFItalic">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFItalic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>251</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Italic font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFItalic-->
+ <!--DFFOPT gtextFUnderline-->
+ <UML:Class xmi.id="gtextFUnderline" name="gtextFUnderline">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFUnderline</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>252</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Underline
+ font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFUnderline-->
+ <!--DFFOPT gtextFShadow-->
+ <UML:Class xmi.id="gtextFShadow" name="gtextFShadow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFShadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>253</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shadow font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFShadow-->
+ <!--DFFOPT gtextFSmallcaps-->
+ <UML:Class xmi.id="gtextFSmallcaps" name="gtextFSmallcaps">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFSmallcaps</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>254</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Small caps
+ font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFSmallcaps-->
+ <!--DFFOPT gtextFStrikethrough-->
+ <UML:Class xmi.id="gtextFStrikethrough" name="gtextFStrikethrough">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgtextFStrikethrough</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>255</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Strike through
+ font</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT gtextFStrikethrough-->
+ <!--DFFOPT cropFromTop-->
+ <UML:Class xmi.id="cropFromTop" name="cropFromTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpcropFromTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>256</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16
+ fraction times total image width or height, as
+ appropriate.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT cropFromTop-->
+ <!--DFFOPT cropFromBottom-->
+ <UML:Class xmi.id="cropFromBottom" name="cropFromBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpcropFromBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>257</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT cropFromBottom-->
+ <!--DFFOPT cropFromLeft-->
+ <UML:Class xmi.id="cropFromLeft" name="cropFromLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpcropFromLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>258</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT cropFromLeft-->
+ <!--DFFOPT cropFromRight-->
+ <UML:Class xmi.id="cropFromRight" name="cropFromRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpcropFromRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>259</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT cropFromRight-->
+ <!--DFFOPT pib-->
+ <UML:Class xmi.id="pib" name="pib">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppib</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>260</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip to
+ display</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pib-->
+ <!--DFFOPT pibName-->
+ <UML:Class xmi.id="pibName" name="pibName">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppibName</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>261</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip file
+ name</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pibName-->
+ <!--DFFOPT pibFlags-->
+ <UML:Class xmi.id="pibFlags" name="pibFlags">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppibFlags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>262</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Comment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip
+ flags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pibFlags-->
+ <!--DFFOPT pictureTransparent-->
+ <UML:Class xmi.id="pictureTransparent" name="pictureTransparent">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureTransparent</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>263</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>~0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>transparent
+ color (none if ~0UL)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pictureTransparent-->
+ <!--DFFOPT pictureContrast-->
+ <UML:Class xmi.id="pictureContrast" name="pictureContrast">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureContrast</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>264</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>contrast
+ setting</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pictureContrast-->
+ <!--DFFOPT pictureBrightness-->
+ <UML:Class xmi.id="pictureBrightness" name="pictureBrightness">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureBrightness</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>265</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>brightness
+ setting</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pictureBrightness-->
+ <!--DFFOPT pictureGamma-->
+ <UML:Class xmi.id="pictureGamma" name="pictureGamma">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureGamma</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>266</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16
+ gamma</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pictureGamma-->
+ <!--DFFOPT pictureId-->
+ <UML:Class xmi.id="pictureId" name="pictureId">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureId</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>267</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Host-defined
+ ID for OLE objects (usually a pointer)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pictureId-->
+ <!--DFFOPT pictureDblCrMod-->
+ <UML:Class xmi.id="pictureDblCrMod" name="pictureDblCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureDblCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>268</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>This</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Modification
+ used if shape has double shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pictureDblCrMod-->
+ <!--DFFOPT pictureFillCrMod-->
+ <UML:Class xmi.id="pictureFillCrMod" name="pictureFillCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureFillCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>269</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undefined</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pictureFillCrMod-->
+ <!--DFFOPT pictureLineCrMod-->
+ <UML:Class xmi.id="pictureLineCrMod" name="pictureLineCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureLineCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>270</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undefined</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pictureLineCrMod-->
+ <!--DFFOPT pibPrint-->
+ <UML:Class xmi.id="pibPrint" name="pibPrint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppibPrint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>271</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip to
+ display when printing</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pibPrint-->
+ <!--DFFOPT pibPrintName-->
+ <UML:Class xmi.id="pibPrintName" name="pibPrintName">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppibPrintName</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>272</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip file
+ name</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pibPrintName-->
+ <!--DFFOPT pibPrintFlags-->
+ <UML:Class xmi.id="pibPrintFlags" name="pibPrintFlags">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppibPrintFlags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>273</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Comment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip
+ flags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pibPrintFlags-->
+ <!--DFFOPT fNoHitTestPicture-->
+ <UML:Class xmi.id="fNoHitTestPicture" name="fNoHitTestPicture">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfNoHitTestPicture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>316</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Do not hit
+ test the picture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fNoHitTestPicture-->
+ <!--DFFOPT pictureGray-->
+ <UML:Class xmi.id="pictureGray" name="pictureGray">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureGray</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>317</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>grayscale
+ display</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pictureGray-->
+ <!--DFFOPT pictureBiLevel-->
+ <UML:Class xmi.id="pictureBiLevel" name="pictureBiLevel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureBiLevel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>318</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>bi-level
+ display</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pictureBiLevel-->
+ <!--DFFOPT pictureActive-->
+ <UML:Class xmi.id="pictureActive" name="pictureActive">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppictureActive</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>319</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Server is
+ active (OLE objects only)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pictureActive-->
+ <!--DFFOPT geoLeft-->
+ <UML:Class xmi.id="geoLeft" name="geoLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgeoLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>320</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Defines the G (geometry)
+ coordinate space.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT geoLeft-->
+ <!--DFFOPT geoTop-->
+ <UML:Class xmi.id="geoTop" name="geoTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgeoTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>321</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT geoTop-->
+ <!--DFFOPT geoRight-->
+ <UML:Class xmi.id="geoRight" name="geoRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgeoRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>322</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>21600</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT geoRight-->
+ <!--DFFOPT geoBottom-->
+ <UML:Class xmi.id="geoBottom" name="geoBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpgeoBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>323</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>21600</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT geoBottom-->
+ <!--DFFOPT shapePath-->
+ <UML:Class xmi.id="shapePath" name="shapePath">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshapePath</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>324</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>msoshapeLinesClosed</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shapePath-->
+ <!--DFFOPT pVertices-->
+ <UML:Class xmi.id="pVertices" name="pVertices">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppVertices</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>325</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>An array of points, in G
+ units.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pVertices-->
+ <!--DFFOPT pSegmentInfo-->
+ <UML:Class xmi.id="pSegmentInfo" name="pSegmentInfo">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppSegmentInfo</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>326</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pSegmentInfo-->
+ <!--DFFOPT adjustValue-->
+ <UML:Class xmi.id="adjustValue" name="adjustValue">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjustValue</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>327</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Adjustment values
+ corresponding to the positions of the adjust handles of the shape.
+ The number of values used and their allowable ranges vary from
+ shape type to shape type.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT adjustValue-->
+ <!--DFFOPT adjust2Value-->
+ <UML:Class xmi.id="adjust2Value" name="adjust2Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust2Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>328</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT adjust2Value-->
+ <!--DFFOPT adjust3Value-->
+ <UML:Class xmi.id="adjust3Value" name="adjust3Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust3Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>329</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT adjust3Value-->
+ <!--DFFOPT adjust4Value-->
+ <UML:Class xmi.id="adjust4Value" name="adjust4Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust4Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>330</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT adjust4Value-->
+ <!--DFFOPT adjust5Value-->
+ <UML:Class xmi.id="adjust5Value" name="adjust5Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust5Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>331</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT adjust5Value-->
+ <!--DFFOPT adjust6Value-->
+ <UML:Class xmi.id="adjust6Value" name="adjust6Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust6Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>332</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT adjust6Value-->
+ <!--DFFOPT adjust7Value-->
+ <UML:Class xmi.id="adjust7Value" name="adjust7Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust7Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>333</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT adjust7Value-->
+ <!--DFFOPT adjust8Value-->
+ <UML:Class xmi.id="adjust8Value" name="adjust8Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust8Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>334</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT adjust8Value-->
+ <!--DFFOPT adjust9Value-->
+ <UML:Class xmi.id="adjust9Value" name="adjust9Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust9Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>335</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT adjust9Value-->
+ <!--DFFOPT adjust10Value-->
+ <UML:Class xmi.id="adjust10Value" name="adjust10Value">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpadjust10Value</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>336</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT adjust10Value-->
+ <!--DFFOPT fShadowOK-->
+ <UML:Class xmi.id="fShadowOK" name="fShadowOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfShadowOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>378</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shadow may be
+ set</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fShadowOK-->
+ <!--DFFOPT f3DOK-->
+ <UML:Class xmi.id="f3DOK" name="f3DOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpf3DOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>379</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>3D may be set</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT f3DOK-->
+ <!--DFFOPT fLineOK-->
+ <UML:Class xmi.id="fLineOK" name="fLineOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLineOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>380</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Line style may be
+ set</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fLineOK-->
+ <!--DFFOPT fGtextOK-->
+ <UML:Class xmi.id="fGtextOK" name="fGtextOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfGtextOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>381</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Text effect (WordArt)
+ supported</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fGtextOK-->
+ <!--DFFOPT fFillShadeShapeOK-->
+ <UML:Class xmi.id="fFillShadeShapeOK" name="fFillShadeShapeOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfFillShadeShapeOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>382</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue> </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fFillShadeShapeOK-->
+ <!--DFFOPT fFillOK-->
+ <UML:Class xmi.id="fFillOK" name="fFillOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfFillOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>383</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>OK to fill the shape
+ through the UI or VBA?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fFillOK-->
+ <!--DFFOPT fillType-->
+ <UML:Class xmi.id="fillType" name="fillType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>384</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Solid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Type of
+ fill</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillType-->
+ <!--DFFOPT fillColor-->
+ <UML:Class xmi.id="fillColor" name="fillColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>385</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>white</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Foreground
+ color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillColor-->
+ <!--DFFOPT fillOpacity-->
+ <UML:Class xmi.id="fillOpacity" name="fillOpacity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillOpacity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>386</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillOpacity-->
+ <!--DFFOPT fillBackColor-->
+ <UML:Class xmi.id="fillBackColor" name="fillBackColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillBackColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>387</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>white</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Background
+ color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillBackColor-->
+ <!--DFFOPT fillBackOpacity-->
+ <UML:Class xmi.id="fillBackOpacity" name="fillBackOpacity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillBackOpacity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>388</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shades
+ only</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillBackOpacity-->
+ <!--DFFOPT fillCrMod-->
+ <UML:Class xmi.id="fillCrMod" name="fillCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>389</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undefined</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Modification
+ for BW views</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillCrMod-->
+ <!--DFFOPT fillBlip-->
+ <UML:Class xmi.id="fillBlip" name="fillBlip">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillBlip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>390</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Pattern/texture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillBlip-->
+ <!--DFFOPT fillBlipName-->
+ <UML:Class xmi.id="fillBlipName" name="fillBlipName">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillBlipName</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>391</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip file
+ name</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillBlipName-->
+ <!--DFFOPT fillBlipFlags-->
+ <UML:Class xmi.id="fillBlipFlags" name="fillBlipFlags">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillBlipFlags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>392</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Comment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip
+ flags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillBlipFlags-->
+ <!--DFFOPT fillWidth-->
+ <UML:Class xmi.id="fillWidth" name="fillWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>393</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How big (A
+ units) to make a metafile texture.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillWidth-->
+ <!--DFFOPT fillHeight-->
+ <UML:Class xmi.id="fillHeight" name="fillHeight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillHeight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>394</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillHeight-->
+ <!--DFFOPT fillAngle-->
+ <UML:Class xmi.id="fillAngle" name="fillAngle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillAngle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>395</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fade angle -
+ degrees in 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillAngle-->
+ <!--DFFOPT fillFocus-->
+ <UML:Class xmi.id="fillFocus" name="fillFocus">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillFocus</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>396</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Linear shaded
+ fill focus percent</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillFocus-->
+ <!--DFFOPT fillToLeft-->
+ <UML:Class xmi.id="fillToLeft" name="fillToLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillToLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>397</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fraction
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillToLeft-->
+ <!--DFFOPT fillToTop-->
+ <UML:Class xmi.id="fillToTop" name="fillToTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillToTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>398</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fraction
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillToTop-->
+ <!--DFFOPT fillToRight-->
+ <UML:Class xmi.id="fillToRight" name="fillToRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillToRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>399</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fraction
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillToRight-->
+ <!--DFFOPT fillToBottom-->
+ <UML:Class xmi.id="fillToBottom" name="fillToBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillToBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>400</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fraction
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillToBottom-->
+ <!--DFFOPT fillRectLeft-->
+ <UML:Class xmi.id="fillRectLeft" name="fillRectLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillRectLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>401</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>For shaded
+ fills, use the specified rectangle instead of the shape's bounding
+ rect to define how large the fade is going to be.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillRectLeft-->
+ <!--DFFOPT fillRectTop-->
+ <UML:Class xmi.id="fillRectTop" name="fillRectTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillRectTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>402</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillRectTop-->
+ <!--DFFOPT fillRectRight-->
+ <UML:Class xmi.id="fillRectRight" name="fillRectRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillRectRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>403</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillRectRight-->
+ <!--DFFOPT fillRectBottom-->
+ <UML:Class xmi.id="fillRectBottom" name="fillRectBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillRectBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>404</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillRectBottom-->
+ <!--DFFOPT fillDztype-->
+ <UML:Class xmi.id="fillDztype" name="fillDztype">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillDztype</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>405</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Default</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillDztype-->
+ <!--DFFOPT fillShadePreset-->
+ <UML:Class xmi.id="fillShadePreset" name="fillShadePreset">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillShadePreset</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>406</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Special
+ shades</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillShadePreset-->
+ <!--DFFOPT fillShadeColors-->
+ <UML:Class xmi.id="fillShadeColors" name="fillShadeColors">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillShadeColors</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>407</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>a preset
+ array of colors</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillShadeColors-->
+ <!--DFFOPT fillOriginX-->
+ <UML:Class xmi.id="fillOriginX" name="fillOriginX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillOriginX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>408</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillOriginX-->
+ <!--DFFOPT fillOriginY-->
+ <UML:Class xmi.id="fillOriginY" name="fillOriginY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillOriginY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>409</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillOriginY-->
+ <!--DFFOPT fillShapeOriginX-->
+ <UML:Class xmi.id="fillShapeOriginX" name="fillShapeOriginX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillShapeOriginX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>410</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillShapeOriginX-->
+ <!--DFFOPT fillShapeOriginY-->
+ <UML:Class xmi.id="fillShapeOriginY" name="fillShapeOriginY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillShapeOriginY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>411</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillShapeOriginY-->
+ <!--DFFOPT fillShadeType-->
+ <UML:Class xmi.id="fillShadeType" name="fillShadeType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillShadeType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>412</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Default</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Type of
+ shading, if a shaded (gradient) fill.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillShadeType-->
+ <!--DFFOPT fFilled-->
+ <UML:Class xmi.id="fFilled" name="fFilled">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfFilled</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>443</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Is shape
+ filled?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fFilled-->
+ <!--DFFOPT fHitTestFill-->
+ <UML:Class xmi.id="fHitTestFill" name="fHitTestFill">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfHitTestFill</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>444</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Should we hit
+ test fill?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fHitTestFill-->
+ <!--DFFOPT fillShape-->
+ <UML:Class xmi.id="fillShape" name="fillShape">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillShape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>445</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Register
+ pattern on shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillShape-->
+ <!--DFFOPT fillUseRect-->
+ <UML:Class xmi.id="fillUseRect" name="fillUseRect">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfillUseRect</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>446</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Use the large
+ rect?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fillUseRect-->
+ <!--DFFOPT fNoFillHitTest-->
+ <UML:Class xmi.id="fNoFillHitTest" name="fNoFillHitTest">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfNoFillHitTest</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>447</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Hit test a
+ shape as though filled</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fNoFillHitTest-->
+ <!--DFFOPT lineColor-->
+ <UML:Class xmi.id="lineColor" name="lineColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>448</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>black</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Color of line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineColor-->
+ <!--DFFOPT lineOpacity-->
+ <UML:Class xmi.id="lineOpacity" name="lineOpacity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineOpacity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>449</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Not
+ implemented</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineOpacity-->
+ <!--DFFOPT lineBackColor-->
+ <UML:Class xmi.id="lineBackColor" name="lineBackColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineBackColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>450</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>white</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Background
+ color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineBackColor-->
+ <!--DFFOPT lineCrMod-->
+ <UML:Class xmi.id="lineCrMod" name="lineCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>451</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undefined</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Modification for BW
+ views</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineCrMod-->
+ <!--DFFOPT lineType-->
+ <UML:Class xmi.id="lineType" name="lineType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>452</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Solid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Type of line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineType-->
+ <!--DFFOPT lineFillBlip-->
+ <UML:Class xmi.id="lineFillBlip" name="lineFillBlip">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillBlip</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>453</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Pattern/texture</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineFillBlip-->
+ <!--DFFOPT lineFillBlipName-->
+ <UML:Class xmi.id="lineFillBlipName" name="lineFillBlipName">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillBlipName</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>454</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip file
+ name</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineFillBlipName-->
+ <!--DFFOPT lineFillBlipFlags-->
+ <UML:Class xmi.id="lineFillBlipFlags" name="lineFillBlipFlags">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillBlipFlags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>455</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Comment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Blip flags</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineFillBlipFlags-->
+ <!--DFFOPT lineFillWidth-->
+ <UML:Class xmi.id="lineFillWidth" name="lineFillWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>456</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How big (A units) to make
+ a metafile texture.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineFillWidth-->
+ <!--DFFOPT lineFillHeight-->
+ <UML:Class xmi.id="lineFillHeight" name="lineFillHeight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillHeight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>457</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineFillHeight-->
+ <!--DFFOPT lineFillDztype-->
+ <UML:Class xmi.id="lineFillDztype" name="lineFillDztype">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillDztype</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>458</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Default</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How to interpret
+ fillWidth/Height numbers.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineFillDztype-->
+ <!--DFFOPT lineWidth-->
+ <UML:Class xmi.id="lineWidth" name="lineWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>459</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9525</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>A units; 1pt == 12700
+ EMUs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineWidth-->
+ <!--DFFOPT lineMiterLimit-->
+ <UML:Class xmi.id="lineMiterLimit" name="lineMiterLimit">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineMiterLimit</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>460</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>8&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>ratio (16.16) of
+ width</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineMiterLimit-->
+ <!--DFFOPT lineStyle-->
+ <UML:Class xmi.id="lineStyle" name="lineStyle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineStyle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>461</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Simple</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Draw parallel
+ lines?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineStyle-->
+ <!--DFFOPT lineDashing-->
+ <UML:Class xmi.id="lineDashing" name="lineDashing">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineDashing</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>462</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Solid</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Can be overridden
+ by:</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineDashing-->
+ <!--DFFOPT lineDashStyle-->
+ <UML:Class xmi.id="lineDashStyle" name="lineDashStyle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineDashStyle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>463</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>As Win32
+ ExtCreatePen</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineDashStyle-->
+ <!--DFFOPT lineStartArrowhead-->
+ <UML:Class xmi.id="lineStartArrowhead" name="lineStartArrowhead">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineStartArrowhead</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>464</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NoEnd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Arrow at
+ start</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineStartArrowhead-->
+ <!--DFFOPT lineEndArrowhead-->
+ <UML:Class xmi.id="lineEndArrowhead" name="lineEndArrowhead">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineEndArrowhead</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>465</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NoEnd</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Arrow at end</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineEndArrowhead-->
+ <!--DFFOPT lineStartArrowWidth-->
+ <UML:Class xmi.id="lineStartArrowWidth" name="lineStartArrowWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineStartArrowWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>466</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>MediumWidthArrow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Arrow at
+ start</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineStartArrowWidth-->
+ <!--DFFOPT lineStartArrowLength-->
+ <UML:Class xmi.id="lineStartArrowLength" name="lineStartArrowLength">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineStartArrowLength</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>467</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>MediumLenArrow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Arrow at end</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineStartArrowLength-->
+ <!--DFFOPT lineEndArrowWidth-->
+ <UML:Class xmi.id="lineEndArrowWidth" name="lineEndArrowWidth">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineEndArrowWidth</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>468</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>MediumWidthArrow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Arrow at
+ start</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineEndArrowWidth-->
+ <!--DFFOPT lineEndArrowLength-->
+ <UML:Class xmi.id="lineEndArrowLength" name="lineEndArrowLength">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineEndArrowLength</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>469</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>MediumLenArrow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Arrow at end</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineEndArrowLength-->
+ <!--DFFOPT lineJoinStyle-->
+ <UML:Class xmi.id="lineJoinStyle" name="lineJoinStyle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineJoinStyle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>470</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>JoinRound</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How to join
+ lines</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineJoinStyle-->
+ <!--DFFOPT lineEndCapStyle-->
+ <UML:Class xmi.id="lineEndCapStyle" name="lineEndCapStyle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineEndCapStyle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>471</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>EndCapFlat</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>How to end
+ lines</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineEndCapStyle-->
+ <!--DFFOPT fArrowheadsOK-->
+ <UML:Class xmi.id="fArrowheadsOK" name="fArrowheadsOK">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfArrowheadsOK</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>507</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Allow arrowheads if prop.
+ is set</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fArrowheadsOK-->
+ <!--DFFOPT fLine-->
+ <UML:Class xmi.id="fLine" name="fLine">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLine</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>508</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Any line?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fLine-->
+ <!--DFFOPT fHitTestLine-->
+ <UML:Class xmi.id="fHitTestLine" name="fHitTestLine">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfHitTestLine</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>509</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Should we hit test
+ lines?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fHitTestLine-->
+ <!--DFFOPT lineFillShape-->
+ <UML:Class xmi.id="lineFillShape" name="lineFillShape">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplineFillShape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>510</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Register pattern on
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lineFillShape-->
+ <!--DFFOPT fNoLineDrawDash-->
+ <UML:Class xmi.id="fNoLineDrawDash" name="fNoLineDrawDash">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfNoLineDrawDash</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>511</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Draw a dashed line if no
+ line</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fNoLineDrawDash-->
+ <!--DFFOPT shadowType-->
+ <UML:Class xmi.id="shadowType" name="shadowType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>512</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Offset</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Type of
+ effect</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowType-->
+ <!--DFFOPT shadowColor-->
+ <UML:Class xmi.id="shadowColor" name="shadowColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>513</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0x808080</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Foreground
+ color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowColor-->
+ <!--DFFOPT shadowHighlight-->
+ <UML:Class xmi.id="shadowHighlight" name="shadowHighlight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowHighlight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>514</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0xCBCBCB</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Embossed
+ color</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowHighlight-->
+ <!--DFFOPT shadowCrMod-->
+ <UML:Class xmi.id="shadowCrMod" name="shadowCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>515</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undefined</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Modification for BW
+ views</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowCrMod-->
+ <!--DFFOPT shadowOpacity-->
+ <UML:Class xmi.id="shadowOpacity" name="shadowOpacity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowOpacity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>516</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowOpacity-->
+ <!--DFFOPT shadowOffsetX-->
+ <UML:Class xmi.id="shadowOffsetX" name="shadowOffsetX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowOffsetX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>517</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>25400</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Offset shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowOffsetX-->
+ <!--DFFOPT shadowOffsetY-->
+ <UML:Class xmi.id="shadowOffsetY" name="shadowOffsetY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowOffsetY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>518</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>25400</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Offset shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowOffsetY-->
+ <!--DFFOPT shadowSecondOffsetX-->
+ <UML:Class xmi.id="shadowSecondOffsetX" name="shadowSecondOffsetX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowSecondOffsetX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>519</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Double offset
+ shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowSecondOffsetX-->
+ <!--DFFOPT shadowSecondOffsetY-->
+ <UML:Class xmi.id="shadowSecondOffsetY" name="shadowSecondOffsetY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowSecondOffsetY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>520</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Double offset
+ shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowSecondOffsetY-->
+ <!--DFFOPT shadowScaleXToX-->
+ <UML:Class xmi.id="shadowScaleXToX" name="shadowScaleXToX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowScaleXToX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>521</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowScaleXToX-->
+ <!--DFFOPT shadowScaleYToX-->
+ <UML:Class xmi.id="shadowScaleYToX" name="shadowScaleYToX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowScaleYToX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>522</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowScaleYToX-->
+ <!--DFFOPT shadowScaleXToY-->
+ <UML:Class xmi.id="shadowScaleXToY" name="shadowScaleXToY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowScaleXToY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>523</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowScaleXToY-->
+ <!--DFFOPT shadowScaleYToY-->
+ <UML:Class xmi.id="shadowScaleYToY" name="shadowScaleYToY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowScaleYToY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>524</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowScaleYToY-->
+ <!--DFFOPT shadowPerspectiveX-->
+ <UML:Class xmi.id="shadowPerspectiveX" name="shadowPerspectiveX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowPerspectiveX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>525</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16 /
+ weight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowPerspectiveX-->
+ <!--DFFOPT shadowPerspectiveY-->
+ <UML:Class xmi.id="shadowPerspectiveY" name="shadowPerspectiveY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowPerspectiveY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>526</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>16.16 /
+ weight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowPerspectiveY-->
+ <!--DFFOPT shadowWeight-->
+ <UML:Class xmi.id="shadowWeight" name="shadowWeight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowWeight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>527</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>scaling
+ factor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowWeight-->
+ <!--DFFOPT shadowOriginX-->
+ <UML:Class xmi.id="shadowOriginX" name="shadowOriginX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowOriginX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>528</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowOriginX-->
+ <!--DFFOPT shadowOriginY-->
+ <UML:Class xmi.id="shadowOriginY" name="shadowOriginY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpshadowOriginY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>529</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT shadowOriginY-->
+ <!--DFFOPT fShadow-->
+ <UML:Class xmi.id="fShadow" name="fShadow">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfShadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>574</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Any shadow?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fShadow-->
+ <!--DFFOPT fshadowObscured-->
+ <UML:Class xmi.id="fshadowObscured" name="fshadowObscured">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfshadowObscured</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>575</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Excel5-style
+ shadow</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fshadowObscured-->
+ <!--DFFOPT perspectiveType-->
+ <UML:Class xmi.id="perspectiveType" name="perspectiveType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>576</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Where transform
+ applies</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT perspectiveType-->
+ <!--DFFOPT perspectiveOffsetX-->
+ <UML:Class xmi.id="perspectiveOffsetX" name="perspectiveOffsetX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveOffsetX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>577</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The LONG values define a
+ transformation matrix, effectively, each value is scaled by the
+ perspectiveWeight parameter.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT perspectiveOffsetX-->
+ <!--DFFOPT perspectiveOffsetY-->
+ <UML:Class xmi.id="perspectiveOffsetY" name="perspectiveOffsetY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveOffsetY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>578</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT perspectiveOffsetY-->
+ <!--DFFOPT perspectiveScaleXToX-->
+ <UML:Class xmi.id="perspectiveScaleXToX" name="perspectiveScaleXToX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveScaleXToX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>579</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT perspectiveScaleXToX-->
+ <!--DFFOPT perspectiveScaleYToX-->
+ <UML:Class xmi.id="perspectiveScaleYToX" name="perspectiveScaleYToX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveScaleYToX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>580</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT perspectiveScaleYToX-->
+ <!--DFFOPT perspectiveScaleXToY-->
+ <UML:Class xmi.id="perspectiveScaleXToY" name="perspectiveScaleXToY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveScaleXToY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>581</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT perspectiveScaleXToY-->
+ <!--DFFOPT perspectiveScaleYToY-->
+ <UML:Class xmi.id="perspectiveScaleYToY" name="perspectiveScaleYToY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveScaleYToY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>582</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT perspectiveScaleYToY-->
+ <!--DFFOPT perspectivePerspectiveX-->
+ <UML:Class xmi.id="perspectivePerspectiveX" name="perspectivePerspectiveX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectivePerspectiveX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>583</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT perspectivePerspectiveX-->
+ <!--DFFOPT perspectivePerspectiveY-->
+ <UML:Class xmi.id="perspectivePerspectiveY" name="perspectivePerspectiveY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectivePerspectiveY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>584</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT perspectivePerspectiveY-->
+ <!--DFFOPT perspectiveWeight-->
+ <UML:Class xmi.id="perspectiveWeight" name="perspectiveWeight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveWeight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>585</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Scaling
+ factor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT perspectiveWeight-->
+ <!--DFFOPT perspectiveOriginX-->
+ <UML:Class xmi.id="perspectiveOriginX" name="perspectiveOriginX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveOriginX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>586</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT perspectiveOriginX-->
+ <!--DFFOPT perspectiveOriginY-->
+ <UML:Class xmi.id="perspectiveOriginY" name="perspectiveOriginY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpperspectiveOriginY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>587</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1&lt;&lt;15</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT perspectiveOriginY-->
+ <!--DFFOPT fPerspective-->
+ <UML:Class xmi.id="fPerspective" name="fPerspective">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfPerspective</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>639</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>On/off</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fPerspective-->
+ <!--DFFOPT c3DSpecularAmt-->
+ <UML:Class xmi.id="c3DSpecularAmt" name="c3DSpecularAmt">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DSpecularAmt</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>640</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed-point
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DSpecularAmt-->
+ <!--DFFOPT c3DDiffuseAmt-->
+ <UML:Class xmi.id="c3DDiffuseAmt" name="c3DDiffuseAmt">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DDiffuseAmt</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>641</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>65536</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed-point
+ 16.16</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DDiffuseAmt-->
+ <!--DFFOPT c3DShininess-->
+ <UML:Class xmi.id="c3DShininess" name="c3DShininess">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DShininess</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>642</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>5</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Default gives
+ OK results</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DShininess-->
+ <!--DFFOPT c3DEdgeThickness-->
+ <UML:Class xmi.id="c3DEdgeThickness" name="c3DEdgeThickness">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DEdgeThickness</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>643</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>12700</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Specular edge
+ thickness</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DEdgeThickness-->
+ <!--DFFOPT c3DExtrudeForward-->
+ <UML:Class xmi.id="c3DExtrudeForward" name="c3DExtrudeForward">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DExtrudeForward</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>644</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Distance of
+ extrusion in EMUs</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DExtrudeForward-->
+ <!--DFFOPT c3DExtrudeBackward-->
+ <UML:Class xmi.id="c3DExtrudeBackward" name="c3DExtrudeBackward">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DExtrudeBackward</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>645</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>457200</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DExtrudeBackward-->
+ <!--DFFOPT c3DExtrudePlane-->
+ <UML:Class xmi.id="c3DExtrudePlane" name="c3DExtrudePlane">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DExtrudePlane</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>646</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Extrusion
+ direction</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DExtrudePlane-->
+ <!--DFFOPT c3DExtrusionColor-->
+ <UML:Class xmi.id="c3DExtrusionColor" name="c3DExtrusionColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DExtrusionColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>647</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FillThenLine</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Basic color
+ of extruded part of shape; the lighting model used will determine
+ the exact shades used when rendering.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DExtrusionColor-->
+ <!--DFFOPT c3DCrMod-->
+ <UML:Class xmi.id="c3DCrMod" name="c3DCrMod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DCrMod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>648</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>undefined</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Modification
+ for BW views</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DCrMod-->
+ <!--DFFOPT f3D-->
+ <UML:Class xmi.id="f3D" name="f3D">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpf3D</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>700</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Does this
+ shape have a 3D effect?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT f3D-->
+ <!--DFFOPT fc3DMetallic-->
+ <UML:Class xmi.id="fc3DMetallic" name="fc3DMetallic">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DMetallic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>701</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Use metallic
+ specularity?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fc3DMetallic-->
+ <!--DFFOPT fc3DUseExtrusionColor-->
+ <UML:Class xmi.id="fc3DUseExtrusionColor" name="fc3DUseExtrusionColor">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DUseExtrusionColor</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>702</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fc3DUseExtrusionColor-->
+ <!--DFFOPT fc3DLightFace-->
+ <UML:Class xmi.id="fc3DLightFace" name="fc3DLightFace">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DLightFace</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>703</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fc3DLightFace-->
+ <!--DFFOPT c3DYRotationAngle-->
+ <UML:Class xmi.id="c3DYRotationAngle" name="c3DYRotationAngle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DYRotationAngle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>704</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>degrees (16.16) about y
+ axis</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DYRotationAngle-->
+ <!--DFFOPT c3DXRotationAngle-->
+ <UML:Class xmi.id="c3DXRotationAngle" name="c3DXRotationAngle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DXRotationAngle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>705</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>degrees (16.16) about x
+ axis</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DXRotationAngle-->
+ <!--DFFOPT c3DRotationAxisX-->
+ <UML:Class xmi.id="c3DRotationAxisX" name="c3DRotationAxisX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationAxisX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>706</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>100</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>These specify the
+ rotation axis; only their relative magnitudes matter.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DRotationAxisX-->
+ <!--DFFOPT c3DRotationAxisY-->
+ <UML:Class xmi.id="c3DRotationAxisY" name="c3DRotationAxisY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationAxisY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>707</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DRotationAxisY-->
+ <!--DFFOPT c3DRotationAxisZ-->
+ <UML:Class xmi.id="c3DRotationAxisZ" name="c3DRotationAxisZ">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationAxisZ</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>708</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DRotationAxisZ-->
+ <!--DFFOPT c3DRotationAngle-->
+ <UML:Class xmi.id="c3DRotationAngle" name="c3DRotationAngle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationAngle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>709</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>degrees (16.16) about
+ axis</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DRotationAngle-->
+ <!--DFFOPT c3DRotationCenterX-->
+ <UML:Class xmi.id="c3DRotationCenterX" name="c3DRotationCenterX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationCenterX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>710</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rotation center x (16.16
+ or g-units)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DRotationCenterX-->
+ <!--DFFOPT c3DRotationCenterY-->
+ <UML:Class xmi.id="c3DRotationCenterY" name="c3DRotationCenterY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationCenterY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>711</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rotation center y (16.16
+ or g-units)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DRotationCenterY-->
+ <!--DFFOPT c3DRotationCenterZ-->
+ <UML:Class xmi.id="c3DRotationCenterZ" name="c3DRotationCenterZ">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRotationCenterZ</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>712</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>rotation center z
+ (absolute (emus))</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DRotationCenterZ-->
+ <!--DFFOPT c3DRenderMode-->
+ <UML:Class xmi.id="c3DRenderMode" name="c3DRenderMode">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DRenderMode</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>713</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FullRender</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Full,wireframe, or
+ bcube</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DRenderMode-->
+ <!--DFFOPT c3DTolerance-->
+ <UML:Class xmi.id="c3DTolerance" name="c3DTolerance">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DTolerance</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>714</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>30000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>pixels
+ (16.16)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DTolerance-->
+ <!--DFFOPT c3DXViewpoint-->
+ <UML:Class xmi.id="c3DXViewpoint" name="c3DXViewpoint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DXViewpoint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>715</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1250000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>X view point
+ (emus)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DXViewpoint-->
+ <!--DFFOPT c3DYViewpoint-->
+ <UML:Class xmi.id="c3DYViewpoint" name="c3DYViewpoint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DYViewpoint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>716</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>-1250000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Y view point
+ (emus)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DYViewpoint-->
+ <!--DFFOPT c3DZViewpoint-->
+ <UML:Class xmi.id="c3DZViewpoint" name="c3DZViewpoint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DZViewpoint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>717</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9000000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Z view distance
+ (emus)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DZViewpoint-->
+ <!--DFFOPT c3DOriginX-->
+ <UML:Class xmi.id="c3DOriginX" name="c3DOriginX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DOriginX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>718</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>32768</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DOriginX-->
+ <!--DFFOPT c3DOriginY-->
+ <UML:Class xmi.id="c3DOriginY" name="c3DOriginY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DOriginY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>719</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>-32768</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DOriginY-->
+ <!--DFFOPT c3DSkewAngle-->
+ <UML:Class xmi.id="c3DSkewAngle" name="c3DSkewAngle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DSkewAngle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>720</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>-8847360</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>degree (16.16) skew
+ angle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DSkewAngle-->
+ <!--DFFOPT c3DSkewAmount-->
+ <UML:Class xmi.id="c3DSkewAmount" name="c3DSkewAmount">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DSkewAmount</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>721</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>50</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Percentage skew
+ amount</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DSkewAmount-->
+ <!--DFFOPT c3DAmbientIntensity-->
+ <UML:Class xmi.id="c3DAmbientIntensity" name="c3DAmbientIntensity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DAmbientIntensity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>722</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>20000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed point
+ intensity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DAmbientIntensity-->
+ <!--DFFOPT c3DKeyX-->
+ <UML:Class xmi.id="c3DKeyX" name="c3DKeyX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DKeyX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>723</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>50000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Key light source
+ direc-</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DKeyX-->
+ <!--DFFOPT c3DKeyY-->
+ <UML:Class xmi.id="c3DKeyY" name="c3DKeyY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DKeyY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>724</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>tion; only their
+ relative</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DKeyY-->
+ <!--DFFOPT c3DKeyZ-->
+ <UML:Class xmi.id="c3DKeyZ" name="c3DKeyZ">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DKeyZ</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>725</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>magnitudes
+ matter</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DKeyZ-->
+ <!--DFFOPT c3DKeyIntensity-->
+ <UML:Class xmi.id="c3DKeyIntensity" name="c3DKeyIntensity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DKeyIntensity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>726</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>38000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed point
+ intensity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DKeyIntensity-->
+ <!--DFFOPT c3DFillX-->
+ <UML:Class xmi.id="c3DFillX" name="c3DFillX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DFillX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>727</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>-50000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fill light source
+ direc-</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DFillX-->
+ <!--DFFOPT c3DFillY-->
+ <UML:Class xmi.id="c3DFillY" name="c3DFillY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DFillY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>728</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>tion; only their
+ relative</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DFillY-->
+ <!--DFFOPT c3DFillZ-->
+ <UML:Class xmi.id="c3DFillZ" name="c3DFillZ">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DFillZ</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>729</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>10000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>magnitudes
+ matter</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DFillZ-->
+ <!--DFFOPT c3DFillIntensity-->
+ <UML:Class xmi.id="c3DFillIntensity" name="c3DFillIntensity">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpc3DFillIntensity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>730</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>38000</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Fixed point
+ intensity</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT c3DFillIntensity-->
+ <!--DFFOPT fc3DConstrainRotation-->
+ <UML:Class xmi.id="fc3DConstrainRotation" name="fc3DConstrainRotation">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DConstrainRotation</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>763</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fc3DConstrainRotation-->
+ <!--DFFOPT fc3DRotationCenterAuto-->
+ <UML:Class xmi.id="fc3DRotationCenterAuto" name="fc3DRotationCenterAuto">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DRotationCenterAuto</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>764</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fc3DRotationCenterAuto-->
+ <!--DFFOPT fc3DParallel-->
+ <UML:Class xmi.id="fc3DParallel" name="fc3DParallel">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DParallel</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>765</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Parallel
+ projection?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fc3DParallel-->
+ <!--DFFOPT fc3DKeyHarsh-->
+ <UML:Class xmi.id="fc3DKeyHarsh" name="fc3DKeyHarsh">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DKeyHarsh</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>766</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Is key lighting
+ harsh?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fc3DKeyHarsh-->
+ <!--DFFOPT fc3DFillHarsh-->
+ <UML:Class xmi.id="fc3DFillHarsh" name="fc3DFillHarsh">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfc3DFillHarsh</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>767</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Is fill lighting
+ harsh?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fc3DFillHarsh-->
+ <!--DFFOPT hspMaster-->
+ <UML:Class xmi.id="hspMaster" name="hspMaster">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shphspMaster</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>769</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>master
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT hspMaster-->
+ <!--DFFOPT cxstyle-->
+ <UML:Class xmi.id="cxstyle" name="cxstyle">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpcxstyle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>771</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>None</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Type of
+ connector</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT cxstyle-->
+ <!--DFFOPT bWMode-->
+ <UML:Class xmi.id="bWMode" name="bWMode">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpbWMode</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>772</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Automatic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Settings for
+ modifications to be made when in different forms of black-and-white
+ mode.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT bWMode-->
+ <!--DFFOPT bWModePureBW-->
+ <UML:Class xmi.id="bWModePureBW" name="bWModePureBW">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpbWModePureBW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>773</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Automatic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT bWModePureBW-->
+ <!--DFFOPT bWModeBW-->
+ <UML:Class xmi.id="bWModeBW" name="bWModeBW">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpbWModeBW</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>774</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Automatic</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT bWModeBW-->
+ <!--DFFOPT fOleIcon-->
+ <UML:Class xmi.id="fOleIcon" name="fOleIcon">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfOleIcon</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>826</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>For OLE
+ objects, whether the object is in icon form</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fOleIcon-->
+ <!--DFFOPT fPreferRelativeResize-->
+ <UML:Class xmi.id="fPreferRelativeResize" name="fPreferRelativeResize">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfPreferRelativeResize</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>827</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>For UI only.
+ Prefer relative resizing.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fPreferRelativeResize-->
+ <!--DFFOPT fLockShapeType-->
+ <UML:Class xmi.id="fLockShapeType" name="fLockShapeType">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfLockShapeType</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>828</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Lock the
+ shape type (don't allow Change Shape)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fLockShapeType-->
+ <!--DFFOPT fDeleteAttachedObject-->
+ <UML:Class xmi.id="fDeleteAttachedObject" name="fDeleteAttachedObject">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfDeleteAttachedObject</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>830</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fDeleteAttachedObject-->
+ <!--DFFOPT fBackground-->
+ <UML:Class xmi.id="fBackground" name="fBackground">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfBackground</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>831</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>If TRUE, this
+ is the background shape.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fBackground-->
+ <!--DFFOPT spcot-->
+ <UML:Class xmi.id="spcot" name="spcot">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpspcot</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>832</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TwoSegment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Callout type</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT spcot-->
+ <!--DFFOPT dxyCalloutGap-->
+ <UML:Class xmi.id="dxyCalloutGap" name="dxyCalloutGap">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxyCalloutGap</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>833</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/12 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Distance from box to
+ first point.(EMUs)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT dxyCalloutGap-->
+ <!--DFFOPT spcoa-->
+ <UML:Class xmi.id="spcoa" name="spcoa">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpspcoa</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>834</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Any</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Callout angle</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT spcoa-->
+ <!--DFFOPT spcod-->
+ <UML:Class xmi.id="spcod" name="spcod">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpspcod</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>835</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Specified</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Callout drop
+ type</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT spcod-->
+ <!--DFFOPT dxyCalloutDropSpecified-->
+ <UML:Class xmi.id="dxyCalloutDropSpecified" name="dxyCalloutDropSpecified">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxyCalloutDropSpecified</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>836</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>9 points</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>if msospcodSpecified, the
+ actual drop distance</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT dxyCalloutDropSpecified-->
+ <!--DFFOPT dxyCalloutLengthSpecified-->
+ <UML:Class xmi.id="dxyCalloutLengthSpecified" name="dxyCalloutLengthSpecified">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxyCalloutLengthSpecified</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>837</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>if
+ fCalloutLengthSpecified, the actual distance</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT dxyCalloutLengthSpecified-->
+ <!--DFFOPT fCallout-->
+ <UML:Class xmi.id="fCallout" name="fCallout">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCallout</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>889</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Is the shape a
+ callout?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fCallout-->
+ <!--DFFOPT fCalloutAccentBar-->
+ <UML:Class xmi.id="fCalloutAccentBar" name="fCalloutAccentBar">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCalloutAccentBar</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>890</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>does callout have accent
+ bar</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fCalloutAccentBar-->
+ <!--DFFOPT fCalloutTextBorder-->
+ <UML:Class xmi.id="fCalloutTextBorder" name="fCalloutTextBorder">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCalloutTextBorder</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>891</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>does callout have a text
+ border</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fCalloutTextBorder-->
+ <!--DFFOPT fCalloutMinusX-->
+ <UML:Class xmi.id="fCalloutMinusX" name="fCalloutMinusX">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCalloutMinusX</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>892</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fCalloutMinusX-->
+ <!--DFFOPT fCalloutMinusY-->
+ <UML:Class xmi.id="fCalloutMinusY" name="fCalloutMinusY">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCalloutMinusY</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>893</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fCalloutMinusY-->
+ <!--DFFOPT fCalloutDropAuto-->
+ <UML:Class xmi.id="fCalloutDropAuto" name="fCalloutDropAuto">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCalloutDropAuto</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>894</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>If true, then we
+ occasionally invert the drop distance</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fCalloutDropAuto-->
+ <!--DFFOPT fCalloutLengthSpecified-->
+ <UML:Class xmi.id="fCalloutLengthSpecified" name="fCalloutLengthSpecified">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfCalloutLengthSpecified</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>895</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>if true, we look at
+ dxyCalloutLengthSpecified</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fCalloutLengthSpecified-->
+ <!--DFFOPT wzName-->
+ <UML:Class xmi.id="wzName" name="wzName">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpwzName</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>896</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Shape Name (present only
+ if explicitly set)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT wzName-->
+ <!--DFFOPT wzDescription-->
+ <UML:Class xmi.id="wzDescription" name="wzDescription">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpwzDescription</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>897</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>String</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>alternate
+ text</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT wzDescription-->
+ <!--DFFOPT pihlShape-->
+ <UML:Class xmi.id="pihlShape" name="pihlShape">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppihlShape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>898</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The hyperlink in the
+ shape.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pihlShape-->
+ <!--DFFOPT pWrapPolygonVertices-->
+ <UML:Class xmi.id="pWrapPolygonVertices" name="pWrapPolygonVertices">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shppWrapPolygonVertices</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>899</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>unknown</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>NULL</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>The polygon that text
+ will be wrapped around (Word)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT pWrapPolygonVertices-->
+ <!--DFFOPT dxWrapDistLeft-->
+ <UML:Class xmi.id="dxWrapDistLeft" name="dxWrapDistLeft">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxWrapDistLeft</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>900</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/8 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Left wrapping distance
+ from text (Word)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT dxWrapDistLeft-->
+ <!--DFFOPT dyWrapDistTop-->
+ <UML:Class xmi.id="dyWrapDistTop" name="dyWrapDistTop">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdyWrapDistTop</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>901</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Top wrapping distance
+ from text (Word)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT dyWrapDistTop-->
+ <!--DFFOPT dxWrapDistRight-->
+ <UML:Class xmi.id="dxWrapDistRight" name="dxWrapDistRight">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdxWrapDistRight</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>902</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1/8 inch</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Right wrapping distance
+ from text (Word)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT dxWrapDistRight-->
+ <!--DFFOPT dyWrapDistBottom-->
+ <UML:Class xmi.id="dyWrapDistBottom" name="dyWrapDistBottom">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpdyWrapDistBottom</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>903</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Bottom wrapping distance
+ from text (Word)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT dyWrapDistBottom-->
+ <!--DFFOPT lidRegroup-->
+ <UML:Class xmi.id="lidRegroup" name="lidRegroup">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shplidRegroup</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>904</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U32</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>0</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Regroup ID</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT lidRegroup-->
+ <!--DFFOPT fEditedWrap-->
+ <UML:Class xmi.id="fEditedWrap" name="fEditedWrap">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfEditedWrap</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>953</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Has the wrap polygon been
+ edited?</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fEditedWrap-->
+ <!--DFFOPT fBehindDocument-->
+ <UML:Class xmi.id="fBehindDocument" name="fBehindDocument">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfBehindDocument</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>954</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Word-only (shape is
+ behind text)</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fBehindDocument-->
+ <!--DFFOPT fOnDblClickNotify-->
+ <UML:Class xmi.id="fOnDblClickNotify" name="fOnDblClickNotify">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfOnDblClickNotify</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>955</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Notify client on a double
+ click</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fOnDblClickNotify-->
+ <!--DFFOPT fIsButton-->
+ <UML:Class xmi.id="fIsButton" name="fIsButton">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfIsButton</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>956</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>A button shape (i.e.,
+ clicking performs an action). Set for shapes with attached
+ hyperlinks or macros.</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fIsButton-->
+ <!--DFFOPT fOneD-->
+ <UML:Class xmi.id="fOneD" name="fOneD">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfOneD</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>957</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1D adjustment</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fOneD-->
+ <!--DFFOPT fHidden-->
+ <UML:Class xmi.id="fHidden" name="fHidden">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfHidden</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>958</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>FALSE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Do not
+ display</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fHidden-->
+ <!--DFFOPT fPrint-->
+ <UML:Class xmi.id="fPrint" name="fPrint">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="dffopt"/>
+ </UML:ModelElement.stereotype>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>dff:shpfPrint</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="optname"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>959</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="fopid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>U8</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="type"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>1</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="isbool"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>TRUE</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="default"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>Print this
+ shape</UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </UML:Class>
+ <!--DFFOPT fPrint-->
+ <!--DFFOPT-->
+ </UML:Namespace.ownedElement>
+ </UML:Model>
+ </XMI.content>
+</XMI>
diff --git a/writerfilter/source/doctok/resources.xsl b/writerfilter/source/doctok/resources.xsl
new file mode 100644
index 000000000000..5ff0efe0edd1
--- /dev/null
+++ b/writerfilter/source/doctok/resources.xsl
@@ -0,0 +1,917 @@
+<!--
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:text>
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * http://www.openoffice.org/license.html
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+#ifndef INCLUDED_RESOURCES_HXX
+#define INCLUDED_RESOURCES_HXX
+
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+
+#ifndef INCLUDED_OUTPUT_WITH_DEPTH_HXX
+#include &lt;resourcemodel/OutputWithDepth.hxx&gt;
+#endif
+
+#ifndef INCLUDED_RESOURCESIDS_HXX
+#include &lt;doctok/resourceids.hxx&gt;
+#endif
+
+#ifndef INCLUDED_WW8_STRUCT_BASE_HXX
+#include &lt;WW8StructBase.hxx&gt;
+#endif
+
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_IMPL_HXX
+#include &lt;WW8ResourceModelImpl.hxx&gt;
+#endif
+
+#ifndef INCLUDED_WW8_PROPERTY_SET_IMPL_HXX
+#include &lt;WW8PropertySetImpl.hxx&gt;
+#endif
+
+#ifndef INCLUDED_DFF_HXX
+#include &lt;Dff.hxx&gt;
+#endif
+
+namespace writerfilter {
+namespace doctok {
+
+class WW8DocumentImpl;
+typedef const WW8DocumentImpl * WW8DocumentImplPointer;
+
+using namespace ::std;&#xa;</xsl:text>
+ <xsl:apply-templates select="//UML:Class" mode="class"/>
+ <xsl:text>
+rtl::OUString getDffOptName(sal_uInt32 nPid);
+bool isBooleanDffOpt(sal_uInt32 nId);
+}}
+#endif // INCLUDED_RESOURCES_HXX&#xa;</xsl:text></out>
+</xsl:template>
+
+ <xsl:template match="UML:Class" mode="class">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8resource"]'>
+ <xsl:apply-templates select="." mode="ww8resource"/>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "dffrecord"]'>
+ <xsl:apply-templates select="." mode="dffrecord"/>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "dffopt"]'>
+ <xsl:apply-templates select="." mode="dffopt"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="UML:Class" mode="ww8resource">
+ <xsl:variable name="parentresource">
+ <xsl:call-template name='parenttype'>
+ <xsl:with-param name='type'><xsl:value-of select='@xmi.id'/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name='size_'><xsl:value-of select='./*/UML:TaggedValue[./*/UML:TagDefinition/@xmi.idref="size"]/UML:TaggedValue.dataValue'/></xsl:variable>
+ <xsl:variable name='size'>
+ <xsl:choose>
+ <xsl:when test='$size_ != ""'><xsl:value-of select='$size_'/></xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="classname">WW8<xsl:value-of select="@name"/></xsl:variable>
+ <xsl:variable name="superclass">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8sprm"]'>WW8PropertyImpl</xsl:when>
+ <xsl:otherwise>WW8StructBase</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="surroundclass">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8sprm"]'>WW8PropertyImpl</xsl:when>
+ <xsl:otherwise>WW8StructBase</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:text>
+/**
+ Automatically generated class: </xsl:text><xsl:value-of select="@name"/><xsl:text>
+ </xsl:text>
+ <xsl:for-each select='./UML:ModelElement.stereotype/UML:Stereotype'>
+ <xsl:text>
+ Stereotype </xsl:text>
+ <xsl:value-of select='@xmi.idref'/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ Parent Resource: </xsl:text>
+ <xsl:value-of select="$parentresource"/>
+ <xsl:text>
+ Size: </xsl:text><xsl:value-of select='$size'/>
+ <xsl:text>
+*/
+class </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>: public </xsl:text>
+ <xsl:value-of select='$superclass'/>
+ <xsl:if test='$parentresource != ""'>
+ <xsl:text>, public writerfilter::Reference&lt; </xsl:text>
+ <xsl:value-of select='$parentresource'/>
+ <xsl:text>&gt;</xsl:text>
+ </xsl:if>
+ <xsl:text>
+{</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
+ <xsl:text> sal_uInt32 mnIndex;</xsl:text>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withmembers"]'>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:apply-templates select='.' mode='declmembers'/>
+ </xsl:for-each>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="needsdocument"]'>
+ <xsl:text> WW8DocumentImplPointer mpDoc;&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="plcf"]'>
+ <xsl:text>
+ sal_uInt32 mnPlcfPayloadOffset;
+ vector&lt;sal_uInt32&gt; entryOffsets;
+ vector&lt;sal_uInt32&gt; payloadOffsets;
+ vector&lt;sal_uInt32&gt; payloadIndices;
+ </xsl:text>
+ </xsl:if>
+ <xsl:text>
+ public:
+ typedef boost::shared_ptr&lt;</xsl:text>
+ <xsl:value-of select='$classname'/>
+ <xsl:text>&gt; Pointer_t;
+
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(
+ WW8Stream &amp; rStream,
+ sal_uInt32 nOffset = 0,
+ sal_uInt32 nCount = </xsl:text>
+ <xsl:value-of select='$size'/>
+ <xsl:text>)
+ : </xsl:text><xsl:value-of select='$superclass'/>
+ <xsl:text>(rStream, nOffset, nCount)</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
+ <xsl:text>, mnIndex(0)</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ {
+ init();
+ }
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(
+ WW8StructBase * pParent,
+ sal_uInt32 nOffset = 0,
+ sal_uInt32 nCount = </xsl:text>
+ <xsl:value-of select='$size'/>
+ <xsl:text>)
+ : </xsl:text>
+ <xsl:value-of select='$superclass'/>
+ <xsl:text>(pParent, nOffset, nCount)</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
+ <xsl:text>, mnIndex(0)</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ {
+ init();
+ }&#xa; </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>( const </xsl:text>
+ <xsl:value-of select='$surroundclass'/>
+ <xsl:text>&amp; rSurround,
+ sal_uInt32 nOffset = 0, sal_uInt32 nCount = </xsl:text>
+ <xsl:value-of select='$size'/>)
+ <xsl:text>
+ : </xsl:text>
+ <xsl:value-of select='$superclass'/>
+ <xsl:text>(rSurround, nOffset, nCount)</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
+ <xsl:text>, mnIndex(0)</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ {
+ init();
+ }&#xa;
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(
+ const Sequence &amp;
+ rSequence, sal_uInt32 nOffset = 0,
+ sal_uInt32 nCount = </xsl:text>
+ <xsl:value-of select='$size'/>
+ <xsl:text>)
+ : </xsl:text>
+ <xsl:value-of select='$superclass'/>
+ <xsl:text>(rSequence, nOffset, nCount)</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
+ <xsl:text>, mnIndex(0)</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ {
+ init();
+ }
+
+ virtual ~</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>();&#xa;</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="initimpl"]'>
+ <xsl:text> void initImpl();&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="plcf"]'>
+ <xsl:text> void initPayload();</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ void init();
+
+ /**
+ Return type of resource.
+ */
+ virtual string getType() const
+ {
+ return "</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>";
+ }
+
+ /**
+ Return static size.
+ */
+ static sal_uInt32 getSize() { return </xsl:text>
+ <xsl:value-of select='$size'/>
+ <xsl:text>; }</xsl:text>
+ <xsl:if test="not(.//UML:Stereotype[@xmi.ref='ww8nocalcsize'])">
+ <xsl:text>
+ /**
+ Calculate actual size.
+ */
+ sal_uInt32 calcSize();
+ </xsl:text>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="plcf"]'>
+ <xsl:text>
+ /**
+ Return offset for entry of PLCF.
+
+ @param nIndex index of entry
+ */
+ sal_uInt32 getEntryOffset(sal_uInt32 nIndex)
+ {
+ return entryOffsets[nIndex];
+ }</xsl:text>
+ <xsl:if test="not(.//UML:Stereotype[@xmi.idref='ww8nopayloadoffset'])">
+ <xsl:text>
+ /**
+ Calculate offset for payload.
+ */
+ sal_uInt32 calcPayloadOffset();</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ /**
+ Set offset for payloads.
+
+ @param nOffset the offset to set
+ */
+ void setPayloadOffset(sal_uInt32 nOffset)
+ {
+ mnPlcfPayloadOffset = nOffset;
+ }
+
+ /**
+ Return offset for payload of PLCF.
+
+ @param nIndex index of entry
+ */
+ sal_uInt32 getPayloadOffset(sal_uInt32 nIndex)
+ {
+ return payloadOffsets[nIndex];
+ }
+
+ /**
+ Return size of payload.
+ */
+ sal_uInt32 getPayloadSize(sal_uInt32 nIndex) const
+ {
+ return payloadOffsets[nIndex + 1] - payloadOffsets[nIndex];
+ }
+
+
+ /**
+ Return payload index of an entry.
+
+ */
+ sal_uInt32 getPayloadIndex(sal_uInt32 nIndex)
+ {
+ return payloadIndices[nIndex];
+ }
+ </xsl:text>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withindex"]'>
+ <xsl:text>
+ /**
+ Set index in parent.
+
+ @param nIndex the index
+ */
+ void setIndex(sal_uInt32 nIndex) { mnIndex = nIndex; }
+ </xsl:text>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="ww8sprm"]'>
+ <xsl:variable name='propsreftype'>writerfilter::Reference &lt; Properties &gt;::Pointer_t</xsl:variable>
+ <xsl:text> /**
+ Return reference to properties of Sprm.
+ */
+ </xsl:text>
+ <xsl:value-of select='$propsreftype'/>
+ <xsl:text> getProps()
+ {
+ return </xsl:text>
+ <xsl:value-of select='$propsreftype'/>
+ <xsl:text> (new </xsl:text>
+ <xsl:value-of select='$classname'/>
+ <xsl:text>(*this));
+ }
+ </xsl:text>
+ </xsl:if>
+
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="ww8sprmbinary"]'>
+ <xsl:text>
+ virtual writerfilter::Reference &lt; BinaryObj &gt; ::Pointer_t getBinary();
+ </xsl:text>
+ </xsl:if>
+
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="needsdocument"]'>
+ <xsl:text>
+ void setDoc(WW8DocumentImplPointer pDoc)
+ {
+ mpDoc = pDoc;
+ }
+ </xsl:text>
+ </xsl:if>
+ <xsl:apply-templates select="." mode="declsProperties"/>
+ <xsl:if test='$parentresource="Table"'>
+ <xsl:apply-templates select="." mode="declsTable"/>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test='$parentresource="Properties"'>
+ <xsl:apply-templates select="." mode="resolveProperties"/>
+ </xsl:when>
+ <xsl:when test='$parentresource="Table"'>
+ <xsl:apply-templates select="." mode="resolveTable"/>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:text>
+ };
+ </xsl:text>
+ </xsl:template>
+
+<xsl:template match='UML:Class' mode='declsProperties'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref ="withmembers"]'>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:apply-templates select='.' mode='accessmembers'/>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="debug">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="debug"]'>
+ <xsl:text>true</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>false</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:apply-templates select='.' mode='access'>
+ <xsl:with-param name="debug">
+ <xsl:value-of select="$debug"/>
+ </xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"]'>
+ <xsl:apply-templates select='.' mode='declsOperations'/>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="UML:Class" mode="resolveProperties">
+ <xsl:if test='.//UML:Stereotype[@xmi.idref = "resolvenoauto"]'>
+ void resolveNoAuto(Properties &amp; rHandler);
+ </xsl:if>
+
+ void dump(OutputWithDepth &lt; string &gt; &amp; o) const;
+
+ void resolve(Properties &amp; rHandler);
+</xsl:template>
+
+<xsl:template match="UML:Class" mode="declsTable">
+ sal_uInt32 getEntryCount();
+ writerfilter::Reference&lt; Properties &gt;::Pointer_t getEntry(sal_uInt32 nIndex);
+</xsl:template>
+
+<xsl:template match="UML:Class" mode="resolveTable">
+ void resolve(Table &amp; rHandler);
+</xsl:template>
+
+<xsl:template match="UML:Attribute" mode="access">
+ <xsl:param name="debug"/>
+ <xsl:variable name="stereotype"><xsl:value-of select=".//UML:Stereotype[1]/@xmi.idref"/></xsl:variable>
+ <xsl:variable name="offset_"><xsl:value-of select='translate(.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="offset"]/UML:TaggedValue.dataValue, "ABCDEFX", "abcdefx")'/></xsl:variable>
+ <xsl:variable name="offset">
+ <xsl:value-of select='$offset_'/>
+ </xsl:variable>
+ <xsl:variable name="shift"><xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="shift"]/UML:TaggedValue.dataValue'/></xsl:variable>
+ <xsl:variable name="mask_"><xsl:value-of select='translate(.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="mask"]/UML:TaggedValue.dataValue, "ABCDEFX", "abcdefx")'/></xsl:variable>
+ <xsl:variable name="mask">
+ <xsl:if test='$mask_ != "" and not(starts-with($mask_, "0x"))'>0x</xsl:if>
+ <xsl:value-of select='$mask_'/>
+ </xsl:variable>
+ <xsl:variable name='type'>
+ <xsl:value-of select="UML:StructuralFeature.type/UML:DataType/@xmi.idref"/>
+ </xsl:variable>
+ <xsl:variable name="completetype">
+ <xsl:text>WW8</xsl:text>
+ <xsl:value-of select="$type"/>
+ </xsl:variable>
+ <xsl:variable name="saltype">
+ <xsl:apply-templates select="." mode="returntype"/>
+ </xsl:variable>
+ <xsl:variable name='typetype'>
+ <xsl:call-template name='typetype'>
+ <xsl:with-param name='type'><xsl:value-of select="$type"/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+
+ /**
+ <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="comment"]/UML:TaggedValue.dataValue'/>
+
+ &lt;table&gt;
+ &lt;tr&gt;
+ &lt;th&gt;
+ Name
+ &lt;/th&gt;
+ &lt;td&gt;
+ <xsl:value-of select='@name'/>(<xsl:value-of select='$stereotype'/>)
+ &lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;th&gt;
+ Offset
+ &lt;/th&gt;
+ &lt;td&gt;
+ <xsl:value-of select='$offset'/>
+ &lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;th&gt;
+ Mask
+ &lt;/th&gt;
+ &lt;td&gt;
+ <xsl:value-of select='$mask'/>
+ &lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;tr&gt;
+ &lt;th&gt;
+ Shift
+ &lt;/th&gt;
+ &lt;td&gt;
+ <xsl:value-of select='$shift'/>
+ &lt;/td&gt;
+ &lt;/tr&gt;
+ &lt;/table&gt;
+ */
+
+<xsl:choose>
+ <xsl:when test='$stereotype = "attribute"'>
+ <xsl:if test='././/UML:Stereotype[@xmi.idref="virtual"]'>
+ <xsl:text>virtual </xsl:text>
+ </xsl:if>
+ <xsl:value-of select='$saltype'/> get_<xsl:value-of select='@name'/>() const
+ {
+ <xsl:if test='$debug="true"'>
+ <xsl:text>
+ clog &lt;&lt; "&lt;called&gt;</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>&lt;/called&gt;"
+ &lt;&lt; endl;&#xa;
+ </xsl:text>
+ </xsl:if>
+ <xsl:choose>
+ <xsl:when test='././/UML:Stereotype[@xmi.idref="attributeremainder"]'>
+ <xsl:text>return writerfilter::Reference &lt; BinaryObj &gt;::Pointer_t(new WW8BinaryObjReference(getRemainder(</xsl:text>
+ <xsl:value-of select="$offset"/>
+ <xsl:text>)));&#xa;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test='$typetype = "complex"'>
+ <xsl:text> return </xsl:text>
+ <xsl:value-of select="$saltype"/>
+ <xsl:text>(new </xsl:text>
+ <xsl:value-of select="$completetype"/>
+ <xsl:text>(*this, </xsl:text>
+ <xsl:value-of select="$offset"/>
+ <xsl:text>));&#xa;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text> return (get</xsl:text>
+ <xsl:value-of select="$type"/>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="$offset"/>
+ <xsl:text>)</xsl:text>
+ <xsl:if test="string-length($mask)>0">
+ <xsl:text>&amp; </xsl:text>
+ <xsl:value-of select="$mask"/>
+ </xsl:if>
+ <xsl:text>)</xsl:text>
+ <xsl:if test="$shift>0">
+ <xsl:text>&gt;&gt; </xsl:text>
+ <xsl:value-of select="$shift"/>
+ </xsl:if>
+ <xsl:text>;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ }
+ </xsl:when>
+ <xsl:when test='$stereotype = "array"'>
+ <xsl:text>sal_uInt32 get_</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>_count() const </xsl:text>
+ <xsl:choose>
+ <xsl:when test='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = "arraycount"]'>
+ <xsl:text>{ return </xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = "arraycount"]/UML:TaggedValue.dataValue'/>
+ <xsl:text>; }&#xa;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>;&#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:value-of select='$saltype'/>
+ <xsl:text> get_</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>(sal_uInt32 nIndex) const {</xsl:text>
+ <xsl:choose>
+ <xsl:when test="$typetype='complex'">
+ <xsl:text> return </xsl:text>
+ <xsl:value-of select="$saltype"/>
+ <xsl:text>( new </xsl:text>
+ <xsl:value-of select="$completetype"/>
+ <xsl:text>(static_cast&lt;const WW8StructBase &gt;(*this), </xsl:text>
+ <xsl:value-of select="$offset"/>
+ <xsl:text> + nIndex * </xsl:text>
+ <xsl:value-of select="$completetype"/>
+ <xsl:text>::getSize()));</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text> return get</xsl:text>
+ <xsl:value-of select='$type'/>
+ <xsl:text>(</xsl:text><xsl:value-of select='$offset'/>
+ <xsl:text> + nIndex * sizeof(</xsl:text>
+ <xsl:value-of select='$saltype'/>
+ <xsl:text>))</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>; }&#xa;</xsl:text>
+ </xsl:when>
+ <xsl:when test='$stereotype = "string"'>
+ rtl::OUString get_<xsl:value-of select='@name'/>() const { return getString(<xsl:value-of select='$offset'/>); }
+ </xsl:when>
+</xsl:choose>
+</xsl:template>
+
+<xsl:template match='UML:Attribute' mode='accessmembers'>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='.//UML:DataType/@xmi.idref'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text> get_</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>() const { return m</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>; }
+ </xsl:text>
+</xsl:template>
+
+
+<xsl:template match="UML:Operation" mode="declsOperations">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "array"'>
+ <xsl:variable name="elementtype">
+ <xsl:value-of select='.//UML:Parameter.type/UML:Class/@xmi.idref'/>
+ </xsl:variable>
+ <xsl:variable name="parentclass">
+ <xsl:call-template name='parenttype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$elementtype'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name='saltype'>
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$elementtype'/>
+ </xsl:with-param>
+ <xsl:with-param name='parenttype'>
+ <xsl:value-of select='$parentclass'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ /**
+ Array: <xsl:value-of select="@name"/>
+ ElementType: <xsl:value-of select="$elementtype"/>(<xsl:value-of select="$parentclass"/>)
+ */
+
+ sal_uInt32 get_<xsl:value-of select="@name"/>_count();
+
+ <xsl:text> </xsl:text><xsl:value-of select='$saltype'/> get_<xsl:value-of select="@name"/>(sal_uInt32 pos);
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "attribute" or .//UML:Stereotype/@xmi.idref = "binary"'>
+ <xsl:variable name="returntype_">
+ <xsl:value-of select='.//UML:Parameter.type/UML:Class/@xmi.idref'/>
+ </xsl:variable>
+ <xsl:variable name="returntype">
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$returntype_'/>
+ </xsl:with-param>
+ <xsl:with-param name='parenttype'>
+ <xsl:call-template name='parenttype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$returntype_'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ /**
+ Operation: <xsl:value-of select="@name"/>
+ */
+
+ <xsl:text> </xsl:text>
+ <xsl:value-of select='$returntype'/>
+ <xsl:text> get_</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>();&#xa;</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="UML:Attribute" mode='declmembers'>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='.//UML:DataType/@xmi.idref'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:text> m</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>;
+ </xsl:text>
+</xsl:template>
+
+<xsl:template name='idtoqname'>
+ <xsl:param name='id'/>NS_<xsl:value-of select='substring-before($id, ":")'/>::LN_<xsl:value-of select='substring-after($id, ":")'/>
+</xsl:template>
+
+<xsl:template name='saltype'>
+ <xsl:param name='type'/>
+ <xsl:param name='parenttype'/>
+ <xsl:choose>
+ <xsl:when test="$type='U8'">sal_uInt8</xsl:when>
+ <xsl:when test="$type='S8'">sal_Int8</xsl:when>
+ <xsl:when test="$type='U16'">sal_uInt16</xsl:when>
+ <xsl:when test="$type='S16'">sal_Int16</xsl:when>
+ <xsl:when test="$type='U32'">sal_uInt32</xsl:when>
+ <xsl:when test="$type='S32'">sal_Int32</xsl:when>
+ <xsl:when test="$type='String'">rtl::OUString</xsl:when>
+ <xsl:when test="$type='Value'">WW8Value::Pointer_t</xsl:when>
+ <xsl:when test="$type='Binary'">WW8BinaryObjReference::Pointer_t</xsl:when>
+ <xsl:when test="$parenttype=''">
+ <xsl:value-of select="$type"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>writerfilter::Reference &lt; </xsl:text>
+ <xsl:value-of select='$parenttype'/>
+ <xsl:text> &gt;::Pointer_t</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name='typetype'>
+ <xsl:param name='type'/><xsl:choose>
+ <xsl:when test="$type='U8'">simple</xsl:when>
+ <xsl:when test="$type='S8'">simple</xsl:when>
+ <xsl:when test="$type='U16'">simple</xsl:when>
+ <xsl:when test="$type='S16'">simple</xsl:when>
+ <xsl:when test="$type='U32'">simple</xsl:when>
+ <xsl:when test="$type='S32'">simple</xsl:when>
+ <xsl:when test="$type='String'">string</xsl:when>
+ <xsl:when test="$type='Value'">value</xsl:when>
+ <xsl:otherwise>complex</xsl:otherwise>
+</xsl:choose>
+</xsl:template>
+
+<xsl:template match="UML:Attribute" mode="valuetype">
+ <xsl:variable name='type'>
+ <xsl:value-of select='.//UML:DataType/@xmi.idref'/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test='$type="U8"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="S8"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="U16"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="S16"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="U32"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="S32"'>WW8IntValue</xsl:when>
+ <xsl:otherwise>WW8PropertiesValue</xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="UML:Class" mode="dffrecord">
+ <xsl:variable name="classname">
+ <xsl:text>Dff</xsl:text><xsl:value-of select="@name"/>
+ </xsl:variable>
+ <xsl:text>
+/**
+ Automaticallay generated class:
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>&#xa;
+*/&#xa;
+class </xsl:text>
+<xsl:value-of select="$classname"/>
+<xsl:text> : public DffRecord
+{
+public:
+ typedef boost::shared_ptr &lt; </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text> &gt; Pointer_t;&#xa;
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(WW8StructBase * pParent, sal_uInt32 nOffset, sal_uInt32 nCount)&#xa;
+ : DffRecord(pParent, nOffset, nCount) {}&#xa;
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(WW8Stream &amp; rStream, sal_uInt32 nOffset, sal_uInt32 nCount)&#xa;
+ : DffRecord(rStream, nOffset, nCount) {}&#xa;
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(DffRecord &amp; rRecord)&#xa;
+ : DffRecord(rRecord) {}
+ virtual ~</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>();
+
+ virtual void resolveLocal(Properties &amp; props);</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref = "resolvenoauto"]'>
+ void resolveNoAuto(Properties &amp; rHandler);
+ </xsl:if>
+ <xsl:text>
+ virtual void dump(OutputWithDepth &lt; string &gt; &amp; o) const;
+
+ virtual DffRecord * clone() const { return new </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(*this); }&#xa;
+ virtual string getType() const
+ {
+ return "</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>";
+ }
+
+ virtual string getName() const { return ""; }
+ </xsl:text>
+ <xsl:apply-templates select="." mode="declsProperties"/>
+ <xsl:text>
+};
+</xsl:text>
+</xsl:template>
+
+
+<xsl:template match="UML:Class" mode="dffopt">
+<!--
+ <xsl:variable name="classname">
+ <xsl:text>DffOpt</xsl:text><xsl:value-of select="@name"/>
+ </xsl:variable>
+ <xsl:text>
+/**
+ Automaticallay generated class:
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>&#xa;
+*/&#xa;
+class </xsl:text>
+<xsl:value-of select="$classname"/>
+<xsl:text> : public WW8FOPTE
+{
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>(WW8FOPTE &amp; rOpt) : WW8FOPTE(rOpt) {}
+
+ virtual string getName() const
+ {
+ return "</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>";
+ }&#xa;</xsl:text>
+
+ <xsl:text>
+};
+</xsl:text>
+-->
+</xsl:template>
+
+<xsl:template name="parenttype">
+ <xsl:param name='type'/>
+ <xsl:for-each select='/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$type]'>
+ <xsl:value-of select='./UML:Generalization.parent/UML:Class/@xmi.idref'/>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="UML:Attribute" mode="returntype">
+ <xsl:variable name='type'>
+ <xsl:value-of select="UML:StructuralFeature.type/UML:DataType/@xmi.idref"/>
+ </xsl:variable>
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select="$type"/>
+ </xsl:with-param>
+ <xsl:with-param name='parenttype'>
+ <xsl:call-template name='parenttype'>
+ <xsl:with-param name='type'><xsl:value-of select='$type'/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/writerfilter/source/doctok/resourcesimpl.xsl b/writerfilter/source/doctok/resourcesimpl.xsl
new file mode 100644
index 000000000000..75684e76c95e
--- /dev/null
+++ b/writerfilter/source/doctok/resourcesimpl.xsl
@@ -0,0 +1,855 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output method="text" />
+
+ <xsl:include href="resourcetools.xsl"/>
+
+<xsl:template match="/">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#include &lt;resources.hxx&gt;
+
+#ifndef WW8_OUTPUT_WITH_DEPTH
+#include &lt;WW8OutputWithDepth.hxx&gt;
+#endif
+
+#ifndef INCLUDED_SPRMIDS_HXX
+#include &lt;sprmids.hxx&gt;
+#endif
+
+namespace writerfilter {
+namespace doctok {
+
+extern WW8OutputWithDepth output;
+
+using namespace ::std;
+</xsl:text>
+ <xsl:apply-templates select='/XMI/XMI.content/UML:Model' mode="sprmkind"/>
+ <xsl:apply-templates select='.//UML:Class' mode='class'/>
+ <xsl:apply-templates select='//UML:Model' mode='createsprmprops'/>
+ <xsl:apply-templates select='/XMI/XMI.content/UML:Model'
+ mode='createsprmbinary'/>
+ <xsl:apply-templates select='/XMI/XMI.content/UML:Model'
+ mode='createdffrecord'/>
+ <xsl:apply-templates select='/XMI/XMI.content/UML:Model' mode='ww8foptename'/>
+ <xsl:apply-templates select='/XMI/XMI.content/UML:Model'
+ mode='isbooleandffopt'/>
+ <xsl:text>
+}}
+</xsl:text>
+</xsl:template>
+
+ <xsl:template match="UML:Class" mode="class">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8resource"]'>
+ <xsl:apply-templates select="." mode="ww8resource">
+ <xsl:with-param name="classprefix">WW8</xsl:with-param>
+ <xsl:with-param name="needsinit">true</xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "dffrecord"]'>
+ <xsl:apply-templates select="." mode="ww8resource">
+ <xsl:with-param name="classprefix">Dff</xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="UML:Class" mode="ww8resource">
+ <xsl:param name="classprefix"/>
+ <xsl:param name="needsinit"/>
+ <xsl:variable name="parentresource">
+ <xsl:call-template name='parenttype'>
+ <xsl:with-param name='type'><xsl:value-of select='@xmi.id'/></xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name='size_'><xsl:value-of select='./*/UML:TaggedValue[./*/UML:TagDefinition/@xmi.idref="size"]/UML:TaggedValue.dataValue'/></xsl:variable>
+ <xsl:variable name='size'>
+ <xsl:choose>
+ <xsl:when test='$size_ != ""'><xsl:value-of select='$size_'/></xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="classname"><xsl:value-of select="$classprefix"/><xsl:value-of select="@name"/></xsl:variable>
+ <xsl:variable name="superclass">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8sprm"]'>WW8PropertyImpl</xsl:when>
+ <xsl:otherwise>WW8StructBase</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="surroundclass">
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "ww8sprm"]'>WW8PropertyImpl</xsl:when>
+ <xsl:otherwise>WW8StructBase</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:text>
+/*
+ Automatically generated class: </xsl:text><xsl:value-of select="@name"/><xsl:text>
+ </xsl:text>
+ <xsl:for-each select='./UML:ModelElement.stereotype/UML:Stereotype'>
+ <xsl:text>
+ Stereotype </xsl:text>
+ <xsl:value-of select='@xmi.idref'/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ Parent Resource: </xsl:text>
+ <xsl:value-of select="$parentresource"/>
+ <xsl:text>
+ Size: </xsl:text><xsl:value-of select='$size'/>
+ <xsl:text>
+*/
+ </xsl:text>
+
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::~</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>()
+ {
+ }
+ </xsl:text>
+ <xsl:if test="$needsinit='true'">
+ <xsl:text>
+ void </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::init()
+ {
+ </xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="withmembers"]'>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:apply-templates select='.' mode='initmembers'/>
+ </xsl:for-each>
+ </xsl:if>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref ="initimpl"]'>
+ <xsl:text> initImpl();&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ }&#xa;</xsl:text>
+ </xsl:if>
+
+ <xsl:choose>
+ <xsl:when test='$parentresource="Properties"'>
+ <xsl:apply-templates select="." mode="resolveProperties">
+ <xsl:with-param name="classname" select="$classname"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test='$parentresource="Table"'>
+ <xsl:apply-templates select="." mode="resolveTable">
+ <xsl:with-param name="classname" select="$classname"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ </xsl:choose>
+
+ </xsl:template>
+
+ <xsl:template match="UML:Class" mode="resolveProperties">
+ <xsl:param name="classname"/>
+ <xsl:variable name="rHandler">
+ <xsl:choose>
+ <xsl:when test='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref != "noresolve"]'>
+ <xsl:text>rHandler</xsl:text>
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test='.//UML:Operation[@name!="reserved"]'>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref != "noresolve"]'>
+ <xsl:text>rHandler</xsl:text>
+ </xsl:if>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref = "resolvenoauto"]'>
+ <xsl:text>rHandler</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:text>
+ void </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:choose>
+ <xsl:when test=".//UML:Stereotype[@xmi.idref='ww8resource']">
+ <xsl:text>::resolve(Properties &amp; </xsl:text>
+ <xsl:value-of select="$rHandler"/>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ <xsl:when test=".//UML:Stereotype[@xmi.idref='dffrecord']">
+ <xsl:text>::resolveLocal(Properties &amp; </xsl:text>
+ <xsl:value-of select="$rHandler"/>
+ <xsl:text>)</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:text>
+ {</xsl:text>
+ <xsl:if test='.//UML:Stereotype[@xmi.idref="debug"]'>
+ <xsl:text>
+ dump(output);</xsl:text>
+ </xsl:if>
+ <xsl:text>
+ try
+ {</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noresolve"]'>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select='.' mode='resolveAttribute'/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noresolve"]'>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:apply-templates select='.' mode='resolveOperation'/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+
+ <xsl:if test='.//UML:Stereotype[@xmi.idref = "resolvenoauto"]'>
+ resolveNoAuto(rHandler);
+ </xsl:if>
+ <xsl:text>
+ } catch (Exception &amp; e) {
+ clog &lt;&lt; e.getText() &lt;&lt; endl;
+ }
+ }
+
+ void
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::dump(OutputWithDepth &lt; string &gt; &amp; o) const
+ {
+ o.addItem("&lt;dump type='</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>'&gt;");
+
+ WW8StructBase::dump(o);</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:apply-templates select='.' mode='dumpAttribute'/>
+ </xsl:for-each>
+
+ <xsl:text>
+ o.addItem("&lt;/dump&gt;");
+ }&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match='UML:Attribute' mode='resolveAttribute'>
+ <xsl:variable name="attrid">
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:value-of select='UML:TaggedValue.dataValue'/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="qname">
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'>
+ <xsl:value-of select='$attrid'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "attribute"'>
+ <xsl:text>
+ {
+ WW8Value::Pointer_t pVal = createValue(get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>());
+ rHandler.attribute(</xsl:text>
+ <xsl:value-of select="$qname"/>
+ <xsl:text>, *pVal);
+ }</xsl:text>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "array"'>
+ <xsl:variable name="elementtype">
+ <xsl:value-of select='.//UML:DataType/@xmi.idref'/>
+ </xsl:variable>
+ <xsl:variable name="parentclass">
+ <xsl:call-template name='parenttype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$elementtype'/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:text>
+ {
+ sal_uInt32 nCount = get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>_count();
+ for (sal_uInt32 n = 0; n &lt; nCount; ++n)
+ {
+ WW8Value::Pointer_t pVal = createValue(get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>(n));
+ rHandler.attribute(</xsl:text>
+ <xsl:value-of select="$qname"/>
+ <xsl:text>, *pVal);
+ }
+ }</xsl:text>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "string"'>
+ <xsl:text>
+ {
+ WW8StringValue aVal(get_</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text>());
+ rHandler.attribute(</xsl:text>
+ <xsl:value-of select="$qname"/>
+ <xsl:text>, aVal);
+ }</xsl:text>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match='UML:Attribute' mode='dumpAttribute'>
+ <xsl:variable name="type">
+ <xsl:value-of select='.//UML:DataType/@xmi.idref'/>
+ </xsl:variable><xsl:variable name="saltype">
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$type'/>
+ </xsl:with-param>
+ <xsl:with-param name='parenttype'>
+ <xsl:apply-templates select="." mode="parentclass"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select=".//UML:Stereotype">
+ <xsl:choose>
+ <xsl:when test='@xmi.idref = "attributeremainder"'/>
+ <xsl:when test='@xmi.idref = "array"'>
+ <xsl:text>
+ {
+ sal_uInt32 nCount = get_</xsl:text>
+ <xsl:value-of select='$name'/>
+ <xsl:text>_count();
+
+ for (sal_uInt32 n = 0; n &lt; nCount; ++n)
+ {
+ writerfilter::dump(o, "</xsl:text>
+ <xsl:value-of select='$name'/>
+ <xsl:text>", get_</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>(n));
+ }
+ }</xsl:text>
+ </xsl:when>
+ <xsl:when test='@xmi.idref = "string"'>
+ <xsl:text>
+ {
+ WW8StringValue aVal(get_</xsl:text>
+ <xsl:value-of select='$name'/>
+ <xsl:text>());
+
+ o.addItem("</xsl:text>
+ <xsl:value-of select='$name'/>
+ <xsl:text>" &lt;&lt; "=\"" + aVal.toString() + "\"");
+ }</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>
+ writerfilter::dump(o, "</xsl:text>
+ <xsl:value-of select='$name'/>
+ <xsl:text>", get_</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>());</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="resolveOperationAttribute">
+ <xsl:variable name="opid">
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:value-of select='./UML:TaggedValue.dataValue'/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:text>
+ {
+ WW8Value::Pointer_t pVal = createValue(get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>());
+ rHandler.attribute(</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='$opid'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>, *pVal);
+ }&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="resolveOperationArray">
+ <xsl:variable name="elementtype">
+ <xsl:value-of select='.//UML:Parameter.type/@xmi.idref'/>
+ </xsl:variable>
+ <xsl:variable name="opid">
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:value-of select='./UML:TaggedValue.dataValue'/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="parentclass">
+ <xsl:for-each select='/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$elementtype]'>
+ <xsl:value-of select='./UML:Generalization.parent/UML:Class/@xmi.idref'/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:text>
+ {
+ sal_uInt32 nCount = get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>_count();
+
+ for (sal_uInt32 n = 0; n &lt; nCount; ++n)
+ {
+ WW8Value::Pointer_t pVal = createValue(get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>(n));
+ rHandler.attribute(</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='$opid'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>, *pVal);
+ }
+ }&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template name="resolveOperationBinary">
+ <xsl:text>
+ {
+ WW8BinaryObjReference::Pointer_t pRef(get_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>());
+ WW8Sprm aSprm(pRef);
+
+ rHandler.sprm(aSprm);
+ }&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match='UML:Operation' mode='resolveOperation'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "attribute"'>
+ <xsl:call-template name="resolveOperationAttribute"/>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "array"'>
+ <xsl:call-template name="resolveOperationArray"/>
+ </xsl:when>
+ <xsl:when test='.//UML:Stereotype/@xmi.idref = "binary"'>
+ <xsl:call-template name="resolveOperationBinary"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="UML:Class" mode="resolveTable">
+ <xsl:param name="classname"/>
+ <xsl:text>void </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::resolve(Table &amp; rHandler)
+ {
+ sal_uInt32 nCount = getEntryCount();
+ writerfilter::Reference&lt; Properties &gt;::Pointer_t pEntry;
+ for (sal_uInt32 n = 0; n &lt; nCount; ++n)
+ {
+ pEntry = getEntry(n);
+
+ if (pEntry.get() != 0x0)
+ {
+ try
+ {
+ rHandler.entry(n, pEntry);
+ }
+ catch (ExceptionOutOfBounds e)
+ {
+ }
+ }
+ }
+ }
+ </xsl:text>
+ </xsl:template>
+
+<xsl:template match='UML:Model' mode='createsprmprops'>
+writerfilter::Reference &lt; Properties &gt; ::Pointer_t createSprmProps
+(WW8PropertyImpl &amp; rProp)
+{
+ writerfilter::Reference &lt; Properties &gt; ::Pointer_t pResult;
+
+ switch (rProp.getId())
+ {
+<xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="ww8sprm" and .//UML:Stereotype/@xmi.idref="ww8resource"]'>
+ case <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="sprmcode"]//UML:TaggedValue.dataValue'/>:
+ pResult = writerfilter::Reference &lt; Properties &gt; ::Pointer_t(new WW8<xsl:value-of select='@name'/>(rProp, 0, rProp.getCount()));
+
+ break;
+</xsl:for-each>
+ default:
+ break;
+ }
+
+ return pResult;
+}
+</xsl:template>
+
+<xsl:template match='UML:Model' mode='createsprmbinary'>
+<xsl:text>
+writerfilter::Reference &lt; BinaryObj &gt; ::Pointer_t createSprmBinary
+(WW8PropertyImpl &amp; rProp)
+{
+ writerfilter::Reference &lt; BinaryObj &gt; ::Pointer_t pResult;
+
+ switch (rProp.getId())
+ {&#xa;
+ // warnings....
+ case 0:
+ break;
+</xsl:text>
+<xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="ww8sprmbinary" and .//UML:Stereotype/@xmi.idref="ww8resource"]'>
+ case <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="sprmcode"]//UML:TaggedValue.dataValue'/>:
+ {
+ WW8<xsl:value-of select='@name'/>::Pointer_t p(new WW8<xsl:value-of select='@name'/>(rProp, 0, rProp.getCount()));
+
+ pResult = p->getBinary();
+ }
+
+ break;
+</xsl:for-each>
+<xsl:text>
+ default:
+ break;
+ }
+
+ return pResult;
+}
+</xsl:text>
+</xsl:template>
+
+<!-- returns optname of UML:Class -->
+<xsl:template name="optname">
+ <xsl:for-each select="./UML:ModelElement.taggedValue/UML:TaggedValue">
+ <xsl:if test=".//UML:TagDefinition/@xmi.idref='optname'">
+ <xsl:value-of select="./UML:TaggedValue.dataValue"/>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="ww8foptenamecase">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:variable name="optname">
+ <xsl:call-template name="optname"/>
+ </xsl:variable>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="$optname"/>
+ </xsl:call-template>
+ <xsl:text>:
+ result = rtl::OUString::createFromAscii("</xsl:text>
+ <xsl:value-of select="$optname"/>
+ <xsl:text>");
+ break;</xsl:text>
+</xsl:template>
+
+<xsl:template name="getdffoptname">
+ <xsl:text>
+rtl::OUString getDffOptName(sal_uInt32 nPid)
+{
+ rtl::OUString result;
+
+ switch (nPid)
+ {&#xa;</xsl:text>
+ <xsl:for-each select="./UML:Class[./UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='dffopt']">
+ <xsl:call-template name="ww8foptenamecase"/>
+ </xsl:for-each>
+ <xsl:text>
+ default:
+ break;
+ }
+
+ return result;
+}</xsl:text>
+</xsl:template>
+
+<xsl:template name="ww8foptegetvalue">
+ <xsl:text>
+WW8Value::Pointer_t WW8FOPTE::get_value()
+{
+ WW8Value::Pointer_t pResult;
+
+ switch (get_pid())
+ {</xsl:text>
+ <xsl:for-each select=".//UML:Class[./UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='dffopt']">
+ <xsl:variable name="type">
+ <xsl:for-each select="./UML:ModelElement.taggedValue/UML:TaggedValue[./UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='type']">
+ <xsl:value-of select="UML:TaggedValue.dataValue"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:if test="$type != 'unknown'">
+ <xsl:variable name="typetype">
+ <xsl:call-template name="typetype">
+ <xsl:with-param name="type" select="$type"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="valuetype">
+ <xsl:call-template name="valuetype">
+ <xsl:with-param name="type" select="$type"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:text>
+ case </xsl:text>
+ <xsl:for-each select="./UML:ModelElement.taggedValue/UML:TaggedValue[./UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='dffid']">
+ <xsl:value-of select="UML:TaggedValue.dataValue"/>
+ </xsl:for-each>
+ <xsl:variable name="optname">
+ <xsl:for-each select="./UML:ModelElement.taggedValue/UML:TaggedValue[./UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='optname']">
+ <xsl:value-of select="UML:TaggedValue.dataValue"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="$optname"/>
+ </xsl:call-template>
+ <xsl:text>:</xsl:text>
+ <xsl:choose>
+ <xsl:when test="./UML:ModelElement.taggedValue/UML:TaggedValue[./UML:TaggedValue.type/UML:TagDefinition/@xmi.idref='isbool']">
+ <xsl:text>
+ pResult = createValue(getU32(0x2) &amp; 1);</xsl:text>
+ </xsl:when>
+ <xsl:when test="$typetype='complex'">
+ <xsl:text>
+ pResult = createValue(new </xsl:text>
+ <xsl:value-of select="$valuetype"/>
+ <xsl:text>(getU32(0x2)));</xsl:text>
+ </xsl:when>
+ <xsl:when test="$typetype='string'">
+ <xsl:text>
+ pResult = get_stringValue();&#xa;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>
+ pResult = createValue(getU32(0x2));</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+ default:
+ pResult = createValue(getU32(0x2));
+
+ break;
+ }
+
+ return pResult;
+}</xsl:text>
+</xsl:template>
+
+<xsl:template match='UML:Model/UML:Namespace.ownedElement' mode='ww8foptename'>
+ <xsl:text>
+rtl::OUString WW8FOPTE::get_name()
+{
+ return getDffOptName(get_pid());
+}</xsl:text>
+<xsl:call-template name="getdffoptname"/>
+<xsl:text>
+
+WW8Value::Pointer_t WW8FOPTE::get_stringValue()
+{
+ WW8Value::Pointer_t pResult;
+ DffOPT * pOpt = dynamic_cast &lt; DffOPT * &gt;(mpParent);
+ sal_uInt32 nExtraOffset = pOpt->get_extraoffset(mnIndex);
+ sal_uInt32 nExtraLength = pOpt->get_extraoffset(mnIndex + 1) - nExtraOffset;
+ pResult = createValue(mpParent->getString(nExtraOffset, nExtraLength / 2));
+
+ return pResult;
+}
+</xsl:text>
+<xsl:call-template name="ww8foptegetvalue"/>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode="createdffrecord">
+<xsl:text>
+DffRecord * createDffRecord
+(WW8StructBase * pParent, sal_uInt32 nOffset, sal_uInt32 * pCount)
+{
+ DffRecord * pResult = NULL;
+ DffRecord aTmpRec(pParent, nOffset, 8);
+ sal_uInt32 nSize = aTmpRec.calcSize();
+
+ if (pCount != NULL)
+ *pCount = nSize;
+
+ switch (aTmpRec.getRecordType())
+ {&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="dffrecord"]'>
+ <xsl:text> case </xsl:text>
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref='dffid']//UML:TaggedValue.dataValue"/>
+ <xsl:text>:
+ pResult = new Dff</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>(pParent, nOffset, nSize);
+
+ break;&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ default:
+ pResult = new DffRecord(pParent, nOffset, nSize);
+
+ break;
+ }
+
+ return pResult;
+}
+
+DffRecord * createDffRecord
+(WW8Stream &amp; rStream, sal_uInt32 nOffset, sal_uInt32 * pCount)
+{
+ DffRecord * pResult = NULL;
+ DffRecord aTmpRec(rStream, nOffset, 8);
+ sal_uInt32 nSize = aTmpRec.calcSize();
+
+ if (pCount != NULL)
+ *pCount = nSize;
+
+ switch (aTmpRec.getRecordType())
+ {&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="dffrecord"]'>
+ <xsl:text> case </xsl:text>
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref='dffid']//UML:TaggedValue.dataValue"/>
+ <xsl:text>:
+ pResult = new Dff</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>(rStream, nOffset, nSize);
+
+ break;&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ default:
+ pResult = new DffRecord(rStream, nOffset, nSize);
+
+ break;
+ }
+
+ return pResult;
+}
+ </xsl:text>
+</xsl:template>
+
+<xsl:template match="UML:Attribute" mode="initmembers">
+ <xsl:variable name="stereotype"><xsl:value-of select=".//UML:Stereotype/@xmi.idref"/></xsl:variable>
+ <xsl:variable name="offset_"><xsl:value-of select='translate(.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="offset"]/UML:TaggedValue.dataValue, "ABCDEFX", "abcdefx")'/></xsl:variable>
+ <xsl:variable name="offset">
+ <xsl:if test='$offset_ != "" and not(starts-with($offset_, "0x"))'>0x</xsl:if>
+ <xsl:value-of select='$offset_'/>
+ </xsl:variable>
+ <xsl:variable name="shift"><xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="shift"]/UML:TaggedValue.dataValue'/></xsl:variable>
+ <xsl:variable name="mask_"><xsl:value-of select='translate(.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="mask"]/UML:TaggedValue.dataValue, "ABCDEFX", "abcdefx")'/></xsl:variable>
+ <xsl:variable name="mask">
+ <xsl:if test='$mask_ != "" and not(starts-with($mask_, "0x"))'>0x</xsl:if>
+ <xsl:value-of select='$mask_'/>
+ </xsl:variable>
+ <xsl:variable name="type"><xsl:value-of select='.//UML:DataType/@xmi.idref'/></xsl:variable><xsl:variable name="saltype">
+ <xsl:call-template name='saltype'>
+ <xsl:with-param name='type'>
+ <xsl:value-of select='$type'/>
+ </xsl:with-param>
+ </xsl:call-template>
+</xsl:variable>
+
+/*
+<xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="comment"]/UML:TaggedValue.dataValue'/>
+
+Name: <xsl:value-of select='@name'/>(<xsl:value-of select='$stereotype'/>)
+Offset: <xsl:value-of select='$offset'/>
+Mask: <xsl:value-of select='$mask'/>
+Shift: <xsl:value-of select='$shift'/>
+*/
+
+<xsl:choose>
+ <xsl:when test='$stereotype = "attribute"'>
+ m<xsl:value-of select='@name'/> = (get<xsl:value-of select="$type"/>(<xsl:value-of select="$offset"/>)<xsl:if test="string-length($mask)>0"> &amp; <xsl:value-of select="$mask"/></xsl:if>)<xsl:if test="$shift>0"> &gt;&gt; <xsl:value-of select="$shift"/></xsl:if>;
+ </xsl:when>
+ <xsl:when test='$stereotype = "array"'>
+ <xsl:text>
+ {
+ sal_uInt32 nCount = </xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = "arraycount"]/UML:TaggedValue.dataValue'/>
+ <xsl:text>;
+ m</xsl:text>
+ <xsl:value-of select='@name'/>
+ <xsl:text> = new </xsl:text><xsl:value-of select='$saltype'/><xsl:text>[nCount];
+
+ for (sal_uInt32 n = 0; n &lt; nCount; ++n)
+ m</xsl:text><xsl:value-of select='@name'/><xsl:text>[n] = get</xsl:text>
+ <xsl:value-of select='$type'/>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select='$offset'/>
+ <xsl:text> + nIndex * sizeof(</xsl:text>
+ <xsl:value-of select='$saltype'/>
+ <xsl:text>));
+ }
+ </xsl:text>
+ </xsl:when>
+ <xsl:when test='$stereotype = "string"'>
+ m<xsl:value-of select='@name'/> = getString(<xsl:value-of select='$offset'/>)
+ </xsl:when>
+</xsl:choose>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode="isbooleandffopt">
+<xsl:text>
+bool isBooleanDffOpt(sal_uInt32 nId)
+{
+ bool bResult = false;
+
+ switch (nId)
+ {&#xa;</xsl:text>
+ <xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="dffopt"]'>
+ <xsl:if test=".//UML:TagDefinition[@xmi.idref='isbool']">
+ <xsl:text> case </xsl:text>
+ <xsl:variable name="optname">
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref='optname']//UML:TaggedValue.dataValue"/>
+ </xsl:variable>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="$optname"/>
+ </xsl:call-template>
+ <xsl:text>:&#xa;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+ bResult = true;
+ break;
+
+ default:
+ break;
+ }
+
+ return bResult;
+}
+</xsl:text>
+</xsl:template>
+
+</xsl:stylesheet>
+
diff --git a/writerfilter/source/doctok/resourcetools.xsl b/writerfilter/source/doctok/resourcetools.xsl
new file mode 100644
index 000000000000..75d124a3eedb
--- /dev/null
+++ b/writerfilter/source/doctok/resourcetools.xsl
@@ -0,0 +1,566 @@
+<!--
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output method="text" />
+
+<xsl:template name='idtoqname'>
+ <xsl:param name='id'/>
+ <xsl:text>NS_</xsl:text>
+ <xsl:value-of select='substring-before($id, ":")'/>
+ <xsl:text>::LN_</xsl:text>
+ <xsl:value-of select='substring-after($id, ":")'/>
+</xsl:template>
+
+<xsl:template name="parenttype">
+ <xsl:param name='type'/>
+ <xsl:for-each select='/XMI/XMI.content/UML:Model/UML:Namespace.ownedElement/UML:Generalization[UML:Generalization.child/UML:Class/@xmi.idref=$type]'>
+ <xsl:value-of select='./UML:Generalization.parent/UML:Class/@xmi.idref'/>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name='saltype'>
+ <xsl:param name='type'/>
+ <xsl:param name='parenttype'/>
+ <xsl:choose>
+ <xsl:when test="$type='U8'">sal_uInt8</xsl:when>
+ <xsl:when test="$type='S8'">sal_Int8</xsl:when>
+ <xsl:when test="$type='U16'">sal_uInt16</xsl:when>
+ <xsl:when test="$type='S16'">sal_Int16</xsl:when>
+ <xsl:when test="$type='U32'">sal_uInt32</xsl:when>
+ <xsl:when test="$type='S32'">sal_Int32</xsl:when>
+ <xsl:when test="$type='String'">rtl::OUString</xsl:when>
+ <xsl:otherwise>
+ <xsl:text>writerfilter::Reference &lt; </xsl:text>
+ <xsl:value-of select='$parenttype'/>
+ <xsl:text> &gt;::Pointer_t</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name='typetype'>
+ <xsl:param name='type'/><xsl:choose>
+ <xsl:when test="$type='U8'">simple</xsl:when>
+ <xsl:when test="$type='S8'">simple</xsl:when>
+ <xsl:when test="$type='U16'">simple</xsl:when>
+ <xsl:when test="$type='S16'">simple</xsl:when>
+ <xsl:when test="$type='U32'">simple</xsl:when>
+ <xsl:when test="$type='S32'">simple</xsl:when>
+ <xsl:when test="$type='String'">string</xsl:when>
+ <xsl:when test="$type='Binary'">binary</xsl:when>
+ <xsl:otherwise>complex</xsl:otherwise>
+</xsl:choose>
+</xsl:template>
+
+<xsl:template name="valuetype">
+ <xsl:param name="type"/>
+ <xsl:choose>
+ <xsl:when test='$type="U8"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="S8"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="U16"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="S16"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="U32"'>WW8IntValue</xsl:when>
+ <xsl:when test='$type="S32"'>WW8IntValue</xsl:when>
+ <xsl:otherwise>WW8PropertiesValue</xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="UML:Attribute" mode="valuetype">
+ <xsl:call-template name="valuetype">
+ <xsl:with-param name="type" select='.//UML:DataType/@xmi.idref'/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="qnametostrattrs">
+ <xsl:text>
+ /* Attributes */</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noresolve"]'>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>
+ mMap[</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>] = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue.dataValue'/>
+ <xsl:text>";</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="qnametostrops">
+ <xsl:text>
+ /* Operations */</xsl:text>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"]'>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noresolve"]'>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>
+ mMap[</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>] = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue.dataValue'/>
+ <xsl:text>";</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="qnametostrclasses">
+ <xsl:text>
+ /* Classes */</xsl:text>
+ <xsl:for-each select='.//UML:Class[@name!="reserved"]'>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="classid"]'>
+ <xsl:text>
+ mMap[</xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>] = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue.dataValue'/>
+ <xsl:text>";</xsl:text>
+ </xsl:for-each>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match='UML:Model' mode='qnametostr'>
+ <xsl:text>
+void QNameToString::init_doctok()
+{</xsl:text>
+<xsl:call-template name="qnametostrattrs"/>
+<xsl:call-template name="qnametostrops"/>
+<xsl:call-template name="qnametostrclasses"/>
+<xsl:text>
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:key name="ids" match='UML:Attribute[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]|UML:Operation[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]' use=".//UML:TaggedValue.dataValue"/>
+
+<xsl:template match="UML:Model" mode="qnametostrfunc">
+ <xsl:text>
+string qnameToString(sal_uInt32 nToken)
+{
+ string sResult;
+
+ switch (nToken)
+ {
+ // Attributes</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noresolve"]'>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="generate-id(key('ids', .//UML:TaggedValue.dataValue)[1])=generate-id(.)">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>:
+ sResult = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue.dataValue'/>
+ <xsl:text>";
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+ // Operations</xsl:text>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noresolve"]'>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:if test="generate-id(key('ids', .//UML:TaggedValue.dataValue)[1])=generate-id(.)">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>:
+ sResult = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue.dataValue'/>
+ <xsl:text>";
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:text>
+ // Classes:</xsl:text>
+ <xsl:for-each select='.//UML:Class[@name!="reserved"]//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="classid"]'>
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name='idtoqname'>
+ <xsl:with-param name='id'><xsl:value-of select='.//UML:TaggedValue.dataValue'/></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>:
+ sResult = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue.dataValue'/>
+ <xsl:text>";
+ break;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ default:
+ ;
+ }
+
+ return sResult;
+}</xsl:text>
+</xsl:template>
+
+<xsl:template match='UML:Model' mode='sprmcodetostr'>
+<xsl:text>
+SprmIdToString::SprmIdToString()
+{</xsl:text>
+<xsl:variable name='tmp'>map &lt; sal_uInt32, string &gt; </xsl:variable>
+<xsl:for-each select='.//UML:Class[.//UML:Stereotype/@xmi.idref="ww8sprm"]'>
+ <xsl:variable name="sprmconst">
+ <xsl:call-template name="sprmCodeOfClass"/>
+ </xsl:variable>
+ <xsl:text>
+ mMap[</xsl:text>
+ <xsl:value-of select="$sprmconst"/>
+ <xsl:text>] = "</xsl:text>
+ <xsl:value-of select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="sprmid"]//UML:TaggedValue.dataValue'/>
+ <xsl:text>";</xsl:text>
+</xsl:for-each>
+<xsl:text>
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:key name="classes-with-kind" match="UML:TagDefinition[@xmi.idref='kind']"
+ use="ancestor::UML:TaggedValue/UML:TaggedValue.dataValue"/>
+
+<xsl:template name="sprmCodeOfClass">
+ <xsl:variable name="tmp">
+ <xsl:text>sprm:</xsl:text>
+ <xsl:value-of select="substring-after(@name, 'sprm')"/>
+ </xsl:variable>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="$tmp"/>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="sprmkindcase">
+ <xsl:param name="kind"/>
+ <xsl:for-each select="key('classes-with-kind', $kind)/ancestor::UML:Class">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name="sprmCodeOfClass"/>
+ <xsl:text>:</xsl:text>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode='sprmkind'>
+<xsl:text>
+Sprm::Kind SprmKind(sal_uInt32 sprmCode)
+{
+ Sprm::Kind nResult = Sprm::UNKNOWN;
+
+ switch(sprmCode)
+ {</xsl:text>
+ <xsl:call-template name="sprmkindcase">
+ <xsl:with-param name="kind">paragraph</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+ nResult = Sprm::PARAGRAPH;
+ break;</xsl:text>
+ <xsl:call-template name="sprmkindcase">
+ <xsl:with-param name="kind">character</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+ nResult = Sprm::CHARACTER;
+ break;</xsl:text>
+ <xsl:call-template name="sprmkindcase">
+ <xsl:with-param name="kind">table</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+ nResult = Sprm::TABLE;
+ break;</xsl:text>
+ <xsl:text>
+ default:
+ break;
+ }
+
+ return nResult;
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode='sprmids'>
+ <xsl:text>
+namespace NS_sprm { </xsl:text>
+ <xsl:for-each select=".//UML:Class[.//UML:Stereotype/@xmi.idref='ww8sprm']">
+ <xsl:variable name="sprmcode">
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = 'sprmcode']/UML:TaggedValue.dataValue"/>
+ </xsl:variable>
+ <xsl:variable name="sprmcodelower">
+ <xsl:value-of select="translate($sprmcode, 'ABCDEF', 'abcdef')"/>
+ </xsl:variable>
+ <xsl:variable name="sprmidname">
+ <xsl:text>LN_</xsl:text>
+ <xsl:value-of select="substring-after(@name, 'sprm')"/>
+ </xsl:variable>
+ <xsl:text>
+ const sal_uInt16 </xsl:text>
+ <xsl:value-of select="$sprmidname"/>
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="$sprmcodelower"/>
+ <xsl:text>;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode='sprmidsed'>
+ <xsl:text>#!/bin/sh
+ cat $1 \&#xa;</xsl:text>
+ <xsl:for-each select=".//UML:Class[.//UML:Stereotype/@xmi.idref='ww8sprm']">
+ <xsl:variable name="sprmcode">
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = 'sprmcode']/UML:TaggedValue.dataValue"/>
+ </xsl:variable>
+ <xsl:variable name="sprmcodelower">
+ <xsl:value-of select="translate($sprmcode, 'ABCDEF', 'abcdef')"/>
+ </xsl:variable>
+ <xsl:variable name="sprmidname">
+ <xsl:text>NS_sprm::LN_</xsl:text>
+ <xsl:value-of select="substring-after(@name, 'sprm')"/>
+ </xsl:variable>
+ <xsl:text>| sed "s/</xsl:text>
+<xsl:value-of select="$sprmcode"/>
+<xsl:text>/</xsl:text>
+<xsl:value-of select="$sprmidname"/>
+<xsl:text>/g" \&#xa;</xsl:text>
+ <xsl:text>| sed "s/</xsl:text>
+<xsl:value-of select="$sprmcodelower"/>
+<xsl:text>/</xsl:text>
+<xsl:value-of select="$sprmidname"/>
+<xsl:text>/g" \&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:text> | cat&#xa;</xsl:text>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode="sprmidstoxml">
+ <xsl:text>
+void sprmidsToXML(::std::ostream &amp; out)
+{
+ </xsl:text>
+ <xsl:for-each select=".//UML:Class[.//UML:Stereotype/@xmi.idref='ww8sprm']">
+ <xsl:variable name="sprmcode">
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = 'sprmcode']/UML:TaggedValue.dataValue"/>
+ </xsl:variable>
+ <xsl:variable name="sprmcodelower">
+ <xsl:value-of select="translate($sprmcode, 'ABCDEF', 'abcdef')"/>
+ </xsl:variable>
+ <xsl:variable name="sprmidname">
+ <xsl:text>sprm:</xsl:text>
+ <xsl:value-of select="substring-after(@name, 'sprm')"/>
+ </xsl:variable>
+ <xsl:text>
+ out &lt;&lt; "&lt;theid name=\"</xsl:text>
+ <xsl:value-of select="$sprmidname"/>
+ <xsl:text>\"&gt;</xsl:text>
+ <xsl:value-of select="$sprmcodelower"/>
+ <xsl:text>&lt;/theid&gt;" &lt;&lt; endl;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+}
+ </xsl:text>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode='sprmreplace'>
+ <xsl:for-each select=".//UML:Class[.//UML:Stereotype/@xmi.idref='ww8sprm']">
+ <xsl:variable name="pattern">
+ <xsl:value-of select=".//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref = 'sprmcode']/UML:TaggedValue.dataValue"/>
+ </xsl:variable>
+ <xsl:variable name="lowerpattern">
+ <xsl:value-of select="translate($pattern, 'ABCDEF', 'abcdef')"/>
+ </xsl:variable>
+ <xsl:variable name="upperpattern">
+ <xsl:value-of select="translate($pattern, 'abcdef', 'ABCDEF')"/>
+ </xsl:variable>
+ <xsl:variable name="tmp">
+ <xsl:text>sprm:</xsl:text>
+ <xsl:value-of select="substring-after(@name, 'sprm')"/>
+ </xsl:variable>
+ <xsl:variable name="constname">
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="$tmp"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:text>
+sed "s/</xsl:text>
+ <xsl:value-of select="$lowerpattern"/>
+ <xsl:text>/</xsl:text>
+ <xsl:value-of select="$constname"/>
+ <xsl:text>/g" &lt; $1 > $1.out &amp;&amp; mv $1.out $1 </xsl:text>
+ <xsl:text>
+sed "s/</xsl:text>
+ <xsl:value-of select="$upperpattern"/>
+ <xsl:text>/</xsl:text>
+ <xsl:value-of select="$constname"/>
+ <xsl:text>/g" &lt; $1 > $1.out &amp;&amp; mv $1.out $1 </xsl:text>
+ </xsl:for-each>
+ <xsl:text>&#xa;</xsl:text>
+</xsl:template>
+
+<!-- Key all attributes with the same name and same value -->
+<xsl:key name="same-valued-tagged-data"
+ match="UML:TaggedValue.dataValue" use="." />
+
+<xsl:template name="analyzerdoctokidsattrs">
+ <xsl:text>
+ /* Attributes */</xsl:text>
+ <xsl:for-each select='.//UML:Attribute[@name!="reserved"]'>
+ <xsl:if test='count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0'>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="attrid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>
+ out &lt;&lt; "&lt;theid name=\"</xsl:text>
+ <xsl:value-of select=".//UML:TaggedValue.dataValue"/>
+ <xsl:text>\"&gt;</xsl:text>
+ <xsl:value-of select='10000 + position()'/>
+ <xsl:text>&lt;/theid&gt;" &lt;&lt; endl;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="analyzerdoctokidsops">
+ <xsl:text>
+ /* Operations */</xsl:text>
+ <xsl:for-each select='.//UML:Operation[@name!="reserved"]'>
+ <xsl:if test='count(.//UML:Stereotype[@xmi.idref="noqname"]) = 0'>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="opid"]'>
+ <xsl:choose>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>
+ out &lt;&lt; "&lt;theid name=\"</xsl:text>
+ <xsl:value-of select=".//UML:TaggedValue.dataValue"/>
+ <xsl:text>\"&gt;</xsl:text>
+ <xsl:value-of select='20000 + position()'/>
+ <xsl:text>&lt;/theid&gt;" &lt;&lt; endl;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="analyzerdoctokidsclasses">
+ <xsl:text>
+ /* clases */</xsl:text>
+ <xsl:for-each select='.//UML:Class[@name!="reserved"]'>
+ <xsl:for-each select='.//UML:TaggedValue[.//UML:TagDefinition/@xmi.idref="classid"]'>
+ <xsl:choose>
+ <xsl:when test='.//UML:Stereotype[@xmi.idref="noqname"]'/>
+ <xsl:when test='generate-id(UML:TaggedValue.dataValue) != generate-id(key("same-valued-tagged-data", UML:TaggedValue.dataValue)[1])'/>
+ <xsl:otherwise>
+ <xsl:text>
+ out &lt;&lt; "&lt;theid name=\"</xsl:text>
+ <xsl:value-of select=".//UML:TaggedValue.dataValue"/>
+ <xsl:text>\"&gt;</xsl:text>
+ <xsl:value-of select='30000 + position()'/>
+ <xsl:text>&lt;/theid&gt;" &lt;&lt; endl;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template match="UML:Model" mode="analyzerdoctokids">
+ <xsl:text>
+void doctokidsToXML(::std::ostream &amp; out)
+{</xsl:text>
+<xsl:call-template name="analyzerdoctokidsattrs"/>
+<xsl:call-template name="analyzerdoctokidsops"/>
+<xsl:call-template name="analyzerdoctokidsclasses"/>
+<xsl:text>
+}
+ </xsl:text>
+</xsl:template>
+
+ <xsl:template name="licenseheader">
+ <xsl:text>
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * http://www.openoffice.org/license.html
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+&#xa;</xsl:text>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/sprmcodetostr.xsl b/writerfilter/source/doctok/sprmcodetostr.xsl
new file mode 100644
index 000000000000..98cf02919959
--- /dev/null
+++ b/writerfilter/source/doctok/sprmcodetostr.xsl
@@ -0,0 +1,39 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output method="text" />
+
+<xsl:include href="resourcetools.xsl"/>
+
+<xsl:template match="/">
+ <xsl:apply-templates select=".//UML:Model" mode="sprmcodetostr"/>
+</xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/sprmids.xsl b/writerfilter/source/doctok/sprmids.xsl
new file mode 100644
index 000000000000..2ca8826e94dc
--- /dev/null
+++ b/writerfilter/source/doctok/sprmids.xsl
@@ -0,0 +1,82 @@
+<!--
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+
+ <xsl:include href="resourcetools.xsl"/>
+
+ <xsl:template match="/">
+ <out>
+ <xsl:text>
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * http://www.openoffice.org/license.html
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+#ifndef INCLUDED_SPRMIDS
+#define INCLUDED_SPRMIDS
+
+#include &lt;sal/types.h&gt;
+
+</xsl:text>
+<xsl:apply-templates select=".//UML:Model" mode="sprmids"/>
+<xsl:text>
+
+#endif // INCLUDED_SPRMIDS&#xa;</xsl:text>
+ </out>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/doctok/tidyxmi.xsl b/writerfilter/source/doctok/tidyxmi.xsl
new file mode 100644
index 000000000000..6371fb05b696
--- /dev/null
+++ b/writerfilter/source/doctok/tidyxmi.xsl
@@ -0,0 +1,120 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+-->
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output indent="yes"/>
+<xsl:template match="/">
+<XMI xmi.version="1.2">
+ <XMI.header>
+ <XMI.documentation/>
+ </XMI.header>
+ <XMI.content>
+ <UML:Model xmlns:UML="org.omg.xmi.namespace.UML" name="WW8Document" >
+ <UML:Namespace.ownedElement>
+ <xsl:apply-templates select="XMI/XMI.content/UML:Model/UML:Namespace.ownedElement"/>
+ </UML:Namespace.ownedElement>
+ </UML:Model>
+ </XMI.content>
+</XMI>
+
+</xsl:template>
+
+<xsl:template match="UML:Namespace.ownedElement">
+ <xsl:comment>Stereotypes </xsl:comment>
+ <xsl:copy-of select="UML:Stereotype"/>
+ <xsl:comment>Stereotypes</xsl:comment>
+ <xsl:comment>Datatypes </xsl:comment>
+ <xsl:copy-of select="UML:DataType"/>
+ <xsl:comment>Datatypes</xsl:comment>
+ <xsl:comment>Tag definitions </xsl:comment>
+ <xsl:copy-of select="UML:TagDefinition"/>
+ <xsl:comment>Tag definitions </xsl:comment>
+ <xsl:comment>Classes without stereotype</xsl:comment>
+ <xsl:apply-templates select="UML:Class[count(./UML:ModelElement.stereotype) = 0]"/>
+ <xsl:comment>Classes without stereotype</xsl:comment>
+ <xsl:comment>Resources</xsl:comment>
+ <xsl:copy-of select="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='resource']"/>
+ <xsl:comment>Resources</xsl:comment>
+ <xsl:comment>WW8 resources</xsl:comment>
+ <xsl:apply-templates select="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8resource' and count(UML:ModelElement.stereotype/UML:Stereotype[@xmi.idref='ww8sprm']) = 0]"/>
+ <xsl:comment>WW8 resources</xsl:comment>
+ <xsl:comment>SPRMS</xsl:comment>
+ <xsl:apply-templates select="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8sprm']"/>
+ <xsl:comment>SPRMS</xsl:comment>
+ <xsl:comment>DFFS</xsl:comment>
+ <xsl:apply-templates select="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='dffrecord']"/>
+ <xsl:comment>DFFS</xsl:comment>
+ <xsl:comment>DFFOPT</xsl:comment>
+ <xsl:apply-templates select="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='dffopt']"/>
+ <xsl:comment>DFFOPT</xsl:comment>
+</xsl:template>
+
+<xsl:key name="generalization" match="UML:Generalization"
+ use="UML:Generalization.child/UML:Class/@xmi.idref"/>
+
+<xsl:template match="UML:Class[count(UML:ModelElement.stereotype) = 0]">
+ <xsl:variable name="theid"><xsl:value-of select="@xmi.id"/></xsl:variable>
+ <xsl:comment>Class <xsl:value-of select="@xmi.id"/></xsl:comment>
+ <xsl:copy-of select="."/>
+ <xsl:copy-of select="key('generalization', $theid)"/>
+ <xsl:comment>Class <xsl:value-of select="@xmi.id"/></xsl:comment>
+</xsl:template>
+
+<xsl:template match="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8resource' and count(UML:ModelElement.stereotype/UML:Stereotype[@xmi.idref='ww8sprm']) = 0]">
+ <xsl:variable name="theid"><xsl:value-of select="@xmi.id"/></xsl:variable>
+ <xsl:comment>Class <xsl:value-of select="@xmi.id"/></xsl:comment>
+ <xsl:copy-of select="."/>
+ <xsl:copy-of select="key('generalization', $theid)"/>
+ <xsl:comment>Class <xsl:value-of select="@xmi.id"/></xsl:comment>
+</xsl:template>
+
+<xsl:template match="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='ww8sprm']">
+ <xsl:variable name="theid"><xsl:value-of select="@xmi.id"/></xsl:variable>
+ <xsl:comment>SPRM <xsl:value-of select="@xmi.id"/></xsl:comment>
+ <xsl:copy-of select="."/>
+ <xsl:copy-of select="key('generalization', $theid)"/>
+ <xsl:comment>SPRM <xsl:value-of select="@xmi.id"/></xsl:comment>
+</xsl:template>
+
+<xsl:template match="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='dffrecord']">
+ <xsl:variable name="theid"><xsl:value-of select="@xmi.id"/></xsl:variable>
+ <xsl:comment>DFF <xsl:value-of select="@xmi.id"/></xsl:comment>
+ <xsl:copy-of select="."/>
+ <xsl:copy-of select="key('generalization', $theid)"/>
+ <xsl:comment>DFF <xsl:value-of select="@xmi.id"/></xsl:comment>
+</xsl:template>
+
+<xsl:template match="UML:Class[UML:ModelElement.stereotype/UML:Stereotype/@xmi.idref='dffopt']">
+ <xsl:variable name="theid"><xsl:value-of select="@xmi.id"/></xsl:variable>
+ <xsl:comment>DFFOPT <xsl:value-of select="@xmi.id"/></xsl:comment>
+ <xsl:copy-of select="."/>
+ <xsl:copy-of select="key('generalization', $theid)"/>
+ <xsl:comment>DFFOPT <xsl:value-of select="@xmi.id"/></xsl:comment>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/doctok/xmigen.el b/writerfilter/source/doctok/xmigen.el
new file mode 100644
index 000000000000..c85299604374
--- /dev/null
+++ b/writerfilter/source/doctok/xmigen.el
@@ -0,0 +1,126 @@
+(defun insert-uml-class-begin (name)
+ (insert "<UML:Class xmi.id=\"" name "\" name=\"" name "\">\n"))
+
+(defun insert-uml-class-end ()
+ (insert "</UML:Class>\n"))
+
+(defun insert-uml-stereotype (stereotype)
+ (insert "<UML:ModelElement.stereotype>\n")
+ (insert " <UML:Stereotype xmi.idref=\"" stereotype "\"/>\n")
+ (insert "</UML:ModelElement.stereotype>\n"))
+
+
+(defun insert-uml-taggedvalue (value type)
+ (insert " <UML:ModelElement.taggedValue>\n")
+ (insert " <UML:TaggedValue>\n")
+ (insert " <UML:TaggedValue.dataValue>" value "</UML:TaggedValue.dataValue>\n")
+ (insert " <UML:TaggedValue.type>\n")
+ (insert " <UML:TagDefinition xmi.idref=\"" type "\"/>\n")
+ (insert " </UML:TaggedValue.type>\n")
+ (insert " </UML:TaggedValue>\n")
+ (insert " </UML:ModelElement.taggedValue>\n"))
+
+(defun insert-uml-attribute (type name offset bits mask shift comment attrid)
+ (insert "<UML:Classifier.feature>\n")
+ (insert " <UML:Attribute name=\"" name "\">\n")
+ (insert-uml-taggedvalue comment "comment")
+ (insert-uml-taggedvalue offset "offset")
+ (insert-uml-taggedvalue bits "bits")
+ (insert-uml-taggedvalue mask "mask")
+ (insert-uml-taggedvalue shift "shift")
+ (insert-uml-taggedvalue attrid "attrid")
+ (insert " <UML:StructuralFeature.type>\n")
+ (insert " <UML:DataType xmi.idref=\"" type "\"/>\n")
+ (insert " </UML:StructuralFeature.type>\n")
+ (insert " <UML:ModelElement.stereotype>\n")
+ (insert " <UML:Stereotype xmi.idref=\"attribute\"/>\n")
+ (insert " </UML:ModelElement.stereotype>\n")
+ (insert " </UML:Attribute>\n")
+ (insert "</UML:Classifier.feature>\n"))
+
+(defun insert-uml-attribute-array (type arraycount name offset bits mask shift comment attrid)
+ (insert "<UML:Classifier.feature>\n")
+ (insert " <UML:Attribute name=\"" name "\">\n")
+ (insert-uml-taggedvalue comment "comment")
+ (insert-uml-taggedvalue offset "offset")
+ (insert-uml-taggedvalue bits "bits")
+ (insert-uml-taggedvalue mask "mask")
+ (insert-uml-taggedvalue shift "shift")
+ (insert-uml-taggedvalue attrid "attrid")
+ (insert-uml-taggedvalue arraycount "arraycount")
+ (insert " <UML:StructuralFeature.type>\n")
+ (insert " <UML:DataType xmi.idref=\"" type "\"/>\n")
+ (insert " </UML:StructuralFeature.type>\n")
+ (insert " <UML:ModelElement.stereotype>\n")
+ (insert " <UML:Stereotype xmi.idref=\"array\"/>\n")
+ (insert " </UML:ModelElement.stereotype>\n")
+ (insert " </UML:Attribute>\n")
+ (insert "</UML:Classifier.feature>\n"))
+
+(defun insert-uml-operation (type name comment opid)
+ (insert "<UML:Classifier.feature>\n")
+ (insert " <UML:Operation name=\"" name "\" >\n")
+ (insert-uml-taggedvalue opid "opid")
+ (insert " <UML:BehavioralFeature.parameter>\n")
+ (insert " <UML:Parameter kind=\"return\" name=\"return\">\n")
+ (insert " <UML:Parameter.type>\n")
+ (insert " <UML:Class xmi.idref=\"" type "\" />\n")
+ (insert " </UML:Parameter.type>\n")
+ (insert " </UML:Parameter>\n")
+ (insert " </UML:BehavioralFeature.parameter>\n")
+ (insert " <UML:ModelElement.stereotype>\n")
+ (insert " <UML:Stereotype xmi.idref=\"attribute\" />\n")
+ (insert " </UML:ModelElement.stereotype>\n")
+ (insert " </UML:Operation>\n")
+ (insert "</UML:Classifier.feature>\n"))
+
+(defun insert-uml-binary (name comment opid)
+ (insert "<UML:Classifier.feature>\n")
+ (insert " <UML:Operation name=\"" name "\" >\n")
+ (insert-uml-taggedvalue opid "opid")
+ (insert " <UML:BehavioralFeature.parameter>\n")
+ (insert " <UML:Parameter kind=\"return\" name=\"return\">\n")
+ (insert " <UML:Parameter.type>\n")
+ (insert " <UML:Class xmi.idref=\"Binary\" />\n")
+ (insert " </UML:Parameter.type>\n")
+ (insert " </UML:Parameter>\n")
+ (insert " </UML:BehavioralFeature.parameter>\n")
+ (insert " <UML:ModelElement.stereotype>\n")
+ (insert " <UML:Stereotype xmi.idref=\"binary\" />\n")
+ (insert " </UML:ModelElement.stereotype>\n")
+ (insert " </UML:Operation>\n")
+ (insert "</UML:Classifier.feature>\n"))
+
+(defun insert-uml-operation-array (type name comment opid)
+ (insert "<UML:Classifier.feature>\n")
+ (insert " <UML:Operation name=\"" name "\" >\n")
+ (insert-uml-taggedvalue opid "opid")
+ (insert " <UML:BehavioralFeature.parameter>\n")
+ (insert " <UML:Parameter kind=\"return\" name=\"return\">\n")
+ (insert " <UML:Parameter.type>\n")
+ (insert " <UML:Class xmi.idref=\"" type "\" />\n")
+ (insert " </UML:Parameter.type>\n")
+ (insert " </UML:Parameter>\n")
+ (insert " </UML:BehavioralFeature.parameter>\n")
+ (insert " <UML:ModelElement.stereotype>\n")
+ (insert " <UML:Stereotype xmi.idref=\"array\" />\n")
+ (insert " </UML:ModelElement.stereotype>\n")
+ (insert " </UML:Operation>\n")
+ (insert "</UML:Classifier.feature>\n"))
+
+(defun insert-uml-generalization (parent child)
+ (insert "<UML:Generalization isSpecification=\"false\" xmi.id=\"" child "-" parent "\" >\n")
+ (insert " <UML:Generalization.child>\n")
+ (insert " <UML:Class xmi.idref=\"" child "\" />\n")
+ (insert " </UML:Generalization.child>\n")
+ (insert " <UML:Generalization.parent>\n")
+ (insert " <UML:Class xmi.idref=\"" parent "\" />\n")
+ (insert " </UML:Generalization.parent>\n")
+ (insert "</UML:Generalization>\n"))
+
+(defun insert-uml-sprm (name sprmcode kind)
+ (insert-uml-class-begin name)
+ (insert-uml-stereotype "ww8sprm")
+ (insert-uml-taggedvalue sprmcode "sprmcode")
+ (insert-uml-taggedvalue (concat "rtf:" name) "sprmid")
+ (insert-uml-taggedvalue kind "kind")) \ No newline at end of file
diff --git a/writerfilter/source/doctok/xmigen.xsl b/writerfilter/source/doctok/xmigen.xsl
new file mode 100644
index 000000000000..f184dcfed4d2
--- /dev/null
+++ b/writerfilter/source/doctok/xmigen.xsl
@@ -0,0 +1,577 @@
+<!--
+/*************************************************************************
+ *
+ * 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: resources.xsl,v $
+ *
+ * $Revision: 1.9 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+-->
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:UML = 'org.omg.xmi.namespace.UML'
+ xml:space="default">
+ <xsl:output method="xml"/>
+
+ <xsl:template match="/">
+ <out>
+ <xsl:apply-templates select="*"/>
+ </out>
+ </xsl:template>
+
+ <xsl:template name="calcsizeinner">
+ <xsl:param name="size">0</xsl:param>
+ <xsl:variable name="arraycount">
+ <xsl:choose>
+ <xsl:when test="@array-count">
+ <xsl:value-of select="@array-count"/>
+ </xsl:when>
+ <xsl:otherwise>1</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="mysize">
+ <xsl:choose>
+ <xsl:when test="@size and not(@offset)">
+ <xsl:value-of select="number($arraycount) * number(@size)"/>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="following-sibling::*">
+ <xsl:for-each select="following-sibling::*[1]">
+ <xsl:call-template name="calcsizeinner">
+ <xsl:with-param name="size"
+ select="number($size) + number($mysize)"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="number($size) + number($mysize)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="calcsize">
+ <xsl:for-each select="*[1]">
+ <xsl:call-template name="calcsizeinner"/>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="calcoffsetinner">
+ <xsl:variable name="arraycount">
+ <xsl:choose>
+ <xsl:when test="@array-count">
+ <xsl:value-of select="@array-count"/>
+ </xsl:when>
+ <xsl:otherwise>1</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="mysize">
+ <xsl:choose>
+ <xsl:when test="@size and not(@offset)">
+ <xsl:value-of select="number($arraycount) * number(@size)"/>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="preceding-sibling::*">
+ <xsl:variable name="precedingoffset">
+ <xsl:for-each select="preceding-sibling::*[1]">
+ <xsl:call-template name="calcoffsetinner"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:value-of select="number($precedingoffset) + number($mysize)"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$mysize"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="calcoffset">
+ <xsl:choose>
+ <xsl:when test="@offset">
+ <xsl:value-of select="@offset"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:for-each select="preceding-sibling::*[1]">
+ <xsl:call-template name="calcoffsetinner"/>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="ww8resource">
+ <UML:Class>
+ <xsl:attribute name="xmi.id">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="ww8resource"/>
+ </UML:ModelElement.stereotype>
+ <xsl:for-each select="stereotype">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype>
+ <xsl:attribute name="xmi.idref">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ </UML:Stereotype>
+ </UML:ModelElement.stereotype>
+ </xsl:for-each>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>
+ <xsl:call-template name="calcsize"/>
+ </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="size"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+
+ <xsl:apply-templates select="*"/>
+
+ </UML:Class>
+ <UML:Generalization isSpecification="false">
+ <xsl:attribute name="xmi.id">
+ <xsl:value-of select="@name"/>
+ <xsl:text>-</xsl:text>
+ <xsl:value-of select="@resource"/>
+ </xsl:attribute>
+ <UML:Generalization.child>
+ <UML:Class>
+ <xsl:attribute name="xmi.idref">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ </UML:Class>
+ </UML:Generalization.child>
+ <UML:Generalization.parent>
+ <UML:Class xmi.idref="Properties">
+ <xsl:attribute name="xmi.idref">
+ <xsl:value-of select="@resource"/>
+ </xsl:attribute>
+ </UML:Class>
+ </UML:Generalization.parent>
+ </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"/>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>
+ <xsl:value-of select="$value"/>
+ </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition>
+ <xsl:attribute name="xmi.idref">
+ <xsl:value-of select="$type"/>
+ </xsl:attribute>
+ </UML:TagDefinition>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ </xsl:template>
+
+ <xsl:template match="attribute">
+ <UML:Classifier.feature>
+ <UML:Attribute>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:call-template name="taggedvalue">
+ <xsl:with-param name="type">comment</xsl:with-param>
+ <xsl:with-param name="value"/>
+ </xsl:call-template>
+ <xsl:call-template name="taggedvalue">
+ <xsl:with-param name="type">offset</xsl:with-param>
+ <xsl:with-param name="value">
+ <xsl:call-template name="calcoffset"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:call-template name="taggedvalue">
+ <xsl:with-param name="type">shift</xsl:with-param>
+ <xsl:with-param name="value"></xsl:with-param>
+ </xsl:call-template>
+ <xsl:call-template name="taggedvalue">
+ <xsl:with-param name="type">mask</xsl:with-param>
+ <xsl:with-param name="value"></xsl:with-param>
+ </xsl:call-template>
+ <xsl:call-template name="taggedvalue">
+ <xsl:with-param name="type">bits</xsl:with-param>
+ <xsl:with-param name="value"></xsl:with-param>
+ </xsl:call-template>
+ <xsl:call-template name="taggedvalue">
+ <xsl:with-param name="type">attrid</xsl:with-param>
+ <xsl:with-param name="value">
+ <xsl:choose>
+ <xsl:when test="@token">
+ <xsl:value-of select="@token"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>rtf:</xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:if test="@array-count">
+ <xsl:call-template name="taggedvalue">
+ <xsl:with-param name="type">arraycount</xsl:with-param>
+ <xsl:with-param name="value">
+ <xsl:value-of select="@array-count"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <UML:StructuralFeature.type>
+ <UML:DataType>
+ <xsl:attribute name="xmi.idref">
+ <xsl:value-of select="@type"/>
+ </xsl:attribute>
+ </UML:DataType>
+ </UML:StructuralFeature.type>
+ <xsl:choose>
+ <xsl:when test="@array-count">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </xsl:when>
+ <xsl:otherwise>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </xsl:otherwise>
+ </xsl:choose>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </xsl:template>
+
+ <xsl:template match="bitfield">
+ <xsl:variable name="offset">
+ <xsl:call-template name="calcoffset"/>
+ </xsl:variable>
+ <xsl:for-each select="bits">
+ <xsl:call-template name="bits">
+ <xsl:with-param name="offset" select="$offset"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="mask">
+ <xsl:param name="count"/>
+ <xsl:param name="value"/>
+
+ <xsl:choose>
+ <xsl:when test="number($count) = 1">
+ <xsl:value-of select="$value"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="mask">
+ <xsl:with-param name="count" select="number($count) - 1"/>
+ <xsl:with-param name="value" select="number($value) * 2 + 1"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="shift">
+ <xsl:param name="shift"/>
+ <xsl:param name="value"/>
+
+ <xsl:choose>
+ <xsl:when test="number($shift) = 0">
+ <xsl:value-of select="$value"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="shift">
+ <xsl:with-param name="shift" select="number($shift) - 1"/>
+ <xsl:with-param name="value" select="$value * 2"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name='dectohex'>
+ <xsl:param name="number"/>
+ <xsl:if test="$number > 16">
+ <xsl:call-template name="dectohex">
+ <xsl:with-param name="number" select="floor($number div 16)"/>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:value-of select="substring('0123456789abcdef', $number mod 16 + 1, 1)"/>
+ </xsl:template>
+
+ <xsl:template name="calcshift">
+ <xsl:choose>
+ <xsl:when test="@shift">
+ <xsl:value-of select="@shift"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="sum(following-sibling::*[not (@shift)]/@bits)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="bits">
+ <xsl:param name="offset"/>
+ <xsl:variable name="shift">
+ <xsl:call-template name="calcshift"/>
+ </xsl:variable>
+ <xsl:variable name="mask">
+ <xsl:call-template name="mask">
+ <xsl:with-param name="count" select="@bits"/>
+ <xsl:with-param name="value" select="1"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="maskshifted">
+ <xsl:call-template name="shift">
+ <xsl:with-param name="shift" select="$shift"/>
+ <xsl:with-param name="value" select="$mask"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="maskhex">
+ <xsl:text>0x</xsl:text>
+ <xsl:call-template name="dectohex">
+ <xsl:with-param name="number" select="$maskshifted"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <UML:Classifier.feature>
+ <UML:Attribute>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue/>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="comment"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>
+ <xsl:value-of select="$offset"/>
+ </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="offset"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>
+ <xsl:value-of select="$shift"/>
+ </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="shift"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>
+ <xsl:value-of select="$maskhex"/>
+ </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="mask"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>
+ <xsl:value-of select="@bits"/>
+ </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="bits"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:ModelElement.taggedValue>
+ <UML:TaggedValue>
+ <UML:TaggedValue.dataValue>
+ <xsl:choose>
+ <xsl:when test="@token">
+ <xsl:value-of select="@token"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>rtf:</xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </UML:TaggedValue.dataValue>
+ <UML:TaggedValue.type>
+ <UML:TagDefinition xmi.idref="attrid"/>
+ </UML:TaggedValue.type>
+ </UML:TaggedValue>
+ </UML:ModelElement.taggedValue>
+ <UML:StructuralFeature.type>
+ <UML:DataType>
+ <xsl:attribute name="xmi.idref">
+ <xsl:value-of select="ancestor::bitfield/@type"/>
+ </xsl:attribute>
+ </UML:DataType>
+ </UML:StructuralFeature.type>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </UML:Attribute>
+ </UML:Classifier.feature>
+ </xsl:template>
+
+ <xsl:template match="operation">
+ <UML:Classifier.feature>
+ <UML:Operation>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:call-template name="taggedvalue">
+ <xsl:with-param name="type">opid</xsl:with-param>
+ <xsl:with-param name="value">
+ <xsl:choose>
+ <xsl:when test="@token">
+ <xsl:value-of select="@token"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>rtf:</xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:call-template>
+ <xsl:if test="@array-count">
+ <xsl:call-template name="taggedvalue">
+ <xsl:with-param name="type">arraycount</xsl:with-param>
+ <xsl:with-param name="value">
+ <xsl:value-of select="@array-count"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <UML:BehavioralFeature.parameter>
+ <UML:Parameter kind="return" name="return">
+ <UML:Parameter.type>
+ <UML:Class>
+ <xsl:attribute name="xmi.idref">
+ <xsl:value-of select="@type"/>
+ </xsl:attribute>
+ </UML:Class>
+ </UML:Parameter.type>
+ </UML:Parameter>
+ </UML:BehavioralFeature.parameter>
+ <xsl:choose>
+ <xsl:when test="@array-count or stereotype[text()='array']">
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="array"/>
+ </UML:ModelElement.stereotype>
+ </xsl:when>
+ <xsl:otherwise>
+ <UML:ModelElement.stereotype>
+ <UML:Stereotype xmi.idref="attribute"/>
+ </UML:ModelElement.stereotype>
+ </xsl:otherwise>
+ </xsl:choose>
+ </UML:Operation>
+ </UML:Classifier.feature>
+ </xsl:template>
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/doctok/xmistat.xsl b/writerfilter/source/doctok/xmistat.xsl
new file mode 100644
index 000000000000..842e0f0361e2
--- /dev/null
+++ b/writerfilter/source/doctok/xmistat.xsl
@@ -0,0 +1,37 @@
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+<xsl:output indent="yes"/>
+<xsl:template match="/">
+ <xsl:for-each select="//UML:Class[@xmi.id]">
+ <xsl:value-of select="@xmi.id"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:value-of select="count(//UML:Class)"/>
+</xsl:template>
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/doctok/xmitocpp b/writerfilter/source/doctok/xmitocpp
new file mode 100755
index 000000000000..ec06b400eb80
--- /dev/null
+++ b/writerfilter/source/doctok/xmitocpp
@@ -0,0 +1,34 @@
+#!/bin/tcsh
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+xalan -xsl qnametostr.xsl -in resources.xmi > qnametostr.tmp
+xalan -xsl sprmcodetostr.xsl -in resources.xmi > sprmcodetostr.tmp
+xalan -xsl resources.xsl -in resources.xmi > resources.hxx
+xalan -xsl resourcesimpl.xsl -in resources.xmi > resources.cxx
+xalan -xsl resourceids.xsl -in resources.xmi > ../../inc/doctok/resourceids.hxx
+xalan -xsl sprmids.xsl -in resources.xmi > ../../inc/resourcemodel/sprmids.hxx
diff --git a/writerfilter/source/filter/ImportFilter.cxx b/writerfilter/source/filter/ImportFilter.cxx
new file mode 100644
index 000000000000..199c91f3a48f
--- /dev/null
+++ b/writerfilter/source/filter/ImportFilter.cxx
@@ -0,0 +1,249 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <osl/diagnose.h>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <comphelper/mediadescriptor.hxx>
+#include <oox/core/filterdetect.hxx>
+#include <dmapper/DomainMapper.hxx>
+#include <WriterFilter.hxx>
+#include <doctok/WW8Document.hxx>
+#include <ooxml/OOXMLDocument.hxx>
+#ifdef DEBUG_IMPORT
+#include <iostream>
+#include <osl/process.h>
+#endif
+
+#include <resourcemodel/TagLogger.hxx>
+using namespace ::rtl;
+using namespace ::com::sun::star;
+using ::comphelper::MediaDescriptor;
+
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Bool WriterFilter::filter( const uno::Sequence< beans::PropertyValue >& aDescriptor )
+ throw (uno::RuntimeException)
+{
+ if( m_xSrcDoc.is() )
+ {
+ uno::Reference< lang::XMultiServiceFactory > xMSF(m_xContext->getServiceManager(), uno::UNO_QUERY_THROW);
+ uno::Reference< uno::XInterface > xIfc( xMSF->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.DocxExport" ))), uno::UNO_QUERY_THROW);
+ if (!xIfc.is())
+ return sal_False;
+ uno::Reference< document::XExporter > xExprtr(xIfc, uno::UNO_QUERY_THROW);
+ uno::Reference< document::XFilter > xFltr(xIfc, uno::UNO_QUERY_THROW);
+ if (!xExprtr.is() || !xFltr.is())
+ return sal_False;
+ xExprtr->setSourceDocument(m_xSrcDoc);
+ return xFltr->filter(aDescriptor);
+ }
+ else if (m_xDstDoc.is())
+ {
+ MediaDescriptor aMediaDesc( aDescriptor );
+ OUString sFilterName = aMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_FILTERNAME(), OUString() );
+
+ uno::Reference< io::XInputStream > xInputStream;
+ try
+ {
+ // use the oox.core.FilterDetect implementation to extract the decrypted ZIP package
+ ::oox::core::FilterDetect aDetector( m_xContext );
+ xInputStream = aDetector.extractUnencryptedPackage( aMediaDesc );
+ }
+ catch( uno::Exception& )
+ {
+ }
+
+ if ( !xInputStream.is() )
+ {
+ return sal_False;
+ }
+
+#ifdef DEBUG_IMPORT
+ OUString sURL = aMediaDesc.getUnpackedValueOrDefault( MediaDescriptor::PROP_URL(), OUString() );
+ ::std::string sURLc = OUStringToOString(sURL, RTL_TEXTENCODING_ASCII_US).getStr();
+
+ writerfilter::TagLogger::Pointer_t debugLogger
+ (writerfilter::TagLogger::getInstance("DEBUG"));
+ debugLogger->setFileName(sURLc);
+ debugLogger->startDocument();
+
+ writerfilter::TagLogger::Pointer_t dmapperLogger
+ (writerfilter::TagLogger::getInstance("DOMAINMAPPER"));
+ dmapperLogger->setFileName(sURLc);
+ dmapperLogger->startDocument();
+#endif
+
+ writerfilter::dmapper::SourceDocumentType eType =
+ (m_sFilterName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "writer_MS_Word_2007" ) ) ||
+ m_sFilterName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "writer_MS_Word_2007_Template" ) )) ?
+ writerfilter::dmapper::DOCUMENT_OOXML : writerfilter::dmapper::DOCUMENT_DOC;
+ writerfilter::Stream::Pointer_t pStream(new writerfilter::dmapper::DomainMapper(m_xContext, xInputStream, m_xDstDoc, eType));
+ //create the tokenizer and domain mapper
+ if( eType == writerfilter::dmapper::DOCUMENT_OOXML )
+ {
+ writerfilter::ooxml::OOXMLStream::Pointer_t pDocStream = writerfilter::ooxml::OOXMLDocumentFactory::createStream(m_xContext, xInputStream);
+ writerfilter::ooxml::OOXMLDocument::Pointer_t pDocument(writerfilter::ooxml::OOXMLDocumentFactory::createDocument(pDocStream));
+
+ uno::Reference<frame::XModel> xModel(m_xDstDoc, uno::UNO_QUERY_THROW);
+ pDocument->setModel(xModel);
+
+ uno::Reference<drawing::XDrawPageSupplier> xDrawings
+ (m_xDstDoc, uno::UNO_QUERY_THROW);
+ uno::Reference<drawing::XDrawPage> xDrawPage
+ (xDrawings->getDrawPage(), uno::UNO_SET_THROW);
+ pDocument->setDrawPage(xDrawPage);
+
+ pDocument->resolve(*pStream);
+ }
+ else
+ {
+ writerfilter::doctok::WW8Stream::Pointer_t pDocStream = writerfilter::doctok::WW8DocumentFactory::createStream(m_xContext, xInputStream);
+ writerfilter::doctok::WW8Document::Pointer_t pDocument(writerfilter::doctok::WW8DocumentFactory::createDocument(pDocStream));
+
+ pDocument->resolve(*pStream);
+ }
+
+#ifdef DEBUG_IMPORT
+ writerfilter::TagLogger::dump("DOMAINMAPPER");
+ dmapperLogger->endDocument();
+ writerfilter::TagLogger::dump("DEBUG");
+ debugLogger->endDocument();
+#endif
+
+ return sal_True;
+ }
+ return sal_False;
+}
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void WriterFilter::cancel( ) throw (uno::RuntimeException)
+{
+}
+
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void WriterFilter::setTargetDocument( const uno::Reference< lang::XComponent >& xDoc )
+ throw (lang::IllegalArgumentException, uno::RuntimeException)
+{
+ m_xDstDoc = xDoc;
+}
+
+void WriterFilter::setSourceDocument( const uno::Reference< lang::XComponent >& xDoc )
+ throw (lang::IllegalArgumentException, uno::RuntimeException)
+{
+ m_xSrcDoc = xDoc;
+}
+
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+void WriterFilter::initialize( const uno::Sequence< uno::Any >& aArguments ) throw (uno::Exception, uno::RuntimeException)
+{
+ uno::Sequence < beans::PropertyValue > aAnySeq;
+ sal_Int32 nLength = aArguments.getLength();
+ if ( nLength && ( aArguments[0] >>= aAnySeq ) )
+ {
+ const beans::PropertyValue * pValue = aAnySeq.getConstArray();
+ nLength = aAnySeq.getLength();
+ for ( sal_Int32 i = 0 ; i < nLength; i++)
+ {
+ if ( pValue[i].Name.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "Type" ) ) )
+ {
+ pValue[i].Value >>= m_sFilterName;
+ break;
+ }
+ }
+ }
+}
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OUString WriterFilter_getImplementationName () throw (uno::RuntimeException)
+{
+ return OUString ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.WriterFilter" ) );
+}
+
+#define SERVICE_NAME1 "com.sun.star.document.ImportFilter"
+#define SERVICE_NAME2 "com.sun.star.document.ExportFilter"
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Bool WriterFilter_supportsService( const OUString& ServiceName ) throw (uno::RuntimeException)
+{
+ return (ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME1 ) ) ||
+ ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME1 ) ));
+}
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Sequence< OUString > WriterFilter_getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ uno::Sequence < OUString > aRet(2);
+ OUString* pArray = aRet.getArray();
+ pArray[0] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME1 ) );
+ pArray[1] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME2 ) );
+ return aRet;
+}
+#undef SERVICE_NAME1
+#undef SERVICE_NAME2
+
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< uno::XInterface > WriterFilter_createInstance( const uno::Reference< uno::XComponentContext >& xContext)
+ throw( uno::Exception )
+{
+ return (cppu::OWeakObject*) new WriterFilter( xContext );
+}
+
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OUString WriterFilter::getImplementationName( ) throw (uno::RuntimeException)
+{
+ return WriterFilter_getImplementationName();
+}
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Bool WriterFilter::supportsService( const OUString& rServiceName ) throw (uno::RuntimeException)
+{
+ return WriterFilter_supportsService( rServiceName );
+}
+/*-- 09.06.2006 10:15:20---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Sequence< OUString > WriterFilter::getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ return WriterFilter_getSupportedServiceNames();
+}
+
diff --git a/writerfilter/source/filter/RtfFilter.cxx b/writerfilter/source/filter/RtfFilter.cxx
new file mode 100644
index 000000000000..040843afd7ce
--- /dev/null
+++ b/writerfilter/source/filter/RtfFilter.cxx
@@ -0,0 +1,146 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ * Copyright 2010 Miklos Vajna.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _CPPUHELPER_IMPLEMENTATIONENTRY_
+#include <cppuhelper/implementationentry.hxx>
+#endif
+#include <osl/module.hxx>
+#include <tools/solar.h>
+#include <RtfFilter.hxx>
+
+using namespace ::rtl;
+using namespace ::cppu;
+using namespace ::com::sun::star;
+
+RtfFilter::RtfFilter( const uno::Reference< uno::XComponentContext >& rxContext) :
+ m_xContext( rxContext )
+{
+}
+
+RtfFilter::~RtfFilter()
+{
+}
+
+sal_Bool RtfFilter::filter( const uno::Sequence< beans::PropertyValue >& aDescriptor )
+ throw (uno::RuntimeException)
+{
+ OSL_TRACE("%s", OSL_THIS_FUNC);
+ if( m_xSrcDoc.is() )
+ {
+ uno::Reference< lang::XMultiServiceFactory > xMSF(m_xContext->getServiceManager(), uno::UNO_QUERY_THROW);
+ uno::Reference< uno::XInterface > xIfc( xMSF->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.RtfExport" ))), uno::UNO_QUERY_THROW);
+ if (!xIfc.is())
+ return sal_False;
+ uno::Reference< document::XExporter > xExprtr(xIfc, uno::UNO_QUERY_THROW);
+ uno::Reference< document::XFilter > xFltr(xIfc, uno::UNO_QUERY_THROW);
+ if (!xExprtr.is() || !xFltr.is())
+ return sal_False;
+ xExprtr->setSourceDocument(m_xSrcDoc);
+ return xFltr->filter(aDescriptor);
+ }
+ else if ( m_xDstDoc.is() )
+ {
+ uno::Reference< lang::XMultiServiceFactory > xMSF(m_xContext->getServiceManager(), uno::UNO_QUERY_THROW);
+ uno::Reference< uno::XInterface > xIfc( xMSF->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.RtfImport" ))), uno::UNO_QUERY_THROW);
+ if (!xIfc.is())
+ return sal_False;
+ uno::Reference< document::XImporter > xImprtr(xIfc, uno::UNO_QUERY_THROW);
+ uno::Reference< document::XFilter > xFltr(xIfc, uno::UNO_QUERY_THROW);
+ if (!xImprtr.is() || !xFltr.is())
+ return sal_False;
+ xImprtr->setTargetDocument(m_xDstDoc);
+ return xFltr->filter(aDescriptor);
+ }
+ return sal_False;
+}
+
+void RtfFilter::cancel( ) throw (uno::RuntimeException)
+{
+}
+
+void RtfFilter::setSourceDocument( const uno::Reference< lang::XComponent >& xDoc )
+ throw (lang::IllegalArgumentException, uno::RuntimeException)
+{
+ m_xSrcDoc = xDoc;
+}
+
+void RtfFilter::setTargetDocument( const uno::Reference< lang::XComponent >& xDoc )
+ throw (lang::IllegalArgumentException, uno::RuntimeException)
+{
+ m_xDstDoc = xDoc;
+}
+
+void RtfFilter::initialize( const uno::Sequence< uno::Any >& /*aArguments*/ ) throw (uno::Exception, uno::RuntimeException)
+{
+ // The DOCX exporter here extracts 'type' of the filter, ie 'Word' or
+ // 'Word Template' but we don't need it for RTF.
+}
+
+OUString RtfFilter::getImplementationName( ) throw (uno::RuntimeException)
+{
+ return RtfFilter_getImplementationName();
+}
+
+#define SERVICE_NAME1 "com.sun.star.document.ImportFilter"
+#define SERVICE_NAME2 "com.sun.star.document.ExportFilter"
+sal_Bool RtfFilter::supportsService( const OUString& rServiceName ) throw (uno::RuntimeException)
+{
+ return (rServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME1 ) ) ||
+ rServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME2 ) ));
+}
+
+uno::Sequence< OUString > RtfFilter::getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ return RtfFilter_getSupportedServiceNames();
+}
+
+/* Helpers, used by shared lib exports. */
+
+OUString RtfFilter_getImplementationName () throw (uno::RuntimeException)
+{
+ return OUString ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.RtfFilter" ) );
+}
+
+uno::Sequence< OUString > RtfFilter_getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ uno::Sequence < OUString > aRet(2);
+ OUString* pArray = aRet.getArray();
+ pArray[0] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME1 ) );
+ pArray[1] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME2 ) );
+ return aRet;
+}
+#undef SERVICE_NAME1
+#undef SERVICE_NAME2
+
+uno::Reference< uno::XInterface > RtfFilter_createInstance( const uno::Reference< uno::XComponentContext >& xContext)
+ throw( uno::Exception )
+{
+ return (cppu::OWeakObject*) new RtfFilter( xContext );
+}
+
+/* vi:set shiftwidth=4 expandtab: */
diff --git a/writerfilter/source/filter/RtfFilter.hxx b/writerfilter/source/filter/RtfFilter.hxx
new file mode 100644
index 000000000000..3a4be622ab17
--- /dev/null
+++ b/writerfilter/source/filter/RtfFilter.hxx
@@ -0,0 +1,102 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ * Copyright 2010 Miklos Vajna.
+ *
+ * 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 _RTFFILTER_HXX
+#define _RTFFILTER_HXX
+
+#include <com/sun/star/document/XFilter.hpp>
+#include <com/sun/star/document/XImporter.hpp>
+#include <com/sun/star/document/XExporter.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
+#include <cppuhelper/implbase5.hxx>
+#include <WriterFilterDllApi.hxx>
+
+class WRITERFILTER_DLLPUBLIC RtfFilter : public cppu::WeakImplHelper5
+<
+ com::sun::star::document::XFilter,
+ com::sun::star::document::XImporter,
+ com::sun::star::document::XExporter,
+ com::sun::star::lang::XInitialization,
+ com::sun::star::lang::XServiceInfo
+>
+{
+
+protected:
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext;
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > m_xSrcDoc, m_xDstDoc;
+ ::rtl::OUString m_sFilterName;
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > m_xHandler;
+
+
+public:
+ RtfFilter( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext);
+ virtual ~RtfFilter();
+
+ // XFilter
+ virtual sal_Bool SAL_CALL filter( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL cancel( )
+ throw (::com::sun::star::uno::RuntimeException);
+
+ // XImporter
+ virtual void SAL_CALL setTargetDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc )
+ throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+
+ // XExporter
+ virtual void SAL_CALL setSourceDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc )
+ throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+
+ // XInitialization
+ virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments )
+ throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
+ throw (::com::sun::star::uno::RuntimeException);
+
+};
+
+
+::rtl::OUString RtfFilter_getImplementationName()
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL RtfFilter_getSupportedServiceNames( )
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL RtfFilter_createInstance(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::uno::XComponentContext > &xContext)
+ throw( ::com::sun::star::uno::Exception );
+#endif
+
diff --git a/writerfilter/source/filter/WriterFilter.cxx b/writerfilter/source/filter/WriterFilter.cxx
new file mode 100644
index 000000000000..deede335d9af
--- /dev/null
+++ b/writerfilter/source/filter/WriterFilter.cxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _CPPUHELPER_IMPLEMENTATIONENTRY_
+#include <cppuhelper/implementationentry.hxx>
+#endif
+#include <WriterFilter.hxx>
+#include <WriterFilterDetection.hxx>
+#include <RtfFilter.hxx>
+
+using namespace ::rtl;
+using namespace ::cppu;
+using namespace ::com::sun::star;
+
+/*-- 22.02.2007 12:19:23---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+WriterFilter::WriterFilter( const uno::Reference< uno::XComponentContext >& rxContext) :
+ m_xContext( rxContext )
+{
+}
+/*-- 22.02.2007 12:19:23---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+WriterFilter::~WriterFilter()
+{
+}
+
+extern "C"
+{
+/* shared lib exports implemented with helpers */
+static struct ::cppu::ImplementationEntry s_component_entries [] =
+{
+ { WriterFilter_createInstance, WriterFilter_getImplementationName, WriterFilter_getSupportedServiceNames, ::cppu::createSingleComponentFactory, 0, 0 },
+ { WriterFilterDetection_createInstance, WriterFilterDetection_getImplementationName, WriterFilterDetection_getSupportedServiceNames, ::cppu::createSingleComponentFactory, 0, 0} ,
+ { RtfFilter_createInstance, RtfFilter_getImplementationName, RtfFilter_getSupportedServiceNames, ::cppu::createSingleComponentFactory, 0, 0 },
+ { 0, 0, 0, 0, 0, 0 } // terminate with NULL
+};
+
+void SAL_CALL component_getImplementationEnvironment(const sal_Char ** ppEnvTypeName, uno_Environment ** /*ppEnv*/ )
+{
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+
+void * SAL_CALL component_getFactory(sal_Char const * implName, ::com::sun::star::lang::XMultiServiceFactory * xMgr, ::com::sun::star::registry::XRegistryKey * xRegistry )
+{
+ return ::cppu::component_getFactoryHelper(implName, xMgr, xRegistry, s_component_entries );
+}
+
+} //extern "C"
+
+
diff --git a/writerfilter/source/filter/WriterFilter.hxx b/writerfilter/source/filter/WriterFilter.hxx
new file mode 100644
index 000000000000..0d4cb7a3a711
--- /dev/null
+++ b/writerfilter/source/filter/WriterFilter.hxx
@@ -0,0 +1,104 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _WRITERFILTER_HXX
+#define _WRITERFILTER_HXX
+
+#include <com/sun/star/document/XFilter.hpp>
+#include <com/sun/star/document/XImporter.hpp>
+#include <com/sun/star/document/XExporter.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/xml/sax/XDocumentHandler.hpp>
+#include <cppuhelper/implbase5.hxx>
+#include <WriterFilterDllApi.hxx>
+
+class WRITERFILTER_DLLPUBLIC WriterFilter : public cppu::WeakImplHelper5
+<
+ com::sun::star::document::XFilter,
+ com::sun::star::document::XImporter,
+ com::sun::star::document::XExporter,
+ com::sun::star::lang::XInitialization,
+ com::sun::star::lang::XServiceInfo
+>
+{
+
+protected:
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext;
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > m_xSrcDoc, m_xDstDoc;
+ ::rtl::OUString m_sFilterName;
+ ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XDocumentHandler > m_xHandler;
+
+
+public:
+ WriterFilter( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext);
+ virtual ~WriterFilter();
+
+ // XFilter
+ virtual sal_Bool SAL_CALL filter( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aDescriptor )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual void SAL_CALL cancel( )
+ throw (::com::sun::star::uno::RuntimeException);
+
+ // XImporter
+ virtual void SAL_CALL setTargetDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc )
+ throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+
+ // XExporter
+ virtual void SAL_CALL setSourceDocument( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& xDoc )
+ throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
+
+ // XInitialization
+ virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& aArguments )
+ throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException);
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
+ throw (::com::sun::star::uno::RuntimeException);
+
+};
+
+
+::rtl::OUString WriterFilter_getImplementationName()
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+sal_Bool SAL_CALL WriterFilter_supportsService( const ::rtl::OUString& ServiceName )
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL WriterFilter_getSupportedServiceNames( )
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL WriterFilter_createInstance(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::uno::XComponentContext > &xContext)
+ throw( ::com::sun::star::uno::Exception );
+#endif
+
diff --git a/writerfilter/source/filter/WriterFilterDetection.cxx b/writerfilter/source/filter/WriterFilterDetection.cxx
new file mode 100644
index 000000000000..87da1861cbae
--- /dev/null
+++ b/writerfilter/source/filter/WriterFilterDetection.cxx
@@ -0,0 +1,200 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <cppuhelper/implementationentry.hxx>
+#include <WriterFilterDetection.hxx>
+#include <comphelper/storagehelper.hxx>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <sot/storage.hxx>
+//#ifndef _SFXDOCFILE_HXX //todo: remove sfx2!
+//#include <sfx2/docfile.hxx>
+//#endif
+#include <unotools/ucbstreamhelper.hxx>
+
+using namespace ::rtl;
+using namespace ::cppu;
+using namespace ::com::sun::star;
+
+/*-- 22.02.2007 12:17:53---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+WriterFilterDetection::WriterFilterDetection(
+ const uno::Reference< uno::XComponentContext >& rxContext) :
+ m_xContext( rxContext )
+{
+}
+/*-- 22.02.2007 12:17:53---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+WriterFilterDetection::~WriterFilterDetection()
+{
+}
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OUString WriterFilterDetection_getImplementationName () throw (uno::RuntimeException)
+{
+ return OUString ( RTL_CONSTASCII_USTRINGPARAM ( "com.sun.star.comp.Writer.WriterFilterDetector" ) );
+}
+
+#define SERVICE_NAME1 "com.sun.star.document.ExtendedTypeDetection"
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OUString WriterFilterDetection::detect( uno::Sequence< beans::PropertyValue >& rDescriptor )
+ throw( uno::RuntimeException )
+{
+ OUString sTypeName;
+ bool bWord = false;
+ sal_Int32 nPropertyCount = rDescriptor.getLength();
+ const beans::PropertyValue* pValues = rDescriptor.getConstArray();
+ rtl::OUString sURL;
+ uno::Reference < io::XStream > xStream;
+ uno::Reference < io::XInputStream > xInputStream;
+ for( sal_Int32 nProperty = 0; nProperty < nPropertyCount; ++nProperty )
+ {
+ if( pValues[nProperty].Name == OUString(RTL_CONSTASCII_USTRINGPARAM("TypeName")) )
+ rDescriptor[nProperty].Value >>= sTypeName;
+ else if( pValues[nProperty].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM ( "URL" )) )
+ pValues[nProperty].Value >>= sURL;
+ else if( pValues[nProperty].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM ( "Stream" )) )
+ pValues[nProperty].Value >>= xStream;
+ else if( pValues[nProperty].Name.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM ( "InputStream" )) )
+ pValues[nProperty].Value >>= xInputStream;
+ }
+ bool bBinary = sTypeName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "writer_MS_Word_97" )) ||
+ sTypeName.equalsAsciiL ( RTL_CONSTASCII_STRINGPARAM ( "writer_MS_Word_97_Vorlage" ));
+
+ try
+ {
+ if(bBinary)
+ {
+ SvStream* pStream = ::utl::UcbStreamHelper::CreateStream( xInputStream );
+ if ( pStream && SotStorage::IsStorageFile(pStream) )
+
+ {
+ SotStorageRef xStg = new SotStorage( pStream, sal_False );
+
+ bool bTable2 = xStg->IsContained( rtl::OUString::createFromAscii("1Table" ));
+ SotStorageStreamRef xRef =
+
+ xStg->OpenSotStream(rtl::OUString::createFromAscii("WordDocument"),
+
+ STREAM_STD_READ | STREAM_NOCREATE );
+
+ if(bTable2 && xStg.Is())
+ {
+ xRef->Seek(2);
+ sal_Int16 nWord;
+ *xRef >> nWord;
+ //version detection
+ bWord = nWord >= 0x6a && nWord <= 0xc1;
+ }
+ }
+ }
+ else
+ {
+ uno::Reference< embed::XStorage > xDocStorage;
+ if( sURL.equalsAscii( "private:stream" ) )
+ xDocStorage = comphelper::OStorageHelper::GetStorageFromInputStream( xInputStream );
+ else
+ xDocStorage = comphelper::OStorageHelper::GetStorageFromURL(
+ sURL, embed::ElementModes::READ );
+ if( xDocStorage.is() )
+ {
+ uno::Sequence< ::rtl::OUString > aNames = xDocStorage->getElementNames();
+ const ::rtl::OUString* pNames = aNames.getConstArray();
+ for(sal_Int32 nName = 0; nName < aNames.getLength(); ++nName)
+ {
+ if(pNames[nName].equalsAsciiL(RTL_CONSTASCII_STRINGPARAM ( "word" )))
+ {
+ bWord = true;
+ if( !sTypeName.getLength() )
+ sTypeName = ::rtl::OUString(
+ RTL_CONSTASCII_STRINGPARAM( "writer_MS_Word_2007" ), RTL_TEXTENCODING_ASCII_US);
+ break;
+ }
+ }
+ }
+ }
+ }
+ catch(const uno::Exception&)
+ {
+ OSL_ASSERT("exception while opening storage");
+ }
+ if( !bWord )
+ sTypeName = ::rtl::OUString();
+ return sTypeName;
+}
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Bool WriterFilterDetection_supportsService( const OUString& ServiceName ) throw (uno::RuntimeException)
+{
+ return (ServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM ( SERVICE_NAME1 ) ) );
+}
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Sequence< OUString > WriterFilterDetection_getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ uno::Sequence < OUString > aRet(1);
+ OUString* pArray = aRet.getArray();
+ pArray[0] = OUString ( RTL_CONSTASCII_USTRINGPARAM ( SERVICE_NAME1 ) );
+ return aRet;
+}
+#undef SERVICE_NAME1
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Reference< uno::XInterface > WriterFilterDetection_createInstance( const uno::Reference< uno::XComponentContext >& xContext)
+ throw( uno::Exception )
+{
+ return (cppu::OWeakObject*) new WriterFilterDetection( xContext );
+}
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+OUString WriterFilterDetection::getImplementationName( ) throw (uno::RuntimeException)
+{
+ return WriterFilterDetection_getImplementationName();
+}
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+sal_Bool WriterFilterDetection::supportsService( const OUString& rServiceName ) throw (uno::RuntimeException)
+{
+ return WriterFilterDetection_supportsService( rServiceName );
+}
+/*-- 22.02.2007 12:11:38---------------------------------------------------
+
+ -----------------------------------------------------------------------*/
+uno::Sequence< OUString > WriterFilterDetection::getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ return WriterFilterDetection_getSupportedServiceNames();
+}
+
diff --git a/writerfilter/source/filter/WriterFilterDetection.hxx b/writerfilter/source/filter/WriterFilterDetection.hxx
new file mode 100644
index 000000000000..a5e8149d68c2
--- /dev/null
+++ b/writerfilter/source/filter/WriterFilterDetection.hxx
@@ -0,0 +1,76 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _WRITERFILTER_DETECTION_HXX
+#define _WRITERFILTER_DETECTION_HXX
+
+#include <com/sun/star/document/XExtendedFilterDetection.hpp>
+#include <com/sun/star/lang/XServiceInfo.hpp>
+#include <cppuhelper/implbase2.hxx>
+#include <WriterFilterDllApi.hxx>
+
+class WRITERFILTER_DLLPUBLIC WriterFilterDetection : public cppu::WeakImplHelper2
+<
+ com::sun::star::document::XExtendedFilterDetection,
+ com::sun::star::lang::XServiceInfo
+>
+{
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > m_xContext;
+
+public:
+ WriterFilterDetection(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext);
+ virtual ~WriterFilterDetection();
+
+ //XExtendedFilterDetection
+ virtual ::rtl::OUString SAL_CALL detect( com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& Descriptor )
+ throw( com::sun::star::uno::RuntimeException );
+
+ // XServiceInfo
+ virtual ::rtl::OUString SAL_CALL getImplementationName( )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName )
+ throw (::com::sun::star::uno::RuntimeException);
+ virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames()
+ throw (::com::sun::star::uno::RuntimeException);
+};
+
+::rtl::OUString WriterFilterDetection_getImplementationName()
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+sal_Bool SAL_CALL WriterFilterDetection_supportsService( const ::rtl::OUString& ServiceName )
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL WriterFilterDetection_getSupportedServiceNames( )
+ throw ( ::com::sun::star::uno::RuntimeException );
+
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL WriterFilterDetection_createInstance(
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::uno::XComponentContext > &xContext)
+ throw( ::com::sun::star::uno::Exception );
+
+#endif
+
diff --git a/writerfilter/source/filter/makefile.mk b/writerfilter/source/filter/makefile.mk
new file mode 100644
index 000000000000..6b11fd4ff1f3
--- /dev/null
+++ b/writerfilter/source/filter/makefile.mk
@@ -0,0 +1,52 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+PRJ=..$/..
+PRJNAME=writerfilter
+TARGET=filter
+GEN_HID=TRUE
+
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings ----------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/inc$/writerfilter.mk
+
+# --- Files -------------------------------------
+
+SLOFILES= $(SLO)$/WriterFilter.obj \
+ $(SLO)$/WriterFilterDetection.obj \
+ $(SLO)$/ImportFilter.obj \
+ $(SLO)$/RtfFilter.obj
+
+
+# --- Targets ----------------------------------
+
+.INCLUDE : target.mk
+
+
+
diff --git a/writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/wordnetaux.xsd b/writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/wordnetaux.xsd
new file mode 100644
index 000000000000..41ccbcd1e9b0
--- /dev/null
+++ b/writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/wordnetaux.xsd
Binary files differ
diff --git a/writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/xsdlib.xsd b/writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/xsdlib.xsd
new file mode 100644
index 000000000000..ce1a03386cf9
--- /dev/null
+++ b/writerfilter/source/odiapi/qname/resource/office2003/WordprocessingML Schemas/xsdlib.xsd
Binary files differ
diff --git a/writerfilter/source/odiapi/qname/resource/rdfxml.rng b/writerfilter/source/odiapi/qname/resource/rdfxml.rng
new file mode 100644
index 000000000000..65ea16ebfa22
--- /dev/null
+++ b/writerfilter/source/odiapi/qname/resource/rdfxml.rng
@@ -0,0 +1,453 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ RELAX NG Compact Schema for RDF/XML Syntax
+
+ This schema is for information only and NON-NORMATIVE
+
+ It is based on one originally written by James Clark in
+ http://lists.w3.org/Archives/Public/www-rdf-comments/2001JulSep/0248.html
+ and updated with later changes.
+
+-->
+<grammar xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" ns="http://www.w3.org/XML/1998/namespace" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" xmlns:xml="http://www.w3.org/XML/1998/namespace">
+ <start>
+ <ref name="doc"/>
+ </start>
+ <!-- I cannot seem to do this in RNGC so they are expanded in-line -->
+ <!--
+ coreSyntaxTerms = rdf:RDF | rdf:ID | rdf:about | rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype
+ syntaxTerms = coreSyntaxTerms | rdf:Description | rdf:li
+ oldTerms = rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID
+ nodeElementURIs = * - ( coreSyntaxTerms | rdf:li | oldTerms )
+ propertyElementURIs = * - ( coreSyntaxTerms | rdf:Description | oldTerms )
+ propertyAttributeURIs = * - ( coreSyntaxTerms | rdf:Description | rdf:li | oldTerms )
+ -->
+ <!--
+ Also needed to allow rdf:li on all property element productions
+ since we can't capture the rdf:li rewriting to rdf_<n> in relaxng
+ -->
+ <!-- Need to add these explicitly -->
+ <define name="xmllang">
+ <attribute name="xml:lang"/>
+ </define>
+ <define name="xmlbase">
+ <attribute name="xml:base"/>
+ </define>
+ <!-- and to forbid every other xml:* attribute, element -->
+ <define name="doc">
+ <ref name="RDF"/>
+ </define>
+ <define name="RDF">
+ <element name="rdf:RDF">
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <ref name="nodeElementList"/>
+ </element>
+ </define>
+ <define name="nodeElementList">
+ <zeroOrMore>
+ <ref name="nodeElement"/>
+ </zeroOrMore>
+ </define>
+ <!--
+ Should be something like:
+ ws* , ( nodeElement , ws* )*
+ but RELAXNG does this by default, ignoring whitespace separating tags.
+ -->
+ <define name="nodeElement">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:li</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ </except>
+ </anyName>
+ <optional>
+ <choice>
+ <ref name="idAttr"/>
+ <ref name="nodeIdAttr"/>
+ <ref name="aboutAttr"/>
+ </choice>
+ </optional>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="propertyAttr"/>
+ </zeroOrMore>
+ <ref name="propertyEltList"/>
+ </element>
+ </define>
+ <!--
+ It is not possible to say "and not things
+ beginning with _ in the rdf: namespace" in RELAX NG.
+ -->
+ <define name="ws">
+ <value> </value>
+ </define>
+ <!--
+ Not used in this RELAX NG schema; but should be any legal XML
+ whitespace defined by http://www.w3.org/TR/2000/REC-xml-20001006#NT-S
+ -->
+ <define name="propertyEltList">
+ <zeroOrMore>
+ <ref name="propertyElt"/>
+ </zeroOrMore>
+ </define>
+ <!--
+ Should be something like:
+ ws* , ( propertyElt , ws* )*
+ but RELAXNG does this by default, ignoring whitespace separating tags.
+ -->
+ <define name="propertyElt">
+ <choice>
+ <ref name="resourcePropertyElt"/>
+ <ref name="literalPropertyElt"/>
+ <ref name="parseTypeLiteralPropertyElt"/>
+ <ref name="parseTypeResourcePropertyElt"/>
+ <ref name="parseTypeCollectionPropertyElt"/>
+ <ref name="parseTypeOtherPropertyElt"/>
+ <ref name="emptyPropertyElt"/>
+ </choice>
+ </define>
+ <define name="resourcePropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <ref name="idAttr"/>
+ </optional>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <ref name="nodeElement"/>
+ </element>
+ </define>
+ <define name="literalPropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <choice>
+ <ref name="idAttr"/>
+ <ref name="datatypeAttr"/>
+ </choice>
+ </optional>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <text/>
+ </element>
+ </define>
+ <define name="parseTypeLiteralPropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <ref name="idAttr"/>
+ </optional>
+ <ref name="parseLiteral"/>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <ref name="literal"/>
+ </element>
+ </define>
+ <define name="parseTypeResourcePropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <ref name="idAttr"/>
+ </optional>
+ <ref name="parseResource"/>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <ref name="propertyEltList"/>
+ </element>
+ </define>
+ <define name="parseTypeCollectionPropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <ref name="idAttr"/>
+ </optional>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <ref name="parseCollection"/>
+ <ref name="nodeElementList"/>
+ </element>
+ </define>
+ <define name="parseTypeOtherPropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <ref name="idAttr"/>
+ </optional>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <ref name="parseOther"/>
+ <ref name="any"/>
+ </element>
+ </define>
+ <define name="emptyPropertyElt">
+ <element>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <optional>
+ <ref name="idAttr"/>
+ </optional>
+ <optional>
+ <choice>
+ <ref name="resourceAttr"/>
+ <ref name="nodeIdAttr"/>
+ </choice>
+ </optional>
+ <optional>
+ <ref name="xmllang"/>
+ </optional>
+ <optional>
+ <ref name="xmlbase"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="propertyAttr"/>
+ </zeroOrMore>
+ </element>
+ </define>
+ <define name="idAttr">
+ <attribute name="rdf:ID">
+ <ref name="IDsymbol"/>
+ </attribute>
+ </define>
+ <define name="nodeIdAttr">
+ <attribute name="rdf:nodeID">
+ <ref name="IDsymbol"/>
+ </attribute>
+ </define>
+ <define name="aboutAttr">
+ <attribute name="rdf:about">
+ <ref name="URI-reference"/>
+ </attribute>
+ </define>
+ <define name="propertyAttr">
+ <attribute>
+ <anyName>
+ <except>
+ <nsName ns=""/>
+ <name>rdf:RDF</name>
+ <name>rdf:ID</name>
+ <name>rdf:about</name>
+ <name>rdf:parseType</name>
+ <name>rdf:resource</name>
+ <name>rdf:nodeID</name>
+ <name>rdf:datatype</name>
+ <name>rdf:li</name>
+ <name>rdf:Description</name>
+ <name>rdf:aboutEach</name>
+ <name>rdf:aboutEachPrefix</name>
+ <name>rdf:bagID</name>
+ <nsName/>
+ </except>
+ </anyName>
+ <data type="string" datatypeLibrary=""/>
+ </attribute>
+ </define>
+ <define name="resourceAttr">
+ <attribute name="rdf:resource">
+ <ref name="URI-reference"/>
+ </attribute>
+ </define>
+ <define name="datatypeAttr">
+ <attribute name="rdf:datatype">
+ <ref name="URI-reference"/>
+ </attribute>
+ </define>
+ <define name="parseLiteral">
+ <attribute name="rdf:parseType">
+ <value>Literal</value>
+ </attribute>
+ </define>
+ <define name="parseResource">
+ <attribute name="rdf:parseType">
+ <value>Resource</value>
+ </attribute>
+ </define>
+ <define name="parseCollection">
+ <attribute name="rdf:parseType">
+ <value>Collection</value>
+ </attribute>
+ </define>
+ <define name="parseOther">
+ <attribute name="rdf:parseType"/>
+ </define>
+ <define name="URI-reference">
+ <data type="string" datatypeLibrary=""/>
+ </define>
+ <define name="literal">
+ <ref name="any"/>
+ </define>
+ <define name="IDsymbol">
+ <data type="NMTOKEN"/>
+ </define>
+ <define name="any">
+ <mixed>
+ <zeroOrMore>
+ <element>
+ <anyName/>
+ <zeroOrMore>
+ <attribute>
+ <anyName/>
+ </attribute>
+ </zeroOrMore>
+ <ref name="any"/>
+ </element>
+ </zeroOrMore>
+ </mixed>
+ </define>
+</grammar>
diff --git a/writerfilter/source/odiapi/qname/resource/rng.rng b/writerfilter/source/odiapi/qname/resource/rng.rng
new file mode 100644
index 000000000000..a2fb8787571e
--- /dev/null
+++ b/writerfilter/source/odiapi/qname/resource/rng.rng
@@ -0,0 +1,331 @@
+<grammar datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
+ ns="http://relaxng.org/ns/structure/1.0"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns="http://relaxng.org/ns/structure/1.0">
+
+ <start>
+ <ref name="pattern"/>
+ </start>
+
+ <define name="pattern">
+ <choice>
+ <element name="element">
+ <choice>
+ <attribute name="name">
+ <data type="QName"/>
+ </attribute>
+ <ref name="open-name-class"/>
+ </choice>
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="attribute">
+ <ref name="common-atts"/>
+ <choice>
+ <attribute name="name">
+ <data type="QName"/>
+ </attribute>
+ <ref name="open-name-class"/>
+ </choice>
+ <interleave>
+ <ref name="other"/>
+ <optional>
+ <ref name="pattern"/>
+ </optional>
+ </interleave>
+ </element>
+ <element name="group">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="interleave">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="choice">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="optional">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="zeroOrMore">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="oneOrMore">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="list">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="mixed">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ <element name="ref">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ </element>
+ <element name="parentRef">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ </element>
+ <element name="empty">
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="text">
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="value">
+ <optional>
+ <attribute name="type">
+ <data type="NCName"/>
+ </attribute>
+ </optional>
+ <ref name="common-atts"/>
+ <text/>
+ </element>
+ <element name="data">
+ <attribute name="type">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <interleave>
+ <ref name="other"/>
+ <group>
+ <zeroOrMore>
+ <element name="param">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <text/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="except">
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ </optional>
+ </group>
+ </interleave>
+ </element>
+ <element name="notAllowed">
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="externalRef">
+ <attribute name="href">
+ <data type="anyURI"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <ref name="other"/>
+ </element>
+ <element name="grammar">
+ <ref name="common-atts"/>
+ <ref name="grammar-content"/>
+ </element>
+ </choice>
+ </define>
+
+ <define name="grammar-content">
+ <interleave>
+ <ref name="other"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="start-element"/>
+ <ref name="define-element"/>
+ <element name="div">
+ <ref name="common-atts"/>
+ <ref name="grammar-content"/>
+ </element>
+ <element name="include">
+ <attribute name="href">
+ <data type="anyURI"/>
+ </attribute>
+ <ref name="common-atts"/>
+ <ref name="include-content"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ </interleave>
+ </define>
+
+ <define name="include-content">
+ <interleave>
+ <ref name="other"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="start-element"/>
+ <ref name="define-element"/>
+ <element name="div">
+ <ref name="common-atts"/>
+ <ref name="include-content"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ </interleave>
+ </define>
+
+ <define name="start-element">
+ <element name="start">
+ <ref name="combine-att"/>
+ <ref name="common-atts"/>
+ <ref name="open-pattern"/>
+ </element>
+ </define>
+
+ <define name="define-element">
+ <element name="define">
+ <attribute name="name">
+ <data type="NCName"/>
+ </attribute>
+ <ref name="combine-att"/>
+ <ref name="common-atts"/>
+ <ref name="open-patterns"/>
+ </element>
+ </define>
+
+ <define name="combine-att">
+ <optional>
+ <attribute name="combine">
+ <choice>
+ <value>choice</value>
+ <value>interleave</value>
+ </choice>
+ </attribute>
+ </optional>
+ </define>
+
+ <define name="open-patterns">
+ <interleave>
+ <ref name="other"/>
+ <oneOrMore>
+ <ref name="pattern"/>
+ </oneOrMore>
+ </interleave>
+ </define>
+
+ <define name="open-pattern">
+ <interleave>
+ <ref name="other"/>
+ <ref name="pattern"/>
+ </interleave>
+ </define>
+
+ <define name="name-class">
+ <choice>
+ <element name="name">
+ <ref name="common-atts"/>
+ <data type="QName"/>
+ </element>
+ <element name="anyName">
+ <ref name="common-atts"/>
+ <ref name="except-name-class"/>
+ </element>
+ <element name="nsName">
+ <ref name="common-atts"/>
+ <ref name="except-name-class"/>
+ </element>
+ <element name="choice">
+ <ref name="common-atts"/>
+ <ref name="open-name-classes"/>
+ </element>
+ </choice>
+ </define>
+
+ <define name="except-name-class">
+ <interleave>
+ <ref name="other"/>
+ <optional>
+ <element name="except">
+ <ref name="open-name-classes"/>
+ </element>
+ </optional>
+ </interleave>
+ </define>
+
+ <define name="open-name-classes">
+ <interleave>
+ <ref name="other"/>
+ <oneOrMore>
+ <ref name="name-class"/>
+ </oneOrMore>
+ </interleave>
+ </define>
+
+ <define name="open-name-class">
+ <interleave>
+ <ref name="other"/>
+ <ref name="name-class"/>
+ </interleave>
+ </define>
+
+ <define name="common-atts">
+ <optional>
+ <attribute name="ns"/>
+ </optional>
+ <optional>
+ <attribute name="datatypeLibrary">
+ <data type="anyURI"/>
+ </attribute>
+ </optional>
+ <zeroOrMore>
+ <attribute>
+ <anyName>
+ <except>
+ <nsName/>
+ <nsName ns=""/>
+ </except>
+ </anyName>
+ </attribute>
+ </zeroOrMore>
+ </define>
+
+ <define name="other">
+ <zeroOrMore>
+ <element>
+ <anyName>
+ <except>
+ <nsName/>
+ </except>
+ </anyName>
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="any"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </zeroOrMore>
+ </define>
+
+ <define name="any">
+ <element>
+ <anyName/>
+ <zeroOrMore>
+ <choice>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ <ref name="any"/>
+ </choice>
+ </zeroOrMore>
+ </element>
+ </define>
+
+</grammar>
diff --git a/writerfilter/source/odiapi/qname/resource/rtf.rtfs b/writerfilter/source/odiapi/qname/resource/rtf.rtfs
new file mode 100644
index 000000000000..45469a32ea83
--- /dev/null
+++ b/writerfilter/source/odiapi/qname/resource/rtf.rtfs
@@ -0,0 +1,1385 @@
+<?xml version="1.0" ?>
+<rtfs:definition xmlns:rtfs="urn:rtf:schema" xmlns:rtf="urn:rtf:1.7">
+ <rtfs:token name="rtf:ab" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:absh" type="rtfs:Value" />
+ <rtfs:token name="rtf:abslock" type="rtfs:Flag" />
+ <rtfs:token name="rtf:absnoovrlp" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:absw" type="rtfs:Value" />
+ <rtfs:token name="rtf:acaps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:acccomma" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:accdot" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:accnone" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:acf" type="rtfs:Value" />
+ <rtfs:token name="rtf:additive" type="rtfs:Flag" />
+ <rtfs:token name="rtf:adjustright" type="rtfs:Flag" />
+ <rtfs:token name="rtf:adn" type="rtfs:Value" />
+ <rtfs:token name="rtf:aenddoc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aendnotes" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aexpnd" type="rtfs:Value" />
+ <rtfs:token name="rtf:af" type="rtfs:Value" />
+ <rtfs:token name="rtf:affixed" type="rtfs:Flag" />
+ <rtfs:token name="rtf:afs" type="rtfs:Value" />
+ <rtfs:token name="rtf:aftnbj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftncn" type="rtfs:Destination" />
+ <rtfs:token name="rtf:aftnnalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnauc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnchi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnchosung" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnncnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnndbar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnndbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnndbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnndbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnndbnumt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnngbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnngbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnngbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnngbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnrlc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnruc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnzodiac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnzodiacd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnnzodiacl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnrestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnrstcont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aftnsep" type="rtfs:Destination" />
+ <rtfs:token name="rtf:aftnsepc" type="rtfs:Destination" />
+ <rtfs:token name="rtf:aftnstart" type="rtfs:Value" />
+ <rtfs:token name="rtf:aftntj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ai" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:alang" type="rtfs:Value" />
+ <rtfs:token name="rtf:allowfieldendsel" type="rtfs:Flag" />
+ <rtfs:token name="rtf:allprot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:alntblind" type="rtfs:Flag" />
+ <rtfs:token name="rtf:alt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:animtext" type="rtfs:Value" />
+ <rtfs:token name="rtf:annotation" type="rtfs:Destination" />
+ <rtfs:token name="rtf:annotprot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ansi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ansicpg" type="rtfs:Value" />
+ <rtfs:token name="rtf:aoutl" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ApplyBrkRules" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ascaps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ashad" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:asianbrkrule" type="rtfs:Flag" />
+ <rtfs:token name="rtf:aspalpha" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:aspnum" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:astrike" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:atnauthor" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atndate" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atnicn" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atnid" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atnparent" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atnref" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atntime" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atrfend" type="rtfs:Destination" />
+ <rtfs:token name="rtf:atrfstart" type="rtfs:Destination" />
+ <rtfs:token name="rtf:aul" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:auld" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:auldb" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:aulnone" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:aulw" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:aup" type="rtfs:Value" />
+ <rtfs:token name="rtf:author" type="rtfs:Destination" />
+ <rtfs:token name="rtf:b" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:background" type="rtfs:Destination" />
+ <rtfs:token name="rtf:bdbfhdr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bdrrlswsix" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdkbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdkcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdkdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdkfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdkhoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgdkvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bghoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bgvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bin" type="rtfs:Value" />
+ <rtfs:token name="rtf:binfsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:binsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:bkmkcolf" type="rtfs:Value" />
+ <rtfs:token name="rtf:bkmkcoll" type="rtfs:Value" />
+ <rtfs:token name="rtf:bkmkend" type="rtfs:Destination" />
+ <rtfs:token name="rtf:bkmkpub" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bkmkstart" type="rtfs:Destination" />
+ <rtfs:token name="rtf:bliptag" type="rtfs:Value" />
+ <rtfs:token name="rtf:blipuid" type="rtfs:Value" />
+ <rtfs:token name="rtf:blipupi" type="rtfs:Value" />
+ <rtfs:token name="rtf:blue" type="rtfs:Value" />
+ <rtfs:token name="rtf:bookfold" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bookfoldrev" type="rtfs:Flag" />
+ <rtfs:token name="rtf:bookfoldsheets" type="rtfs:Value" />
+ <rtfs:token name="rtf:box" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrart" type="rtfs:Value" />
+ <rtfs:token name="rtf:brdrb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrbar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrbtw" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrcf" type="rtfs:Value" />
+ <rtfs:token name="rtf:brdrdash" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrdashd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrdashdd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrdashdotstr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrdashsm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrdb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrdot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdremboss" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrengrave" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrframe" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrhair" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrinset" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrnil" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdroutset" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrs" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrsh" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtbl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrth" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrthtnlg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrthtnmg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrthtnsg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtnthlg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtnthmg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtnthsg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtnthtnlg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtnthtnmg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtnthtnsg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrtriple" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrw" type="rtfs:Value" />
+ <rtfs:token name="rtf:brdrwavy" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brdrwavydb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brkfrm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:brsp" type="rtfs:Value" />
+ <rtfs:token name="rtf:bullet" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:buptim" type="rtfs:Destination" />
+ <rtfs:token name="rtf:bxe" type="rtfs:Flag" />
+ <rtfs:token name="rtf:caps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:category" type="rtfs:Destination" />
+ <rtfs:token name="rtf:cb" type="rtfs:Value" />
+ <rtfs:token name="rtf:cbpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:cchs" type="rtfs:Value" />
+ <rtfs:token name="rtf:cell" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:cellx" type="rtfs:Value" />
+ <rtfs:token name="rtf:cf" type="rtfs:Value" />
+ <rtfs:token name="rtf:cfpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:cgrid" type="rtfs:Value" />
+ <rtfs:token name="rtf:charrsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:charscalex" type="rtfs:Value" />
+ <rtfs:token name="rtf:charscalex" type="rtfs:Value" />
+ <rtfs:token name="rtf:chatn" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chbgbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdkbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdkcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdkdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdkfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdkhoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgdkvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbghoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbgvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chbrdr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:chcbpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:chcfpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:chdate" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chdpa" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chdpl" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chftn" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chftnsep" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chftnsepc" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chpgn" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:chshdng" type="rtfs:Value" />
+ <rtfs:token name="rtf:chtime" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:clbgbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdkbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdkcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdkdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdkfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdkhor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgdkvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbghoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbgvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbrdrb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbrdrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbrdrr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clbrdrt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clcbpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:clcbpatraw" type="rtfs:Value" />
+ <rtfs:token name="rtf:clcfpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:clcfpatraw" type="rtfs:Value" />
+ <rtfs:token name="rtf:cldgll" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cldglu" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clFitText" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clftsWidth" type="rtfs:Value" />
+ <rtfs:token name="rtf:clmgf" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clmrg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cloWrap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clpadb" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadfb" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadfl" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadfr" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadft" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadl" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadr" type="rtfs:Value" />
+ <rtfs:token name="rtf:clpadt" type="rtfs:Value" />
+ <rtfs:token name="rtf:clshdng" type="rtfs:Value" />
+ <rtfs:token name="rtf:clshdngraw" type="rtfs:Value" />
+ <rtfs:token name="rtf:clshdrawnil" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxbtlr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxlrtb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxlrtb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxlrtbv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxtbrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxtbrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cltxtbrlv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clvertalb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clvertalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clvertalt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clvmgf" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clvmrg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:clwWidth" type="rtfs:Value" />
+ <rtfs:token name="rtf:collapsed" type="rtfs:Flag" />
+ <rtfs:token name="rtf:colno" type="rtfs:Value" />
+ <rtfs:token name="rtf:colortbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:cols" type="rtfs:Value" />
+ <rtfs:token name="rtf:colsr" type="rtfs:Value" />
+ <rtfs:token name="rtf:colsx" type="rtfs:Value" />
+ <rtfs:token name="rtf:column" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:colw" type="rtfs:Value" />
+ <rtfs:token name="rtf:comment" type="rtfs:Destination" />
+ <rtfs:token name="rtf:company" type="rtfs:Destination" />
+ <rtfs:token name="rtf:cpg" type="rtfs:Value" />
+ <rtfs:token name="rtf:crauth" type="rtfs:Value" />
+ <rtfs:token name="rtf:crdate" type="rtfs:Value" />
+ <rtfs:token name="rtf:creatim" type="rtfs:Destination" />
+ <rtfs:token name="rtf:cs" type="rtfs:Value" />
+ <rtfs:token name="rtf:ctrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:cts" type="rtfs:Value" />
+ <rtfs:token name="rtf:cufi" type="rtfs:Value" />
+ <rtfs:token name="rtf:culi" type="rtfs:Value" />
+ <rtfs:token name="rtf:curi" type="rtfs:Value" />
+ <rtfs:token name="rtf:cvmme" type="rtfs:Flag" />
+ <rtfs:token name="rtf:datafield" type="rtfs:Destination" />
+ <rtfs:token name="rtf:date" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dbch" type="rtfs:Flag" />
+ <rtfs:token name="rtf:deff" type="rtfs:Value" />
+ <rtfs:token name="rtf:defformat" type="rtfs:Flag" />
+ <rtfs:token name="rtf:deflang" type="rtfs:Value" />
+ <rtfs:token name="rtf:deflangfe" type="rtfs:Value" />
+ <rtfs:token name="rtf:defshp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:deftab" type="rtfs:Value" />
+ <rtfs:token name="rtf:deleted" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:delrsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrauth" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrdate" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrmtxtx" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrmtxty" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrstart" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrstop" type="rtfs:Value" />
+ <rtfs:token name="rtf:dfrxst" type="rtfs:Value" />
+ <rtfs:token name="rtf:dghorigin" type="rtfs:Value" />
+ <rtfs:token name="rtf:dghshow" type="rtfs:Value" />
+ <rtfs:token name="rtf:dghspace" type="rtfs:Value" />
+ <rtfs:token name="rtf:dgmargin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dgsnap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dgvorigin" type="rtfs:Value" />
+ <rtfs:token name="rtf:dgvshow" type="rtfs:Value" />
+ <rtfs:token name="rtf:dgvspace" type="rtfs:Value" />
+ <rtfs:token name="rtf:dibitmap" type="rtfs:Value" />
+ <rtfs:token name="rtf:dn" type="rtfs:Value" />
+ <rtfs:token name="rtf:dntblnsbdb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:do" type="rtfs:Destination" />
+ <rtfs:token name="rtf:dobxcolumn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dobxmargin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dobxpage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dobymargin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dobypage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dobypara" type="rtfs:Flag" />
+ <rtfs:token name="rtf:doccomm" type="rtfs:Destination" />
+ <rtfs:token name="rtf:doctemp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:doctype" type="rtfs:Value" />
+ <rtfs:token name="rtf:docvar" type="rtfs:Destination" />
+ <rtfs:token name="rtf:dodhgt" type="rtfs:Value" />
+ <rtfs:token name="rtf:dolock" type="rtfs:Flag" />
+ <rtfs:token name="rtf:donotshowcomments" type="rtfs:Flag" />
+ <rtfs:token name="rtf:donotshowinsdel" type="rtfs:Flag" />
+ <rtfs:token name="rtf:donotshowmarkup" type="rtfs:Flag" />
+ <rtfs:token name="rtf:donotshowprops" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpaendhol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpaendl" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpaendsol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpaendw" type="rtfs:Value" />
+ <rtfs:token name="rtf:dparc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dparcflipx" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dparcflipy" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpastarthol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpastartl" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpastartsol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpastartw" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpcallout" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcoa" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpcoaccent" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcobestfit" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcoborder" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcodabs" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpcodbottom" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcodcenter" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcodescent" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpcodtop" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcolength" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpcominusx" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcominusy" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcooffset" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpcosmarta" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcotdouble" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcotright" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcotsingle" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcottriple" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpcount" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpellipse" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpendgroup" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpfillbgcb" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillbgcg" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillbgcr" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillbggray" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillbgpal" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpfillfgcb" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillfgcg" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillfgcr" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillfggray" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpfillfgpal" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpfillpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpgroup" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpline" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinecob" type="rtfs:Value" />
+ <rtfs:token name="rtf:dplinecog" type="rtfs:Value" />
+ <rtfs:token name="rtf:dplinecor" type="rtfs:Value" />
+ <rtfs:token name="rtf:dplinedado" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinedadodo" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinedash" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinedot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinegray" type="rtfs:Value" />
+ <rtfs:token name="rtf:dplinehollow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinepal" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinesolid" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dplinew" type="rtfs:Value" />
+ <rtfs:token name="rtf:dppolycount" type="rtfs:Value" />
+ <rtfs:token name="rtf:dppolygon" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dppolyline" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpptx" type="rtfs:Value" />
+ <rtfs:token name="rtf:dppty" type="rtfs:Value" />
+ <rtfs:token name="rtf:dprect" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dproundr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpshadow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpshadx" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpshady" type="rtfs:Value" />
+ <rtfs:token name="rtf:dptxbtlr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dptxbx" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dptxbxmar" type="rtfs:Value" />
+ <rtfs:token name="rtf:dptxbxtext" type="rtfs:Destination" />
+ <rtfs:token name="rtf:dptxlrtb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dptxlrtbv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dptxtbrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dptxtbrlv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:dpx" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpxsize" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpy" type="rtfs:Value" />
+ <rtfs:token name="rtf:dpysize" type="rtfs:Value" />
+ <rtfs:token name="rtf:dropcapli" type="rtfs:Value" />
+ <rtfs:token name="rtf:dropcapt" type="rtfs:Value" />
+ <rtfs:token name="rtf:ds" type="rtfs:Value" />
+ <rtfs:token name="rtf:dxfrtext" type="rtfs:Value" />
+ <rtfs:token name="rtf:dy" type="rtfs:Value" />
+ <rtfs:token name="rtf:edmins" type="rtfs:Value" />
+ <rtfs:token name="rtf:embo" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:emdash" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:emfblip" type="rtfs:Flag" />
+ <rtfs:token name="rtf:emspace" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:endash" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:enddoc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:endnhere" type="rtfs:Flag" />
+ <rtfs:token name="rtf:endnotes" type="rtfs:Flag" />
+ <rtfs:token name="rtf:enspace" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:expnd" type="rtfs:Value" />
+ <rtfs:token name="rtf:expndtw" type="rtfs:Value" />
+ <rtfs:token name="rtf:expshrtn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:f" type="rtfs:Value" />
+ <rtfs:token name="rtf:faauto" type="rtfs:Value" />
+ <rtfs:token name="rtf:facenter7.0" type="rtfs:Flag" />
+ <rtfs:token name="rtf:facingp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fahang" type="rtfs:Flag" />
+ <rtfs:token name="rtf:falt" type="rtfs:Destination" />
+ <rtfs:token name="rtf:faroman" type="rtfs:Flag" />
+ <rtfs:token name="rtf:favar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fbias" type="rtfs:Value" />
+ <rtfs:token name="rtf:fbidi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fchars" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fcharset" type="rtfs:Value" />
+ <rtfs:token name="rtf:fdecor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fet" type="rtfs:Value" />
+ <rtfs:token name="rtf:fetch" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ffdefres" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffdeftext" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffentrymcr" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffexitmcr" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffformat" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffhaslistbox" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffhelptext" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffhps" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffmaxlen" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffname" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ffownhelp" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffownstat" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffprot" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffrecalc" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffres" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffsize" type="rtfs:Value" />
+ <rtfs:token name="rtf:ffstattext" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fftype" type="rtfs:Value" />
+ <rtfs:token name="rtf:fftypetxt" type="rtfs:Value" />
+ <rtfs:token name="rtf:fi" type="rtfs:Value" />
+ <rtfs:token name="rtf:fid" type="rtfs:Value" />
+ <rtfs:token name="rtf:field" type="rtfs:Destination" />
+ <rtfs:token name="rtf:file" type="rtfs:Destination" />
+ <rtfs:token name="rtf:filetbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fittext" type="rtfs:Value" />
+ <rtfs:token name="rtf:fldalt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:flddirty" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fldedit" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fldinst" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fldlock" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fldpriv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fldrslt" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fldtype" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fmodern" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fn" type="rtfs:Value" />
+ <rtfs:token name="rtf:fname" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fnetwork" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fnil" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fnonfilesys" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fontemb" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fontfile" type="rtfs:Destination" />
+ <rtfs:token name="rtf:fonttbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:footer" type="rtfs:Destination" />
+ <rtfs:token name="rtf:footer" type="rtfs:Destination" />
+ <rtfs:token name="rtf:footerf" type="rtfs:Destination" />
+ <rtfs:token name="rtf:footerl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:footery" type="rtfs:Value" />
+ <rtfs:token name="rtf:footnote" type="rtfs:Destination" />
+ <rtfs:token name="rtf:formdisp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:formfield" type="rtfs:Destination" />
+ <rtfs:token name="rtf:formprot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:formshade" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fosnum" type="rtfs:Value" />
+ <rtfs:token name="rtf:fprq" type="rtfs:Value" />
+ <rtfs:token name="rtf:fracwidth" type="rtfs:Flag" />
+ <rtfs:token name="rtf:frelative" type="rtfs:Value" />
+ <rtfs:token name="rtf:frmtxbtlr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:frmtxlrtb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:frmtxlrtbv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:frmtxtbrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:frmtxtbrlv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:froman" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fromhtml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fromtext" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fs" type="rtfs:Value" />
+ <rtfs:token name="rtf:fscript" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fswiss" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnalt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnbj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftncn" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ftnil" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnlytwnine" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnauc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnchi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnchosung" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnncnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnndbar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnndbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnndbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnndbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnndbnumt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnngbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnngbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnngbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnngbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnrlc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnruc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnzodiac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnzodiacd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnnzodiacl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnrestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnrstcont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnrstpg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ftnsep" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ftnsepc" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ftnstart" type="rtfs:Value" />
+ <rtfs:token name="rtf:ftntj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fttruetype" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fvaliddos" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fvalidhpfs" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fvalidmac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:fvalidntfs" type="rtfs:Flag" />
+ <rtfs:token name="rtf:g" type="rtfs:Destination" />
+ <rtfs:token name="rtf:gcw" type="rtfs:Value" />
+ <rtfs:token name="rtf:generator" type="rtfs:Destination" />
+ <rtfs:token name="rtf:green" type="rtfs:Value" />
+ <rtfs:token name="rtf:gridtbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:gutter" type="rtfs:Value" />
+ <rtfs:token name="rtf:gutterprl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:guttersxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:header" type="rtfs:Destination" />
+ <rtfs:token name="rtf:header" type="rtfs:Destination" />
+ <rtfs:token name="rtf:headerf" type="rtfs:Destination" />
+ <rtfs:token name="rtf:headerl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:headery" type="rtfs:Value" />
+ <rtfs:token name="rtf:hich" type="rtfs:Flag" />
+ <rtfs:token name="rtf:highlight" type="rtfs:Value" />
+ <rtfs:token name="rtf:hlfr" type="rtfs:Value" />
+ <rtfs:token name="rtf:hlinkbase" type="rtfs:Value" />
+ <rtfs:token name="rtf:hlloc" type="rtfs:Value" />
+ <rtfs:token name="rtf:hlsrc" type="rtfs:Value" />
+ <rtfs:token name="rtf:horzdoc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:horzsect" type="rtfs:Flag" />
+ <rtfs:token name="rtf:hr" type="rtfs:Value" />
+ <rtfs:token name="rtf:htmautsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:htmlbase" type="rtfs:Flag" />
+ <rtfs:token name="rtf:htmlrtf" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:htmltag" type="rtfs:Destination" />
+ <rtfs:token name="rtf:hyphauto" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:hyphcaps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:hyphconsec" type="rtfs:Value" />
+ <rtfs:token name="rtf:hyphhotz" type="rtfs:Value" />
+ <rtfs:token name="rtf:hyphpar" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:i" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:id" type="rtfs:Value" />
+ <rtfs:token name="rtf:ilvl" type="rtfs:Value" />
+ <rtfs:token name="rtf:impr" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:info" type="rtfs:Destination" />
+ <rtfs:token name="rtf:insrsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:intbl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ipgp" type="rtfs:Value" />
+ <rtfs:token name="rtf:irow" type="rtfs:Value" />
+ <rtfs:token name="rtf:irowband" type="rtfs:Value" />
+ <rtfs:token name="rtf:itap" type="rtfs:Value" />
+ <rtfs:token name="rtf:ixe" type="rtfs:Flag" />
+ <rtfs:token name="rtf:jcompress" type="rtfs:Flag" />
+ <rtfs:token name="rtf:jexpand" type="rtfs:Flag" />
+ <rtfs:token name="rtf:jpegblip" type="rtfs:Flag" />
+ <rtfs:token name="rtf:jsksu" type="rtfs:Flag" />
+ <rtfs:token name="rtf:keep" type="rtfs:Flag" />
+ <rtfs:token name="rtf:keepn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:kerning" type="rtfs:Value" />
+ <rtfs:token name="rtf:keycode" type="rtfs:Destination" />
+ <rtfs:token name="rtf:keywords" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ksulang" type="rtfs:Value" />
+ <rtfs:token name="rtf:landscape" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lang" type="rtfs:Value" />
+ <rtfs:token name="rtf:langfe" type="rtfs:Value" />
+ <rtfs:token name="rtf:langfenp" type="rtfs:Value" />
+ <rtfs:token name="rtf:langnp" type="rtfs:Value" />
+ <rtfs:token name="rtf:lastrow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lbr" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:lchars" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ldblquote" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:level" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelfollow" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelindent" type="rtfs:Value" />
+ <rtfs:token name="rtf:leveljc" type="rtfs:Value" />
+ <rtfs:token name="rtf:leveljcn" type="rtfs:Value" />
+ <rtfs:token name="rtf:levellegal" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelnfc" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelnfcn" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelnorestart" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelnumbers" type="rtfs:Destination" />
+ <rtfs:token name="rtf:levelold" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelpicture" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelprev" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelprevspace" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelspace" type="rtfs:Value" />
+ <rtfs:token name="rtf:levelstartat" type="rtfs:Value" />
+ <rtfs:token name="rtf:leveltemplateid" type="rtfs:Value" />
+ <rtfs:token name="rtf:leveltext" type="rtfs:Value" />
+ <rtfs:token name="rtf:li" type="rtfs:Value" />
+ <rtfs:token name="rtf:line" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:linebetcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:linecont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:linemod" type="rtfs:Value" />
+ <rtfs:token name="rtf:lineppage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:linerestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:linestart" type="rtfs:Value" />
+ <rtfs:token name="rtf:linestarts" type="rtfs:Value" />
+ <rtfs:token name="rtf:linex" type="rtfs:Value" />
+ <rtfs:token name="rtf:linkself" type="rtfs:Flag" />
+ <rtfs:token name="rtf:linkstyles" type="rtfs:Flag" />
+ <rtfs:token name="rtf:linkval" type="rtfs:Value" />
+ <rtfs:token name="rtf:lin" type="rtfs:Value" />
+ <rtfs:token name="rtf:lisa" type="rtfs:Value" />
+ <rtfs:token name="rtf:lisb" type="rtfs:Value" />
+ <rtfs:token name="rtf:listhybrid" type="rtfs:Flag" />
+ <rtfs:token name="rtf:listid" type="rtfs:Value" />
+ <rtfs:token name="rtf:listname" type="rtfs:Destination" />
+ <rtfs:token name="rtf:listoverridecount" type="rtfs:Value" />
+ <rtfs:token name="rtf:listoverrideformat" type="rtfs:Value" />
+ <rtfs:token name="rtf:listoverridestart" type="rtfs:Value" />
+ <rtfs:token name="rtf:listpicture" type="rtfs:Value" />
+ <rtfs:token name="rtf:listrestarthdn" type="rtfs:Value" />
+ <rtfs:token name="rtf:listsimple" type="rtfs:Value" />
+ <rtfs:token name="rtf:liststyleid" type="rtfs:Value" />
+ <rtfs:token name="rtf:liststylename" type="rtfs:Value" />
+ <rtfs:token name="rtf:listtemplateid" type="rtfs:Value" />
+ <rtfs:token name="rtf:listtext" type="rtfs:Destination" />
+ <rtfs:token name="rtf:lnbrkrule" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lndscpsxn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lnongrid" type="rtfs:Flag" />
+ <rtfs:token name="rtf:loch" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lquote" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:ls" type="rtfs:Value" />
+ <rtfs:token name="rtf:ltrch" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ltrdoc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ltrmark" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:ltrpar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ltrrow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ltrsect" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lytcalctblwd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lytexcttp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lytprtmet" type="rtfs:Flag" />
+ <rtfs:token name="rtf:lyttblrtgr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:mac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:macpict" type="rtfs:Flag" />
+ <rtfs:token name="rtf:makebackup" type="rtfs:Flag" />
+ <rtfs:token name="rtf:manager" type="rtfs:Destination" />
+ <rtfs:token name="rtf:margb" type="rtfs:Value" />
+ <rtfs:token name="rtf:margbsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:margl" type="rtfs:Value" />
+ <rtfs:token name="rtf:marglsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:margmirror" type="rtfs:Flag" />
+ <rtfs:token name="rtf:margr" type="rtfs:Value" />
+ <rtfs:token name="rtf:margrsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:margt" type="rtfs:Value" />
+ <rtfs:token name="rtf:margtsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:mhtmltag" type="rtfs:Destination" />
+ <rtfs:token name="rtf:min" type="rtfs:Value" />
+ <rtfs:token name="rtf:mo" type="rtfs:Value" />
+ <rtfs:token name="rtf:msmcap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nestcell" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:nestrow" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:nesttableprops" type="rtfs:Destination" />
+ <rtfs:token name="rtf:nextfile" type="rtfs:Destination" />
+ <rtfs:token name="rtf:nobrkwrptbl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nocolbal" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nocompatoptions" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nocwrap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:noextrasprl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nofchars" type="rtfs:Value" />
+ <rtfs:token name="rtf:nofcharsws" type="rtfs:Value" />
+ <rtfs:token name="rtf:nofpages" type="rtfs:Value" />
+ <rtfs:token name="rtf:nofwords" type="rtfs:Value" />
+ <rtfs:token name="rtf:nolead" type="rtfs:Flag" />
+ <rtfs:token name="rtf:noline" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nolnhtadjtbl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nonesttables" type="rtfs:Destination" />
+ <rtfs:token name="rtf:nonshppict" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nooverflow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:noproof" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nosectexpand" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nosnaplinegrid" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nospaceforul" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nosupersub" type="rtfs:Flag" />
+ <rtfs:token name="rtf:notabind" type="rtfs:Flag" />
+ <rtfs:token name="rtf:noultrlspc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nowidctlpar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nowrap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:nowwrap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:noxlattoyen" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objalias" type="rtfs:Destination" />
+ <rtfs:token name="rtf:objalign" type="rtfs:Value" />
+ <rtfs:token name="rtf:objattph" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objautlink" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objclass" type="rtfs:Destination" />
+ <rtfs:token name="rtf:objcropb" type="rtfs:Value" />
+ <rtfs:token name="rtf:objcropl" type="rtfs:Value" />
+ <rtfs:token name="rtf:objcropr" type="rtfs:Value" />
+ <rtfs:token name="rtf:objcropt" type="rtfs:Value" />
+ <rtfs:token name="rtf:objdata" type="rtfs:Destination" />
+ <rtfs:token name="rtf:object" type="rtfs:Destination" />
+ <rtfs:token name="rtf:objemb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objh" type="rtfs:Value" />
+ <rtfs:token name="rtf:objhtml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objicemb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objlink" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objlock" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objname" type="rtfs:Destination" />
+ <rtfs:token name="rtf:objocx" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objpub" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objscalex" type="rtfs:Value" />
+ <rtfs:token name="rtf:objscaley" type="rtfs:Value" />
+ <rtfs:token name="rtf:objsect" type="rtfs:Destination" />
+ <rtfs:token name="rtf:objsetsize" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objsub" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objtime" type="rtfs:Destination" />
+ <rtfs:token name="rtf:objtransy" type="rtfs:Value" />
+ <rtfs:token name="rtf:objupdate" type="rtfs:Flag" />
+ <rtfs:token name="rtf:objw" type="rtfs:Value" />
+ <rtfs:token name="rtf:oldas" type="rtfs:Flag" />
+ <rtfs:token name="rtf:oldcprops" type="rtfs:Destination" />
+ <rtfs:token name="rtf:oldpprops" type="rtfs:Destination" />
+ <rtfs:token name="rtf:oldsprops" type="rtfs:Destination" />
+ <rtfs:token name="rtf:oldtprops" type="rtfs:Destination" />
+ <rtfs:token name="rtf:oldlinewrap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:operator" type="rtfs:Destination" />
+ <rtfs:token name="rtf:otblrul" type="rtfs:Flag" />
+ <rtfs:token name="rtf:outl" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:outlinelevel" type="rtfs:Value" />
+ <rtfs:token name="rtf:overlay" type="rtfs:Flag" />
+ <rtfs:token name="rtf:page" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:pagebb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:panose" type="rtfs:Destination" />
+ <rtfs:token name="rtf:paperh" type="rtfs:Value" />
+ <rtfs:token name="rtf:paperw" type="rtfs:Value" />
+ <rtfs:token name="rtf:par" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:pararsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:pard" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pca" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdrb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdrfoot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdrhead" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdropt" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgbrdrr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdrsnap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgbrdrt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pghsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgnbidia" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnbidib" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnchosung" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgncnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgncont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgndbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgndbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgndbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgndbnumt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgndec" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgndecd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgngbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgngbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgngbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgngbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhindia" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhindib" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhindic" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhindid" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhn" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgnhnsc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhnsh" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhnsm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhnsn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnhnsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnid" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgnlcltr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnlcrm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnrestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnstart" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgnstarts" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgnthaia" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnthaib" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnthaic" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnucltr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnucrm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnvieta" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnx" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgny" type="rtfs:Value" />
+ <rtfs:token name="rtf:pgnzodiac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnzodiacd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgnzodiacl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pgp" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pgptbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pgwsxn" type="rtfs:Value" />
+ <rtfs:token name="rtf:phcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:phmrg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:phpg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:picbmp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:picbpp" type="rtfs:Value" />
+ <rtfs:token name="rtf:piccropb" type="rtfs:Value" />
+ <rtfs:token name="rtf:piccropl" type="rtfs:Value" />
+ <rtfs:token name="rtf:piccropr" type="rtfs:Value" />
+ <rtfs:token name="rtf:piccropt" type="rtfs:Value" />
+ <rtfs:token name="rtf:pich" type="rtfs:Value" />
+ <rtfs:token name="rtf:pichgoal" type="rtfs:Value" />
+ <rtfs:token name="rtf:picprop" type="rtfs:Destination" />
+ <rtfs:token name="rtf:picscaled" type="rtfs:Flag" />
+ <rtfs:token name="rtf:picscalex" type="rtfs:Value" />
+ <rtfs:token name="rtf:picscaley" type="rtfs:Value" />
+ <rtfs:token name="rtf:pict" type="rtfs:Destination" />
+ <rtfs:token name="rtf:picw" type="rtfs:Value" />
+ <rtfs:token name="rtf:picwgoal" type="rtfs:Value" />
+ <rtfs:token name="rtf:plain" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pmmetafile" type="rtfs:Value" />
+ <rtfs:token name="rtf:pn" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pnacross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnaiu" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnaiud" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnaiueo" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnaiueod" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnb" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:pnbidia" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnbidib" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pncaps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:pncard" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pncf" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnchosung" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pncnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndbnumt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndec" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pndecd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnf" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnfs" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pngblip" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pngbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pngbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pngbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pngbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnhang" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pni" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:pnindent" type="rtfs:Value" />
+ <rtfs:token name="rtf:pniroha" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnirohad" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnlcltr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnlcrm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnlvl" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnlvlblt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnlvlbody" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnlvlcont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnnumonce" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnord" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnordt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnprev" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnqc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnql" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnqr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnrauth" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrdate" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnrnfc" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrnot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnrpnbr" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrrgb" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrstart" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrstop" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnrxst" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnscaps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:pnseclvl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pnsp" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnstart" type="rtfs:Value" />
+ <rtfs:token name="rtf:pnstrike" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:pntext" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pntxta" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pntxtb" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pnucltr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnucrm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnul" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:pnuld" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnuldash" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnuldashd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnuldashdd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnuldb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnulhair" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnulnone" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnulth" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnulw" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnulwave" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnzodiac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnzodiacd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pnzodiacl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posnegx" type="rtfs:Value" />
+ <rtfs:token name="rtf:posnegy" type="rtfs:Value" />
+ <rtfs:token name="rtf:posx" type="rtfs:Value" />
+ <rtfs:token name="rtf:posxc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posxi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posxl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posxo" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posxr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posy" type="rtfs:Value" />
+ <rtfs:token name="rtf:posyb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posyc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posyil" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posyin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posyout" type="rtfs:Flag" />
+ <rtfs:token name="rtf:posyt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:prcolbl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:printdata" type="rtfs:Flag" />
+ <rtfs:token name="rtf:printim" type="rtfs:Destination" />
+ <rtfs:token name="rtf:private" type="rtfs:Destination" />
+ <rtfs:token name="rtf:propname" type="rtfs:Value" />
+ <rtfs:token name="rtf:proptype" type="rtfs:Value" />
+ <rtfs:token name="rtf:psover" type="rtfs:Flag" />
+ <rtfs:token name="rtf:psz" type="rtfs:Value" />
+ <rtfs:token name="rtf:pubauto" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pvmrg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pvpara" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pvpg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:pwd" type="rtfs:Destination" />
+ <rtfs:token name="rtf:pxe" type="rtfs:Destination" />
+ <rtfs:token name="rtf:qc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:qd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:qj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:qk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ql" type="rtfs:Flag" />
+ <rtfs:token name="rtf:qmspace" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:qr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:qt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawbgdkbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgdkcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgdkdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgdkfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgdkhor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgdkvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbghoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rawclbgvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rdblquote" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:red" type="rtfs:Value" />
+ <rtfs:token name="rtf:rempersonalinfo" type="rtfs:Flag" />
+ <rtfs:token name="rtf:result" type="rtfs:Destination" />
+ <rtfs:token name="rtf:revauth" type="rtfs:Value" />
+ <rtfs:token name="rtf:revauthdel" type="rtfs:Value" />
+ <rtfs:token name="rtf:revbar" type="rtfs:Value" />
+ <rtfs:token name="rtf:revdttm" type="rtfs:Value" />
+ <rtfs:token name="rtf:revdttmdel" type="rtfs:Value" />
+ <rtfs:token name="rtf:revised" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:revisions" type="rtfs:Flag" />
+ <rtfs:token name="rtf:revprop" type="rtfs:Value" />
+ <rtfs:token name="rtf:revprot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:revtbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:revtim" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ri" type="rtfs:Value" />
+ <rtfs:token name="rtf:rin" type="rtfs:Value" />
+ <rtfs:token name="rtf:row" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:rquote" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:rsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:rsidroot" type="rtfs:Value" />
+ <rtfs:token name="rtf:rsidtbl" type="rtfs:Destination" />
+ <rtfs:token name="rtf:rsltbmp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rslthtml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rsltmerge" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rsltpict" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rsltrtf" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rslttxt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rtf" type="rtfs:Destination" />
+ <rtfs:token name="rtf:rtlch" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rtldoc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rtlgutter" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rtlmark" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:rtlpar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rtlrow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rtlsect" type="rtfs:Flag" />
+ <rtfs:token name="rtf:rxe" type="rtfs:Destination" />
+ <rtfs:token name="rtf:s" type="rtfs:Value" />
+ <rtfs:token name="rtf:sa" type="rtfs:Value" />
+ <rtfs:token name="rtf:saauto" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:saftnnalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnauc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnchi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnchosung" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnncnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnndbar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnndbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnndbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnndbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnndbnumt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnngbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnngbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnngbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnngbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnrlc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnruc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnzodiac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnzodiacd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnnzodiacl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnrestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnrstcont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:saftnstart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sautoupd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sb" type="rtfs:Value" />
+ <rtfs:token name="rtf:sbasedon" type="rtfs:Value" />
+ <rtfs:token name="rtf:sbauto" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:sbkcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sbkeven" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sbknone" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sbkodd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sbkpage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sbys" type="rtfs:Flag" />
+ <rtfs:token name="rtf:scaps" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:scompose" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sec" type="rtfs:Value" />
+ <rtfs:token name="rtf:sect" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:sectd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sectdefaultcl" type="rtfs:Value" />
+ <rtfs:token name="rtf:sectexpand" type="rtfs:Value" />
+ <rtfs:token name="rtf:sectlinegrid" type="rtfs:Value" />
+ <rtfs:token name="rtf:sectnum" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:sectrsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:sectspecifycl" type="rtfs:Value" />
+ <rtfs:token name="rtf:sectspecifygen" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sectspecifyl" type="rtfs:Value" />
+ <rtfs:token name="rtf:sectunlocked" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnbj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnauc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnchi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnchosung" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnncnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnndbar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnndbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnndbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnndbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnndbnumt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnganada" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnngbnum" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnngbnumd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnngbnumk" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnngbnuml" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnrlc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnruc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnzodiac" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnzodiacd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnnzodiacl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnrestart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnrstcont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnrstpg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftnstart" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sftntj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shad" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:shading" type="rtfs:Value" />
+ <rtfs:token name="rtf:shidden" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shift" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbottom" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpbxcolumn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbxignore" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbxmargin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbxpage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbyignore" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbymargin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbypage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpbypara" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shpfblwtxt" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpfhdr" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpgrp" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpleft" type="rtfs:Value" />
+ <rtfs:token name="rtf:shplid" type="rtfs:Value" />
+ <rtfs:token name="rtf:shplockanchor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:shppict" type="rtfs:Destination" />
+ <rtfs:token name="rtf:shpright" type="rtfs:Value" />
+ <rtfs:token name="rtf:shprslt" type="rtfs:Value" />
+ <rtfs:token name="rtf:shptop" type="rtfs:Value" />
+ <rtfs:token name="rtf:shptxt" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpwrk" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpwr" type="rtfs:Value" />
+ <rtfs:token name="rtf:shpz" type="rtfs:Value" />
+ <rtfs:token name="rtf:sl" type="rtfs:Value" />
+ <rtfs:token name="rtf:slmult" type="rtfs:Value" />
+ <rtfs:token name="rtf:snaptogridincell" type="rtfs:Flag" />
+ <rtfs:token name="rtf:snext" type="rtfs:Value" />
+ <rtfs:token name="rtf:softcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:softlheight" type="rtfs:Value" />
+ <rtfs:token name="rtf:softline" type="rtfs:Flag" />
+ <rtfs:token name="rtf:softpage" type="rtfs:Flag" />
+ <rtfs:token name="rtf:spersonal" type="rtfs:Flag" />
+ <rtfs:token name="rtf:splytwnine" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sprsbsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sprslnsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sprsspbf" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sprstsm" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sprstsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:spv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:sreply" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ssemihidden" type="rtfs:Flag" />
+ <rtfs:token name="rtf:staticval" type="rtfs:Value" />
+ <rtfs:token name="rtf:stextflow" type="rtfs:Value" />
+ <rtfs:token name="rtf:strike" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:striked1" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:stshfbi" type="rtfs:Value" />
+ <rtfs:token name="rtf:stshfdbch" type="rtfs:Value" />
+ <rtfs:token name="rtf:stshfhich" type="rtfs:Value" />
+ <rtfs:token name="rtf:stshfloch" type="rtfs:Value" />
+ <rtfs:token name="rtf:stylesheet" type="rtfs:Destination" />
+ <rtfs:token name="rtf:styrsid" type="rtfs:Value" />
+ <rtfs:token name="rtf:sub" type="rtfs:Flag" />
+ <rtfs:token name="rtf:subdocument" type="rtfs:Value" />
+ <rtfs:token name="rtf:subfontbysize" type="rtfs:Flag" />
+ <rtfs:token name="rtf:subject" type="rtfs:Destination" />
+ <rtfs:token name="rtf:super" type="rtfs:Flag" />
+ <rtfs:token name="rtf:swpbdr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tab" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:tabsnoovrlp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:taprtl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tb" type="rtfs:Value" />
+ <rtfs:token name="rtf:tbllkbestfit" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllkborder" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllkcolor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllkfont" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllkhdrcols" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllkhdrrows" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllklastcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllklastrow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tbllkshading" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tblrsid" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tc" type="rtfs:Destination" />
+ <rtfs:token name="rtf:tcelld" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tcf" type="rtfs:Value" />
+ <rtfs:token name="rtf:tcl" type="rtfs:Value" />
+ <rtfs:token name="rtf:tcn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tdfrmtxtBottom" type="rtfs:Value" />
+ <rtfs:token name="rtf:tdfrmtxtLeft" type="rtfs:Value" />
+ <rtfs:token name="rtf:tdfrmtxtRight" type="rtfs:Value" />
+ <rtfs:token name="rtf:tdfrmtxtTop" type="rtfs:Value" />
+ <rtfs:token name="rtf:template" type="rtfs:Destination" />
+ <rtfs:token name="rtf:time" type="rtfs:Flag" />
+ <rtfs:token name="rtf:title" type="rtfs:Destination" />
+ <rtfs:token name="rtf:titlepg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tldot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tleq" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tlhyph" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tlmdot" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tlth" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tlul" type="rtfs:Flag" />
+ <rtfs:token name="rtf:toplinepunct" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tphcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tphmrg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tphpg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposnegx" type="rtfs:Value" />
+ <rtfs:token name="rtf:tposnegy" type="rtfs:Value" />
+ <rtfs:token name="rtf:tposxc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposxi" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposxl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposx" type="rtfs:Value" />
+ <rtfs:token name="rtf:tposxo" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposxr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposy" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposyb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposyc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposyil" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposyin" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposyoutv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tposyt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tpvmrg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tpvpara" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tpvpg" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tqc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tqdec" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tqr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:transmf" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trauth" type="rtfs:Value" />
+ <rtfs:token name="rtf:trautofit" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:trbgbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdkbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdkcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdkdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdkfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdkhor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgdkvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbghoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbgvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbrdrb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbrdrh" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbrdrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbrdrr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbrdrt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trbrdrv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trcbpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:trcfpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:trdate" type="rtfs:Value" />
+ <rtfs:token name="rtf:trftsWidthA" type="rtfs:Value" />
+ <rtfs:token name="rtf:trftsWidthB" type="rtfs:Value" />
+ <rtfs:token name="rtf:trftsWidth" type="rtfs:Value" />
+ <rtfs:token name="rtf:trgaph" type="rtfs:Value" />
+ <rtfs:token name="rtf:trhdr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trkeep" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trleft" type="rtfs:Value" />
+ <rtfs:token name="rtf:trowd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trpaddb" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddfb" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddfl" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddfr" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddft" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddl" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddr" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpaddt" type="rtfs:Value" />
+ <rtfs:token name="rtf:trpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:trqc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trql" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trqr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trrh" type="rtfs:Value" />
+ <rtfs:token name="rtf:trshdng" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdb" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdfb" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdfl" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdfr" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdft" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdl" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdr" type="rtfs:Value" />
+ <rtfs:token name="rtf:trspdt" type="rtfs:Value" />
+ <rtfs:token name="rtf:truncatefontheight" type="rtfs:Flag" />
+ <rtfs:token name="rtf:trwWidthA" type="rtfs:Value" />
+ <rtfs:token name="rtf:trwWidthB" type="rtfs:Value" />
+ <rtfs:token name="rtf:trwWidth" type="rtfs:Value" />
+ <rtfs:token name="rtf:ts" type="rtfs:Value" />
+ <rtfs:token name="rtf:tsbgbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdkbdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdkcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdkdcross" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdkfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdkhor" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgdkvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgfdiag" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbghoriz" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbgvert" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrdgl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrdgr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrh" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrr" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsbrdrv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscbandhorzeven" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscbandhorzodd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscbandsh" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscbandsv" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscbandverteven" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscbandvertodd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscellcbpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellcfpat" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddb" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddfb" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddfl" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddfr" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddft" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddl" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddr" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpaddt" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellpct" type="rtfs:Value" />
+ <rtfs:token name="rtf:tscellwidth" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscellwidthfts" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscfirstcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscfirstrow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsclastcol" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsclastrow" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscnecell" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscnwcell" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscsecell" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tscswcell" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsnowrap" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsrowd" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsvertalb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsvertalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tsvertalt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:twoonone" type="rtfs:Flag" />
+ <rtfs:token name="rtf:tx" type="rtfs:Value" />
+ <rtfs:token name="rtf:txe" type="rtfs:Destination" />
+ <rtfs:token name="rtf:uc" type="rtfs:Value" />
+ <rtfs:token name="rtf:ud" type="rtfs:Destination" />
+ <rtfs:token name="rtf:ul" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulc" type="rtfs:Value" />
+ <rtfs:token name="rtf:uld" type="rtfs:Flag" />
+ <rtfs:token name="rtf:uldash" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:uldashd" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:uldashdd" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:uldb" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulhair" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulhwave" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulldash" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulnone" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ulth" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulth" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulthd" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulthdash" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulthdashd" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulthdashdd" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulthldash" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ululdbwave" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:ulw" type="rtfs:Flag" />
+ <rtfs:token name="rtf:ulwave" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:u" type="rtfs:Value" />
+ <rtfs:token name="rtf:up" type="rtfs:Value" />
+ <rtfs:token name="rtf:upr" type="rtfs:Destination" />
+ <rtfs:token name="rtf:urtf" type="rtfs:Destination" />
+ <rtfs:token name="rtf:useltbaln" type="rtfs:Flag" />
+ <rtfs:token name="rtf:userprops" type="rtfs:Destination" />
+ <rtfs:token name="rtf:v" type="rtfs:Toggle" />
+ <rtfs:token name="rtf:vern" type="rtfs:Value" />
+ <rtfs:token name="rtf:version" type="rtfs:Value" />
+ <rtfs:token name="rtf:vertalb" type="rtfs:Flag" />
+ <rtfs:token name="rtf:vertalc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:vertalj" type="rtfs:Flag" />
+ <rtfs:token name="rtf:vertalt" type="rtfs:Flag" />
+ <rtfs:token name="rtf:vertdoc" type="rtfs:Flag" />
+ <rtfs:token name="rtf:vertsect" type="rtfs:Flag" />
+ <rtfs:token name="rtf:viewkind" type="rtfs:Value" />
+ <rtfs:token name="rtf:viewnobound" type="rtfs:Flag" />
+ <rtfs:token name="rtf:viewscale" type="rtfs:Value" />
+ <rtfs:token name="rtf:viewzk" type="rtfs:Value" />
+ <rtfs:token name="rtf:wbitmap" type="rtfs:Value" />
+ <rtfs:token name="rtf:wbmbitspixel" type="rtfs:Value" />
+ <rtfs:token name="rtf:wbmplanes" type="rtfs:Value" />
+ <rtfs:token name="rtf:wbmwidthbytes" type="rtfs:Value" />
+ <rtfs:token name="rtf:webhidden" type="rtfs:Flag" />
+ <rtfs:token name="rtf:widctlpar" type="rtfs:Flag" />
+ <rtfs:token name="rtf:widowctrl" type="rtfs:Flag" />
+ <rtfs:token name="rtf:windowcaption" type="rtfs:Value" />
+ <rtfs:token name="rtf:wmetafile" type="rtfs:Value" />
+ <rtfs:token name="rtf:wpeqn" type="rtfs:Flag" />
+ <rtfs:token name="rtf:wpjst" type="rtfs:Flag" />
+ <rtfs:token name="rtf:wpsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:wraptrsp" type="rtfs:Flag" />
+ <rtfs:token name="rtf:wrppunct" type="rtfs:Flag" />
+ <rtfs:token name="rtf:xe" type="rtfs:Destination" />
+ <rtfs:token name="rtf:xef" type="rtfs:Value" />
+ <rtfs:token name="rtf:yr" type="rtfs:Value" />
+ <rtfs:token name="rtf:yts" type="rtfs:Value" />
+ <rtfs:token name="rtf:yxe" type="rtfs:Flag" />
+ <rtfs:token name="rtf:zwbo" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:zwj" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:zwnbo" type="rtfs:Symbol" />
+ <rtfs:token name="rtf:zwnj" type="rtfs:Symbol" />
+
+
+
+ <rtfs:token name="rtf:listlevel" type="rtfs:Attribute" />
+
+</rtfs:definition> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/Handler.cxx b/writerfilter/source/ooxml/Handler.cxx
new file mode 100644
index 000000000000..1b4fb6eb0525
--- /dev/null
+++ b/writerfilter/source/ooxml/Handler.cxx
@@ -0,0 +1,348 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <ooxml/resourceids.hxx>
+#include <resourcemodel/QNameToString.hxx>
+#include "Handler.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+
+/*
+ class OOXMLFootnoteHandler
+ */
+OOXMLFootnoteHandler::OOXMLFootnoteHandler(OOXMLFastContextHandler * pContext)
+: mpFastContext(pContext)
+{
+}
+
+OOXMLFootnoteHandler::~OOXMLFootnoteHandler()
+{
+}
+
+void OOXMLFootnoteHandler::attribute(Id name, Value & val)
+{
+ switch (name)
+ {
+ case NS_ooxml::LN_CT_FtnEdnRef_id:
+ mpFastContext->resolveFootnote(val.getString());
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLFootnoteHandler::sprm(Sprm & /*sprm*/)
+{
+}
+
+/*
+ class OOXMLEndnoteHandler
+ */
+OOXMLEndnoteHandler::OOXMLEndnoteHandler(OOXMLFastContextHandler * pContext)
+: mpFastContext(pContext)
+{
+}
+
+OOXMLEndnoteHandler::~OOXMLEndnoteHandler()
+{
+}
+
+void OOXMLEndnoteHandler::attribute(Id name, Value & val)
+{
+ switch (name)
+ {
+ case NS_ooxml::LN_CT_FtnEdnRef_id:
+ mpFastContext->resolveEndnote(val.getString());
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLEndnoteHandler::sprm(Sprm & /*sprm*/)
+{
+}
+
+/*
+ class OOXMLCommentHandler
+*/
+OOXMLCommentHandler::OOXMLCommentHandler(OOXMLFastContextHandler * pContext)
+: mpFastContext(pContext)
+{
+}
+
+OOXMLCommentHandler::~OOXMLCommentHandler()
+{
+}
+
+void OOXMLCommentHandler::attribute(Id name, Value & val)
+{
+ switch (name)
+ {
+ case NS_ooxml::LN_CT_Markup_id:
+ mpFastContext->resolveComment(val.getString());
+ break;
+ default:
+ ;
+ }
+}
+
+void OOXMLCommentHandler::sprm(Sprm & /*sprm*/)
+{
+}
+
+/*
+ class OOXMLOLEHandler
+*/
+OOXMLOLEHandler::OOXMLOLEHandler(OOXMLFastContextHandler * pContext)
+: mpFastContext(pContext)
+{
+}
+
+OOXMLOLEHandler::~OOXMLOLEHandler()
+{
+}
+
+void OOXMLOLEHandler::attribute(Id name, Value & val)
+{
+ switch (name)
+ {
+ case NS_ooxml::LN_CT_OLEObject_r_id:
+ mpFastContext->resolveOLE(val.getString());
+ break;
+ default:
+ ;
+ }
+}
+
+void OOXMLOLEHandler::sprm(Sprm & /*sprm*/)
+{
+}
+
+/*
+ class OOXMLFooterHandler
+ */
+OOXMLFooterHandler::OOXMLFooterHandler(OOXMLFastContextHandler * pContext)
+: mpFastContext(pContext), msStreamId(), mnType(0)
+{
+}
+
+OOXMLFooterHandler::~OOXMLFooterHandler()
+{
+ mpFastContext->resolveFooter(mnType, msStreamId);
+}
+
+void OOXMLFooterHandler::attribute(Id name, Value & val)
+{
+ switch (name)
+ {
+ case NS_ooxml::LN_CT_HdrFtrRef_id:
+ msStreamId = val.getString();
+ break;
+ case NS_ooxml::LN_CT_HdrFtrRef_type:
+ mnType = val.getInt();
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLFooterHandler::sprm(Sprm & /*sprm*/)
+{
+}
+
+/*
+ class OOXMLHeaderHandler
+ */
+OOXMLHeaderHandler::OOXMLHeaderHandler(OOXMLFastContextHandler * pContext)
+: mpFastContext(pContext), msStreamId(), mnType(0)
+{
+}
+
+OOXMLHeaderHandler::~OOXMLHeaderHandler()
+{
+ mpFastContext->resolveHeader(mnType, msStreamId);
+}
+
+void OOXMLHeaderHandler::attribute(Id name, Value & val)
+{
+ switch (name)
+ {
+ case NS_ooxml::LN_CT_HdrFtrRef_id:
+ msStreamId = val.getString();
+ break;
+ case NS_ooxml::LN_CT_HdrFtrRef_type:
+ mnType = val.getInt();
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLHeaderHandler::sprm(Sprm & /*sprm*/)
+{
+}
+
+/*
+ class OOXMLBreakHandler
+ */
+OOXMLBreakHandler::OOXMLBreakHandler(Stream &rStream,
+ OOXMLFastContextHandler * pContext)
+: mpFastContext(pContext), mnType(0), mnClear(0),
+ mrStream(rStream)
+{
+}
+
+OOXMLBreakHandler::~OOXMLBreakHandler()
+{
+ sal_uInt8 tmpBreak[1];
+ switch (mnType)
+ {
+ case NS_ooxml::LN_Value_ST_BrType_column:
+ tmpBreak[0] = 0x0E;
+ break;
+ case NS_ooxml::LN_Value_ST_BrType_page:
+ tmpBreak[0] = 0x0C;
+ break;
+ case NS_ooxml::LN_Value_ST_BrType_textWrapping:
+ default: // when no attribute type is present, the spec assume textWrapping
+ tmpBreak[0] = 0x0A;
+ break;
+ }
+ mrStream.text(&tmpBreak[0], 1);
+}
+
+void OOXMLBreakHandler::attribute(Id name, Value & val)
+{
+ switch (name)
+ {
+ case NS_ooxml::LN_CT_Br_type:
+ mnType = val.getInt();
+ break;
+ case NS_ooxml::LN_CT_Br_clear:
+ mnClear = val.getInt();
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLBreakHandler::sprm(Sprm & /*sprm*/)
+{
+}
+
+/*
+ class OOXMLPictureHandler
+ */
+OOXMLPictureHandler::OOXMLPictureHandler(OOXMLFastContextHandler * pContext)
+: mpFastContext(pContext)
+{
+}
+
+OOXMLPictureHandler::~OOXMLPictureHandler()
+{
+}
+
+void OOXMLPictureHandler::attribute(Id name, Value & val)
+{
+ if (name == NS_ooxml::LN_AG_Blob_r_embed)
+ mpFastContext->resolvePicture(val.getString());
+ else
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProps
+ (val.getProperties());
+ if (pProps.get() != NULL)
+ pProps->resolve(*this);
+ }
+}
+
+void OOXMLPictureHandler::sprm(Sprm & rSprm)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProps
+ (rSprm.getProps());
+
+ if (pProps.get() != NULL)
+ pProps->resolve(*this);
+}
+
+/**
+ class OOXMLHyperlinkHandler
+ */
+
+OOXMLHyperlinkHandler::OOXMLHyperlinkHandler(OOXMLFastContextHandler * pContext)
+: mpFastContext(pContext)
+{
+}
+
+OOXMLHyperlinkHandler::~OOXMLHyperlinkHandler()
+{
+ ::rtl::OUString sReturn(RTL_CONSTASCII_USTRINGPARAM(" HYPERLINK \""));
+
+ sReturn += mURL;
+ sReturn += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\""));
+ sReturn += mFieldCode;
+
+ mpFastContext->characters(sReturn);
+}
+
+void OOXMLHyperlinkHandler::attribute(Id name, Value & val)
+{
+ switch (name)
+ {
+ case NS_ooxml::LN_CT_Hyperlink_tgtFrame:
+ mFieldCode += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" \\t \""));
+ mFieldCode += val.getString();
+ mFieldCode += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\""));
+ break;
+ case NS_ooxml::LN_CT_Hyperlink_tooltip:
+ mFieldCode += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" \\o \""));
+ mFieldCode += val.getString();
+ mFieldCode += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\""));
+ break;
+ case NS_ooxml::LN_CT_Hyperlink_docLocation:
+ break;
+ case NS_ooxml::LN_CT_Hyperlink_history:
+ break;
+ case NS_ooxml::LN_CT_Hyperlink_anchor:
+ mFieldCode += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" \\l \""));
+ mFieldCode += val.getString();
+ mFieldCode += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\""));
+ break;
+ case NS_ooxml::LN_CT_Hyperlink_r_id:
+ mURL = mpFastContext->getTargetForId(val.getString());
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLHyperlinkHandler::sprm(Sprm & /*rSprm*/)
+{
+}
+}}
diff --git a/writerfilter/source/ooxml/Handler.hxx b/writerfilter/source/ooxml/Handler.hxx
new file mode 100644
index 000000000000..372683c0b0cf
--- /dev/null
+++ b/writerfilter/source/ooxml/Handler.hxx
@@ -0,0 +1,145 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_HANDLER_HXX
+#define INCLUDED_HANDLER_HXX
+
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include "OOXMLFastContextHandler.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+class OOXMLFootnoteHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+
+public:
+ OOXMLFootnoteHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFootnoteHandler();
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLEndnoteHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+public:
+ OOXMLEndnoteHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLEndnoteHandler();
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLFooterHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+ ::rtl::OUString msStreamId;
+ sal_Int32 mnType;
+public:
+ OOXMLFooterHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFooterHandler();
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLHeaderHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+ ::rtl::OUString msStreamId;
+ sal_Int32 mnType;
+public:
+ OOXMLHeaderHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLHeaderHandler();
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLCommentHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+ ::rtl::OUString msStreamId;
+public:
+ OOXMLCommentHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLCommentHandler();
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLOLEHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+
+public:
+ OOXMLOLEHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLOLEHandler();
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLBreakHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+ sal_Int32 mnType, mnClear;
+ Stream & mrStream;
+public:
+ OOXMLBreakHandler(Stream & rStream, OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLBreakHandler();
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLPictureHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+public:
+ OOXMLPictureHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLPictureHandler();
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+class OOXMLHyperlinkHandler : public Properties
+{
+ OOXMLFastContextHandler * mpFastContext;
+ ::rtl::OUString mFieldCode;
+ ::rtl::OUString mURL;
+
+public:
+ OOXMLHyperlinkHandler(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLHyperlinkHandler();
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+};
+
+
+}}
+#endif // INCLUDED_HANDLER_HXX
diff --git a/writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx
new file mode 100644
index 000000000000..d034a145a5bf
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.cxx
@@ -0,0 +1,86 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include "OOXMLBinaryObjectReference.hxx"
+#include <string.h>
+
+namespace writerfilter {
+namespace ooxml
+{
+
+using namespace ::com::sun::star;
+
+OOXMLBinaryObjectReference::OOXMLBinaryObjectReference
+(OOXMLStream::Pointer_t pStream)
+: mpStream(pStream), mbRead(false)
+{
+}
+
+OOXMLBinaryObjectReference::~OOXMLBinaryObjectReference()
+{
+}
+
+void OOXMLBinaryObjectReference::read()
+{
+ sal_uInt32 nMaxReadBytes = 1024*1024;
+ uno::Sequence<sal_Int8> aSeq(nMaxReadBytes);
+ uno::Reference<io::XInputStream> xInputStream =
+ mpStream->getDocumentStream();
+
+ sal_uInt32 nSize = 0;
+ sal_uInt32 nOldSize = 0;
+ sal_uInt32 nBytesRead = 0;
+
+ while ((nBytesRead = xInputStream->readSomeBytes(aSeq, nMaxReadBytes)) > 0)
+ {
+ nOldSize = nSize;
+ nSize += nBytesRead;
+ mSequence.realloc(nSize);
+
+ memcpy(&mSequence[nOldSize], aSeq.getArray(), nBytesRead);
+ }
+
+ mbRead = true;
+}
+
+void OOXMLBinaryObjectReference::resolve(BinaryObj & rHandler)
+{
+ if (! mbRead)
+ read();
+
+ writerfilter::Reference<Properties>::Pointer_t pRef =
+ writerfilter::Reference<Properties>::Pointer_t();
+
+ rHandler.data(reinterpret_cast<sal_uInt8 *>(&mSequence[0]),
+ mSequence.getLength(), pRef);
+}
+
+string OOXMLBinaryObjectReference::getType() const
+{
+ return "OOXMLBinaryObjectReference";
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx
new file mode 100644
index 000000000000..833c93bae9db
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLBinaryObjectReference.hxx
@@ -0,0 +1,55 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OOXML_BINARY_OBJECT_REFERENCE_HXX
+#define INCLUDED_OOXML_BINARY_OBJECT_REFERENCE_HXX
+
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <ooxml/OOXMLDocument.hxx>
+
+namespace writerfilter {
+namespace ooxml
+{
+class OOXMLBinaryObjectReference :
+ public writerfilter::Reference<BinaryObj>
+{
+ OOXMLStream::Pointer_t mpStream;
+ uno::Sequence<sal_Int8> mSequence;
+ bool mbRead;
+
+ void read();
+
+public:
+ OOXMLBinaryObjectReference(OOXMLStream::Pointer_t pStream);
+ virtual ~OOXMLBinaryObjectReference();
+
+ virtual void resolve(BinaryObj & rHandler);
+
+ virtual string getType() const;
+};
+}}
+
+#endif // INCLUDED_OOXML_BINARY_OBJECT_REFERENCE_HXX
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
new file mode 100644
index 000000000000..248334136de5
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.cxx
@@ -0,0 +1,410 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <com/sun/star/xml/sax/XParser.hpp>
+
+#include <com/sun/star/xml/sax/SAXException.hpp>
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include "OOXMLDocumentImpl.hxx"
+#include "OOXMLBinaryObjectReference.hxx"
+#include "OOXMLFastDocumentHandler.hxx"
+#include "OOXMLPropertySetImpl.hxx"
+#include "ooxmlLoggers.hxx"
+
+#include <iostream>
+
+using ::com::sun::star::xml::sax::SAXException;
+namespace writerfilter {
+namespace ooxml
+{
+
+#ifdef DEBUG
+TagLogger::Pointer_t debug_logger(TagLogger::getInstance("DEBUG"));
+#endif
+
+using namespace ::std;
+
+OOXMLDocumentImpl::OOXMLDocumentImpl
+(OOXMLStream::Pointer_t pStream)
+: mpStream(pStream), mXNoteType(0), mbIsSubstream( false )
+{
+}
+
+OOXMLDocumentImpl::~OOXMLDocumentImpl()
+{
+}
+
+void OOXMLDocumentImpl::resolveFastSubStream(Stream & rStreamHandler,
+ OOXMLStream::StreamType_t nType)
+{
+ OOXMLStream::Pointer_t pStream
+ (OOXMLDocumentFactory::createStream(mpStream, nType));
+
+ uno::Reference< xml::sax::XFastParser > xParser
+ (mpStream->getFastParser());
+
+ if (xParser.is())
+ {
+ uno::Reference<uno::XComponentContext> xContext(mpStream->getContext());
+ OOXMLFastDocumentHandler * pDocHandler =
+ new OOXMLFastDocumentHandler(xContext);
+ pDocHandler->setStream(&rStreamHandler);
+ pDocHandler->setDocument(this);
+ pDocHandler->setXNoteId(msXNoteId);
+
+ uno::Reference < xml::sax::XFastDocumentHandler > xDocumentHandler
+ (pDocHandler);
+ uno::Reference < xml::sax::XFastTokenHandler > xTokenHandler
+ (mpStream->getFastTokenHandler(xContext));
+
+ xParser->setFastDocumentHandler(xDocumentHandler);
+ xParser->setTokenHandler(xTokenHandler);
+
+ uno::Reference<io::XInputStream> xInputStream =
+ pStream->getDocumentStream();
+
+ if (xInputStream.is())
+ {
+ struct xml::sax::InputSource oInputSource;
+ oInputSource.aInputStream = xInputStream;
+ xParser->parseStream(oInputSource);
+
+ xInputStream->closeInput();
+ }
+ }
+}
+
+void OOXMLDocumentImpl::resolveFastSubStreamWithId(Stream & rStream,
+ writerfilter::Reference<Stream>::Pointer_t pStream,
+ sal_uInt32 nId)
+{
+ rStream.substream(nId, pStream);
+}
+
+void OOXMLDocumentImpl::setXNoteId(const rtl::OUString & rId)
+{
+ msXNoteId = rId;
+}
+
+const rtl::OUString & OOXMLDocumentImpl::getXNoteId() const
+{
+ return msXNoteId;
+}
+
+void OOXMLDocumentImpl::setXNoteType(const Id & nId)
+{
+ mXNoteType = nId;
+}
+
+const Id & OOXMLDocumentImpl::getXNoteType() const
+{
+ return mXNoteType;
+}
+
+const ::rtl::OUString & OOXMLDocumentImpl::getTarget() const
+{
+ return mpStream->getTarget();
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+OOXMLDocumentImpl::getSubStream(const rtl::OUString & rId)
+{
+ OOXMLStream::Pointer_t pStream
+ (OOXMLDocumentFactory::createStream(mpStream, rId));
+
+ OOXMLDocumentImpl * pTemp;
+ writerfilter::Reference<Stream>::Pointer_t pRet( pTemp = new OOXMLDocumentImpl(pStream) );
+ pTemp->setModel(mxModel);
+ pTemp->setDrawPage(mxDrawPage);
+ pTemp->setIsSubstream( true );
+ return pRet;
+}
+
+writerfilter::Reference<Stream>::Pointer_t
+OOXMLDocumentImpl::getXNoteStream(OOXMLStream::StreamType_t nType, const Id & rType,
+ const rtl::OUString & rId)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("getXNoteStream");
+ debug_logger->attribute("id", rId);
+ debug_logger->endElement("getXNoteStream");
+#endif
+
+ OOXMLStream::Pointer_t pStream =
+ (OOXMLDocumentFactory::createStream(mpStream, nType));
+ OOXMLDocumentImpl * pDocument = new OOXMLDocumentImpl(pStream);
+ pDocument->setXNoteId(rId);
+ pDocument->setXNoteType(rType);
+
+ return writerfilter::Reference<Stream>::Pointer_t(pDocument);
+}
+
+void OOXMLDocumentImpl::resolveFootnote(Stream & rStream,
+ const Id & rType,
+ const rtl::OUString & rNoteId)
+{
+ writerfilter::Reference<Stream>::Pointer_t pStream =
+ getXNoteStream(OOXMLStream::FOOTNOTES, rType, rNoteId);
+
+ Id nId;
+ switch (rType)
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_FtnEdn_separator:
+ case NS_ooxml::LN_Value_wordprocessingml_ST_FtnEdn_continuationSeparator:
+ nId = rType;
+ break;
+ default:
+ nId = NS_rtf::LN_footnote;
+ break;
+ }
+
+ resolveFastSubStreamWithId(rStream, pStream, nId);
+}
+
+void OOXMLDocumentImpl::resolveEndnote(Stream & rStream,
+ const Id & rType,
+ const rtl::OUString & rNoteId)
+{
+ writerfilter::Reference<Stream>::Pointer_t pStream =
+ getXNoteStream(OOXMLStream::ENDNOTES, rType, rNoteId);
+
+ Id nId;
+ switch (rType)
+ {
+ case NS_ooxml::LN_Value_wordprocessingml_ST_FtnEdn_separator:
+ case NS_ooxml::LN_Value_wordprocessingml_ST_FtnEdn_continuationSeparator:
+ nId = rType;
+ break;
+ default:
+ nId = NS_rtf::LN_endnote;
+ break;
+ }
+
+ resolveFastSubStreamWithId(rStream, pStream, nId);
+}
+
+void OOXMLDocumentImpl::resolveComment(Stream & rStream,
+ const rtl::OUString & rId)
+{
+ writerfilter::Reference<Stream>::Pointer_t pStream =
+ getXNoteStream(OOXMLStream::COMMENTS, 0, rId);
+
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_annotation);
+}
+
+OOXMLPropertySet * OOXMLDocumentImpl::getPicturePropSet
+(const ::rtl::OUString & rId)
+{
+ OOXMLStream::Pointer_t pStream
+ (OOXMLDocumentFactory::createStream(mpStream, rId));
+
+ writerfilter::Reference<BinaryObj>::Pointer_t pPicture
+ (new OOXMLBinaryObjectReference(pStream));
+
+ OOXMLValue::Pointer_t pPayloadValue(new OOXMLBinaryValue(pPicture));
+
+ OOXMLProperty::Pointer_t pPayloadProperty
+ (new OOXMLPropertyImpl(NS_rtf::LN_payload, pPayloadValue,
+ OOXMLPropertyImpl::ATTRIBUTE));
+
+ OOXMLPropertySet::Pointer_t pBlipSet(new OOXMLPropertySetImpl());
+
+ pBlipSet->add(pPayloadProperty);
+
+ OOXMLValue::Pointer_t pBlipValue(new OOXMLPropertySetValue(pBlipSet));
+
+ OOXMLProperty::Pointer_t pBlipProperty
+ (new OOXMLPropertyImpl(NS_rtf::LN_blip, pBlipValue,
+ OOXMLPropertyImpl::ATTRIBUTE));
+
+ OOXMLPropertySet * pProps = new OOXMLPropertySetImpl();
+
+ pProps->add(pBlipProperty);
+
+ return pProps;
+}
+
+void OOXMLDocumentImpl::resolvePicture(Stream & rStream,
+ const rtl::OUString & rId)
+{
+ OOXMLPropertySet * pProps = getPicturePropSet(rId);
+
+ rStream.props(writerfilter::Reference<Properties>::Pointer_t(pProps));
+}
+
+::rtl::OUString OOXMLDocumentImpl::getTargetForId(const ::rtl::OUString & rId)
+{
+ return mpStream->getTargetForId(rId);
+}
+
+void OOXMLDocumentImpl::resolveHeader(Stream & rStream,
+ const sal_Int32 type,
+ const rtl::OUString & rId)
+{
+ writerfilter::Reference<Stream>::Pointer_t pStream =
+ getSubStream(rId);
+ switch (type)
+ {
+ case NS_ooxml::LN_Value_ST_HrdFtr_even:
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_headerl);
+ break;
+ case NS_ooxml::LN_Value_ST_HrdFtr_default: // here we assume that default is right, but not necessarily true :-(
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_headerr);
+ break;
+ case NS_ooxml::LN_Value_ST_HrdFtr_first:
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_headerf);
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLDocumentImpl::resolveFooter(Stream & rStream,
+ const sal_Int32 type,
+ const rtl::OUString & rId)
+{
+ writerfilter::Reference<Stream>::Pointer_t pStream =
+ getSubStream(rId);
+
+ switch (type)
+ {
+ case NS_ooxml::LN_Value_ST_HrdFtr_even:
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_footerl);
+ break;
+ case NS_ooxml::LN_Value_ST_HrdFtr_default: // here we assume that default is right, but not necessarily true :-(
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_footerr);
+ break;
+ case NS_ooxml::LN_Value_ST_HrdFtr_first:
+ resolveFastSubStreamWithId(rStream, pStream, NS_rtf::LN_footerf);
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLDocumentImpl::resolve(Stream & rStream)
+{
+#ifdef DEBUG_RESOLVE
+ debug_logger->startElement("OOXMLDocumentImpl.resolve");
+#endif
+
+ uno::Reference< xml::sax::XFastParser > xParser
+ (mpStream->getFastParser());
+
+ if (xParser.is())
+ {
+ uno::Reference<uno::XComponentContext> xContext(mpStream->getContext());
+
+ OOXMLFastDocumentHandler * pDocHandler =
+ new OOXMLFastDocumentHandler(xContext);
+ pDocHandler->setStream(&rStream);
+ pDocHandler->setDocument(this);
+ pDocHandler->setXNoteId(msXNoteId);
+ pDocHandler->setIsSubstream( mbIsSubstream );
+ uno::Reference < xml::sax::XFastDocumentHandler > xDocumentHandler
+ (pDocHandler);
+ uno::Reference < xml::sax::XFastTokenHandler > xTokenHandler
+ (mpStream->getFastTokenHandler(xContext));
+
+ resolveFastSubStream(rStream, OOXMLStream::SETTINGS);
+ resolveFastSubStream(rStream, OOXMLStream::THEME);
+ resolveFastSubStream(rStream, OOXMLStream::FONTTABLE);
+ resolveFastSubStream(rStream, OOXMLStream::STYLES);
+ resolveFastSubStream(rStream, OOXMLStream::NUMBERING);
+
+ xParser->setFastDocumentHandler( xDocumentHandler );
+ xParser->setTokenHandler( xTokenHandler );
+
+ xml::sax::InputSource aParserInput;
+ aParserInput.aInputStream = mpStream->getDocumentStream();
+ try
+ {
+ xParser->parseStream(aParserInput);
+ }
+ catch (...) {
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("exception");
+#endif
+ }
+ }
+
+#ifdef DEBUG_RESOLVE
+ debug_logger->endElement("OOXMLDocumentImpl.resolve");
+#endif
+}
+
+uno::Reference<io::XInputStream> OOXMLDocumentImpl::getInputStreamForId(const ::rtl::OUString & rId)
+{
+ OOXMLStream::Pointer_t pStream(OOXMLDocumentFactory::createStream(mpStream, rId));
+
+ return pStream->getDocumentStream();
+}
+
+string OOXMLDocumentImpl::getType() const
+{
+ return "OOXMLDocumentImpl";
+}
+
+void OOXMLDocumentImpl::setModel(uno::Reference<frame::XModel> xModel)
+{
+ mxModel.set(xModel);
+}
+
+uno::Reference<frame::XModel> OOXMLDocumentImpl::getModel()
+{
+ return mxModel;
+}
+
+void OOXMLDocumentImpl::setDrawPage(uno::Reference<drawing::XDrawPage> xDrawPage)
+{
+ mxDrawPage.set(xDrawPage);
+}
+
+uno::Reference<drawing::XDrawPage> OOXMLDocumentImpl::getDrawPage()
+{
+ return mxDrawPage;
+}
+
+uno::Reference<io::XInputStream> OOXMLDocumentImpl::getInputStream()
+{
+ return mpStream->getDocumentStream();
+}
+
+uno::Reference<io::XInputStream> OOXMLDocumentImpl::getStorageStream()
+{
+ return mpStream->getStorageStream();
+}
+
+OOXMLDocument *
+OOXMLDocumentFactory::createDocument
+(OOXMLStream::Pointer_t pStream)
+{
+ return new OOXMLDocumentImpl(pStream);
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
new file mode 100644
index 000000000000..5da9678c792b
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLDocumentImpl.hxx
@@ -0,0 +1,116 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OOXML_DOCUMENT_IMPL_HXX
+#define INCLUDED_OOXML_DOCUMENT_IMPL_HXX
+
+#include <ooxml/OOXMLDocument.hxx>
+
+#ifndef _COM_SUN_STAR_XML_SAX_XFAST_TOKEN_HANDLER_HPP_
+#include <com/sun/star/xml/sax/XFastTokenHandler.hpp>
+#endif
+
+#include "OOXMLPropertySet.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+
+using namespace ::com::sun::star;
+
+class OOXMLDocumentImpl : public OOXMLDocument
+{
+ OOXMLStream::Pointer_t mpStream;
+ rtl::OUString msXNoteId;
+ Id mXNoteType;
+
+ uno::Reference<frame::XModel> mxModel;
+ uno::Reference<drawing::XDrawPage> mxDrawPage;
+
+ bool mbIsSubstream;
+
+protected:
+ virtual void resolveFastSubStream(Stream & rStream,
+ OOXMLStream::StreamType_t nType);
+
+ virtual void resolveFastSubStreamWithId(Stream & rStream,
+ writerfilter::Reference<Stream>::Pointer_t pStream,
+ sal_uInt32 nId);
+
+ writerfilter::Reference<Stream>::Pointer_t
+ getSubStream(const rtl::OUString & rId);
+
+ writerfilter::Reference<Stream>::Pointer_t
+ getXNoteStream(OOXMLStream::StreamType_t nType,
+ const Id & rType,
+ const rtl::OUString & rNoteId);
+
+ void setIsSubstream( bool bSubstream ) { mbIsSubstream = bSubstream; };
+
+public:
+ OOXMLDocumentImpl(OOXMLStream::Pointer_t pStream);
+ virtual ~OOXMLDocumentImpl();
+
+ virtual void resolve(Stream & rStream);
+
+ virtual string getType() const;
+
+ virtual void resolveFootnote(Stream & rStream,
+ const Id & rType,
+ const rtl::OUString & rNoteId);
+ virtual void resolveEndnote(Stream & rStream,
+ const Id & rType,
+ const rtl::OUString & rNoteId);
+ virtual void resolveHeader(Stream & rStream,
+ const sal_Int32 type,
+ const rtl::OUString & rId);
+ virtual void resolveFooter(Stream & rStream,
+ const sal_Int32 type,
+ const rtl::OUString & rId);
+
+ virtual void resolveComment(Stream & rStream, const rtl::OUString & rId);
+
+ virtual OOXMLPropertySet * getPicturePropSet
+ (const ::rtl::OUString & rId);
+ virtual void resolvePicture(Stream & rStream, const rtl::OUString & rId);
+
+ virtual ::rtl::OUString getTargetForId(const ::rtl::OUString & rId);
+
+ virtual void setModel(uno::Reference<frame::XModel> xModel);
+ virtual uno::Reference<frame::XModel> getModel();
+ virtual void setDrawPage(uno::Reference<drawing::XDrawPage> xDrawPage);
+ virtual uno::Reference<drawing::XDrawPage> getDrawPage();
+ virtual uno::Reference<io::XInputStream> getInputStream();
+ virtual uno::Reference<io::XInputStream> getStorageStream();
+ virtual uno::Reference<io::XInputStream> getInputStreamForId(const rtl::OUString & rId);
+ virtual void setXNoteId(const rtl::OUString & rId);
+ virtual const ::rtl::OUString & getXNoteId() const;
+ virtual void setXNoteType(const Id & rId);
+ virtual const Id & getXNoteType() const;
+ virtual const ::rtl::OUString & getTarget() const;
+};
+}}
+#endif // OOXML_DOCUMENT_IMPL_HXX
diff --git a/writerfilter/source/ooxml/OOXMLFactory.cxx b/writerfilter/source/ooxml/OOXMLFactory.cxx
new file mode 100644
index 000000000000..9188bef6e8cb
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFactory.cxx
@@ -0,0 +1,366 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+
+#include <rtl/instance.hxx>
+#include <osl/mutex.hxx>
+#include "OOXMLFactory.hxx"
+#include "OOXMLFastHelper.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+
+AttributeInfo::AttributeInfo()
+:m_nResource(RT_NoResource), m_nRef(0)
+{
+}
+
+AttributeInfo::AttributeInfo(ResourceType_t nResource, Id nRef)
+ :m_nResource(nResource), m_nRef(nRef)
+{
+}
+
+CreateElement::CreateElement()
+:m_nResource(RT_NoResource), m_nId(0)
+{
+}
+
+CreateElement::CreateElement(ResourceType_t nResource, Id nId)
+: m_nResource(nResource), m_nId(nId)
+{
+}
+
+// class OOXMLFactory_ns
+
+OOXMLFactory_ns::~OOXMLFactory_ns()
+{
+}
+
+AttributeToResourceMapPointer OOXMLFactory_ns::getAttributeToResourceMap(Id nId)
+{
+ if (m_AttributesMap.find(nId) == m_AttributesMap.end())
+ m_AttributesMap[nId] = createAttributeToResourceMap(nId);
+
+ return m_AttributesMap[nId];
+}
+
+ListValueMapPointer OOXMLFactory_ns::getListValueMap(Id nId)
+{
+ if (m_ListValuesMap.find(nId) == m_ListValuesMap.end())
+ m_ListValuesMap[nId] = createListValueMap(nId);
+
+ return m_ListValuesMap[nId];
+}
+
+CreateElementMapPointer OOXMLFactory_ns::getCreateElementMap(Id nId)
+{
+ if (m_CreateElementsMap.find(nId) == m_CreateElementsMap.end())
+ m_CreateElementsMap[nId] = createCreateElementMap(nId);
+
+ return m_CreateElementsMap[nId];
+}
+
+TokenToIdMapPointer OOXMLFactory_ns::getTokenToIdMap(Id nId)
+{
+ if (m_TokenToIdsMap.find(nId) == m_TokenToIdsMap.end())
+ m_TokenToIdsMap[nId] = createTokenToIdMap(nId);
+
+ return m_TokenToIdsMap[nId];
+}
+
+string OOXMLFactory_ns::getDefineName(Id /*nId*/) const
+{
+ return "";
+}
+
+// class OOXMLFactory
+
+typedef rtl::Static< osl::Mutex, OOXMLFactory > OOXMLFactory_Mutex;
+
+OOXMLFactory::Pointer_t OOXMLFactory::m_Instance;
+
+OOXMLFactory::OOXMLFactory()
+{
+ // multi-thread-safe mutex for all platforms
+
+ osl::MutexGuard aGuard(OOXMLFactory_Mutex::get());
+}
+
+OOXMLFactory::~OOXMLFactory()
+{
+}
+
+OOXMLFactory::Pointer_t OOXMLFactory::getInstance()
+{
+ if (m_Instance.get() == NULL)
+ m_Instance.reset(new OOXMLFactory());
+
+ return m_Instance;
+}
+
+void OOXMLFactory::attributes(OOXMLFastContextHandler * pHandler,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+{
+ Id nDefine = pHandler->getDefine();
+ OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine);
+
+ if (pFactory.get() != NULL)
+ {
+#ifdef DEBUG_FACTORY
+ debug_logger->startElement("factory.attributes");
+ debug_logger->attribute("define", pFactory->getDefineName(nDefine));
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "%08" SAL_PRIxUINT32, nDefine);
+ debug_logger->attribute("define-num", sBuffer);
+#endif
+
+ TokenToIdMapPointer pTokenToIdMap = pFactory->getTokenToIdMap(nDefine);
+ AttributeToResourceMapPointer pMap = pFactory->getAttributeToResourceMap(nDefine);
+
+ AttributeToResourceMap::const_iterator aIt;
+ AttributeToResourceMap::const_iterator aEndIt = pMap->end();
+
+ for (aIt = pMap->begin(); aIt != aEndIt; aIt++)
+ {
+ Id nId = (*pTokenToIdMap)[aIt->first];
+#ifdef DEBUG_FACTORY
+ debug_logger->startElement("factory.attribute");
+ debug_logger->attribute("name", fastTokenToId(aIt->first));
+ debug_logger->attribute("tokenid", (*QNameToString::Instance())(nId));
+ snprintf(sBuffer, sizeof(sBuffer), "%08" SAL_PRIxUINT32, nId);
+ debug_logger->attribute("tokenid-num", sBuffer);
+#endif
+ if (Attribs->hasAttribute(aIt->first))
+ {
+ switch (aIt->second.m_nResource)
+ {
+ case RT_Boolean:
+ {
+#ifdef DEBUG_FACTORY
+ debug_logger->element("boolean");
+#endif
+ ::rtl::OUString aValue(Attribs->getValue(aIt->first));
+ OOXMLFastHelper<OOXMLBooleanValue>::newProperty(pHandler, nId, aValue);
+
+ OOXMLValue::Pointer_t pValue(new OOXMLBooleanValue(aValue));
+ pFactory->attributeAction(pHandler, aIt->first, pValue);
+ }
+ break;
+ case RT_String:
+ {
+#ifdef DEBUG_FACTORY
+ debug_logger->element("string");
+#endif
+ ::rtl::OUString aValue(Attribs->getValue(aIt->first));
+ OOXMLFastHelper<OOXMLStringValue>::newProperty
+ (pHandler, nId, aValue);
+
+ OOXMLValue::Pointer_t pValue(new OOXMLStringValue(aValue));
+ pFactory->attributeAction(pHandler, aIt->first, pValue);
+ }
+ break;
+ case RT_Integer:
+ {
+#ifdef DEBUG_FACTORY
+ debug_logger->element("integer");
+#endif
+ ::rtl::OUString aValue(Attribs->getValue(aIt->first));
+ OOXMLFastHelper<OOXMLIntegerValue>::newProperty
+ (pHandler, nId, aValue);
+
+ OOXMLValue::Pointer_t pValue(new OOXMLIntegerValue(aValue));
+ pFactory->attributeAction(pHandler, aIt->first, pValue);
+ }
+ break;
+ case RT_Hex:
+ {
+#ifdef DEBUG_FACTORY
+ debug_logger->element("hex");
+#endif
+ ::rtl::OUString aValue(Attribs->getValue(aIt->first));
+ OOXMLFastHelper<OOXMLHexValue>::newProperty
+ (pHandler, nId, aValue);
+
+ OOXMLValue::Pointer_t pValue(new OOXMLHexValue(aValue));
+ pFactory->attributeAction(pHandler, aIt->first, pValue);
+ }
+ break;
+ case RT_List:
+ {
+#ifdef DEBUG_FACTORY
+ debug_logger->startElement("list");
+#endif
+ ListValueMapPointer pListValueMap =
+ pFactory->getListValueMap(aIt->second.m_nRef);
+
+ if (pListValueMap.get() != NULL)
+ {
+ ::rtl::OUString aValue(Attribs->getValue(aIt->first));
+ sal_uInt32 nValue = (*pListValueMap)[aValue];
+
+#ifdef DEBUG_FACTORY
+ debug_logger->attribute("value", aValue);
+ debug_logger->attribute("value-num", nValue);
+#endif
+
+ OOXMLFastHelper<OOXMLIntegerValue>::newProperty
+ (pHandler, nId, nValue);
+
+ OOXMLValue::Pointer_t pValue(new OOXMLIntegerValue(nValue));
+ pFactory->attributeAction(pHandler, aIt->first, pValue);
+ }
+#ifdef DEBUG_FACTORY
+ debug_logger->endElement("list");
+#endif
+ }
+ break;
+ default:
+#ifdef DEBUG_FACTORY
+ debug_logger->element("unknown-attribute-type");
+#endif
+ break;
+ }
+ }
+#ifdef DEBUG_FACTORY
+ debug_logger->endElement("factory.attribute");
+#endif
+ }
+
+#ifdef DEBUG_FACTORY
+ debug_logger->endElement("factory.attributes");
+#endif
+ }
+}
+
+uno::Reference< xml::sax::XFastContextHandler>
+OOXMLFactory::createFastChildContext(OOXMLFastContextHandler * pHandler,
+ Token_t Element)
+{
+#ifdef DEBUG_FACTORY
+ debug_logger->startElement("factory.createFastChildContext");
+ debug_logger->attribute("token", fastTokenToId(Element));
+#endif
+
+ Id nDefine = pHandler->getDefine();
+
+ OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine);
+
+ uno::Reference< xml::sax::XFastContextHandler> ret;
+
+ //Avoid handling unknown tokens and recursing to death
+ if ((Element & 0xffff) < OOXML_FAST_TOKENS_END)
+ ret = createFastChildContextFromFactory(pHandler, pFactory, Element);
+
+#ifdef DEBUG_FACTORY
+ debug_logger->endElement("factory.createFastChildContext");
+#endif
+
+ return ret;
+}
+
+void OOXMLFactory::characters(OOXMLFastContextHandler * pHandler,
+ const ::rtl::OUString & rString)
+{
+#ifdef DEBUG_FACTORY
+ debug_logger->startElement("factory.characters");
+ debug_logger->chars(rString);
+#endif
+
+ Id nDefine = pHandler->getDefine();
+ OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine);
+
+ if (pFactory.get() != NULL)
+ {
+ pFactory->charactersAction(pHandler, rString);
+ }
+
+#ifdef DEBUG_FACTORY
+ debug_logger->endElement("factory.characters");
+#endif
+}
+
+void OOXMLFactory::startAction(OOXMLFastContextHandler * pHandler, Token_t /*nToken*/)
+{
+ Id nDefine = pHandler->getDefine();
+ OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine);
+
+ if (pFactory.get() != NULL)
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("factory.startAction");
+#endif
+ pFactory->startAction(pHandler);
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("factory.startAction");
+#endif
+ }
+}
+
+void OOXMLFactory::endAction(OOXMLFastContextHandler * pHandler, Token_t /*nToken*/)
+{
+ Id nDefine = pHandler->getDefine();
+ OOXMLFactory_ns::Pointer_t pFactory = getFactoryForNamespace(nDefine);
+
+ if (pFactory.get() != NULL)
+ {
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("factory.endAction");
+#endif
+ pFactory->endAction(pHandler);
+#ifdef DEBUG_ELEMENT
+ debug_logger->endElement("factory.endAction");
+#endif
+ }
+}
+
+void OOXMLFactory_ns::startAction(OOXMLFastContextHandler *)
+{
+}
+
+void OOXMLFactory_ns::endAction(OOXMLFastContextHandler *)
+{
+}
+
+void OOXMLFactory_ns::charactersAction(OOXMLFastContextHandler *, const ::rtl::OUString &)
+{
+}
+
+void OOXMLFactory_ns::attributeAction(OOXMLFastContextHandler *, Token_t, OOXMLValue::Pointer_t)
+{
+}
+
+#ifdef DEBUG_FACTORY
+string OOXMLFactory_ns::getName() const
+{
+ return "noname";
+}
+#endif
+
+}
+}
+
diff --git a/writerfilter/source/ooxml/OOXMLFactory.hxx b/writerfilter/source/ooxml/OOXMLFactory.hxx
new file mode 100644
index 000000000000..753fb3f658f7
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFactory.hxx
@@ -0,0 +1,179 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_OOXML_FACTORY_HXX
+#define INCLUDED_OOXML_FACTORY_HXX
+
+#include <hash_map>
+#include <boost/shared_ptr.hpp>
+
+#ifndef INCLUDED_WW8_RESOURCE_MODEL_HXX
+#include <resourcemodel/WW8ResourceModel.hxx>
+#endif
+
+#ifndef INCLUDED_OOXML_FAST_TOKENS_HXX
+#include <ooxml/OOXMLFastTokens.hxx>
+#endif
+
+#ifndef INCLUDED_OOXML_FAST_CONTEXT_HANDLER_HXX
+#include "OOXMLFastContextHandler.hxx"
+#endif
+
+namespace writerfilter {
+namespace ooxml {
+
+using namespace std;
+
+enum ResourceType_t {
+ RT_NoResource,
+ RT_Table,
+ RT_Stream,
+ RT_List,
+ RT_Integer,
+ RT_Properties,
+ RT_Hex,
+ RT_String,
+ RT_Shape,
+ RT_Boolean,
+ RT_HexValue,
+ RT_Value,
+ RT_XNote,
+ RT_TextTableCell,
+ RT_TextTableRow,
+ RT_TextTable,
+ RT_PropertyTable,
+ RT_Any
+};
+
+struct AttributeInfo
+{
+ ResourceType_t m_nResource;
+ Id m_nRef;
+
+ AttributeInfo(ResourceType_t nResource, Id nRef);
+ AttributeInfo();
+};
+
+typedef hash_map<Token_t, AttributeInfo> AttributeToResourceMap;
+typedef boost::shared_ptr<AttributeToResourceMap> AttributeToResourceMapPointer;
+typedef hash_map<Id, AttributeToResourceMapPointer> AttributesMap;
+
+typedef hash_map<rtl::OUString, sal_Int32, ::rtl::OUStringHash> ListValueMap;
+typedef boost::shared_ptr<ListValueMap> ListValueMapPointer;
+typedef hash_map<Id, ListValueMapPointer> ListValuesMap;
+
+struct CreateElement
+{
+ ResourceType_t m_nResource;
+ Id m_nId;
+
+ CreateElement(ResourceType_t nResource, Id nId);
+ CreateElement();
+};
+
+typedef hash_map<Token_t, CreateElement> CreateElementMap;
+typedef boost::shared_ptr<CreateElementMap> CreateElementMapPointer;
+typedef hash_map<Id, CreateElementMapPointer> CreateElementsMap;
+typedef hash_map<Id, string> IdToStringMap;
+typedef boost::shared_ptr<IdToStringMap> IdToStringMapPointer;
+
+typedef hash_map<Id, Token_t> TokenToIdMap;
+typedef boost::shared_ptr<TokenToIdMap> TokenToIdMapPointer;
+typedef hash_map<Id, TokenToIdMapPointer> TokenToIdsMap;
+
+class OOXMLFactory_ns {
+public:
+ typedef boost::shared_ptr<OOXMLFactory_ns> Pointer_t;
+
+ virtual void startAction(OOXMLFastContextHandler * pHandler);
+ virtual void charactersAction(OOXMLFastContextHandler * pHandler, const ::rtl::OUString & rString);
+ virtual void endAction(OOXMLFastContextHandler * pHandler);
+ virtual void attributeAction(OOXMLFastContextHandler * pHandler, Token_t nToken, OOXMLValue::Pointer_t pValue);
+ virtual string getDefineName(Id nId) const;
+#ifdef DEBUG_FACTORY
+ virtual string getName() const;
+#endif
+
+ AttributeToResourceMapPointer getAttributeToResourceMap(Id nId);
+ ListValueMapPointer getListValueMap(Id nId);
+ CreateElementMapPointer getCreateElementMap(Id nId);
+ TokenToIdMapPointer getTokenToIdMap(Id nId);
+
+protected:
+ virtual ~OOXMLFactory_ns();
+
+ AttributesMap m_AttributesMap;
+ ListValuesMap m_ListValuesMap;
+ CreateElementsMap m_CreateElementsMap;
+ TokenToIdsMap m_TokenToIdsMap;
+
+ virtual AttributeToResourceMapPointer createAttributeToResourceMap(Id nId) = 0;
+ virtual ListValueMapPointer createListValueMap(Id nId) = 0;
+ virtual CreateElementMapPointer createCreateElementMap(Id nId) = 0;
+ virtual TokenToIdMapPointer createTokenToIdMap(Id nId) = 0;
+};
+
+class OOXMLFactory
+{
+public:
+ typedef boost::shared_ptr<OOXMLFactory> Pointer_t;
+
+ static Pointer_t getInstance();
+
+ uno::Reference< xml::sax::XFastContextHandler> createFastChildContext
+ (OOXMLFastContextHandler * pHandler, Token_t Element);
+
+ uno::Reference< xml::sax::XFastContextHandler> createFastChildContextFromStart
+ (OOXMLFastContextHandler * pHandler, Token_t Element);
+
+ void attributes(OOXMLFastContextHandler * pHandler,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs);
+
+ void characters(OOXMLFastContextHandler * pHandler,
+ const ::rtl::OUString & rString);
+
+ void startAction(OOXMLFastContextHandler * pHandler, Token_t nToken);
+ void endAction(OOXMLFastContextHandler * pHandler, Token_t nToken);
+
+ virtual ~OOXMLFactory();
+
+private:
+ static Pointer_t m_Instance;
+
+ OOXMLFactory();
+ OOXMLFactory_ns::Pointer_t getFactoryForNamespace(Id id);
+
+ uno::Reference< xml::sax::XFastContextHandler>
+ createFastChildContextFromFactory(OOXMLFastContextHandler * pHandler,
+ OOXMLFactory_ns::Pointer_t pFactory,
+ Token_t Element);
+};
+
+}
+}
+
+#endif // INCLUDED_OOXML_FACTORY_HXX
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
new file mode 100644
index 000000000000..5e4d5604527f
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.cxx
@@ -0,0 +1,2319 @@
+/*************************************************************************
+ *
+ * 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 3sen
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include <iostream>
+#include <set>
+#include <rtl/uuid.h>
+#include <com/sun/star/drawing/XShapes.hpp>
+#include <resourcemodel/QNameToString.hxx>
+#include <resourcemodel/XPathLogger.hxx>
+#include <resourcemodel/util.hxx>
+#include <ooxml/resourceids.hxx>
+#include <doctok/sprmids.hxx>
+#include <ooxml/OOXMLnamespaceids.hxx>
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFactory.hxx"
+#include "Handler.hxx"
+#include "ooxmlLoggers.hxx"
+
+static const ::rtl::OUString aEmptyStr;
+
+static const sal_uInt8 s0x7[] = { 0x7, 0x0 };
+static const sal_uInt8 s0xd[] = { 0xd, 0x0 };
+static const sal_uInt8 sCR[] = { 0xd, 0x0 };
+static const sal_uInt8 sFtnEdnRef[] = { 0x2, 0x0 };
+static const sal_uInt8 sFtnEdnSep[] = { 0x3, 0x0 };
+static const sal_uInt8 sFtnEdnCont[] = { 0x4, 0x0 };
+static const sal_uInt8 sTab[] = { 0x9, 0x0 };
+static const sal_uInt8 sPgNum[] = { 0x0, 0x0 };
+static const sal_uInt8 sFieldStart[] = { 0x13 };
+static const sal_uInt8 sFieldSep[] = { 0x14 };
+static const sal_uInt8 sFieldEnd[] = { 0x15 };
+static const sal_uInt8 sNoBreakHyphen[] = { 0x1e, 0x0 };
+static const sal_uInt8 sSoftHyphen[] = { 0x1f, 0x0 };
+
+namespace writerfilter {
+namespace ooxml
+{
+using ::com::sun::star::lang::XMultiComponentFactory;
+using namespace ::com::sun::star;
+using namespace ::std;
+
+static uno::Sequence< sal_Int8 > CreateUnoTunnelId()
+{
+ static osl::Mutex aCreateMutex;
+ osl::Guard<osl::Mutex> aGuard( aCreateMutex );
+ uno::Sequence< sal_Int8 > aSeq( 16 );
+ rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True );
+ return aSeq;
+}
+
+static string resourceToString
+(OOXMLFastContextHandler::ResourceEnum_t eResource)
+{
+ string sResult;
+
+ switch (eResource)
+ {
+ case OOXMLFastContextHandler::STREAM:
+ sResult = "Stream";
+ break;
+ case OOXMLFastContextHandler::PROPERTIES:
+ sResult = "Properties";
+ break;
+ case OOXMLFastContextHandler::TABLE:
+ sResult = "Table";
+ break;
+ case OOXMLFastContextHandler::SHAPE:
+ sResult = "Shape";
+ break;
+ default:
+ sResult = "??";
+ }
+
+ return sResult;
+}
+
+set<OOXMLFastContextHandler *> aSetContexts;
+
+#ifdef DEBUG
+class OOXMLIdToString : public IdToString
+{
+public:
+ OOXMLIdToString() : IdToString() {}
+ virtual ~OOXMLIdToString() {}
+
+ virtual string toString(const Id & rId) const
+ {
+ string s((*QNameToString::Instance())(rId));
+
+ if (s.size() == 0)
+ s = "(fasttoken)" + fastTokenToId(rId);
+ else
+ s = "(qname)" + s;
+
+ return s;
+ }
+};
+#endif
+
+/*
+ class OOXMLFastContextHandler
+ */
+
+sal_uInt32 OOXMLFastContextHandler::mnInstanceCount = 0;
+
+OOXMLFastContextHandler::OOXMLFastContextHandler
+(uno::Reference< uno::XComponentContext > const & context)
+: mpParent(NULL),
+ mId(0),
+ mnDefine(0),
+ mnToken(OOXML_FAST_TOKENS_END),
+ mpStream(NULL),
+ mnTableDepth(0),
+ mnInstanceNumber(mnInstanceCount),
+ mnRefCount(0),
+ m_xContext(context)
+{
+ mnInstanceCount++;
+ aSetContexts.insert(this);
+
+ if (mpParserState.get() == NULL)
+ mpParserState.reset(new OOXMLParserState());
+
+ mpParserState->incContextCount();
+}
+
+OOXMLFastContextHandler::OOXMLFastContextHandler
+(OOXMLFastContextHandler * pContext)
+: cppu::WeakImplHelper1<com::sun::star::xml::sax::XFastContextHandler>(),
+ mpParent(pContext),
+ mId(0),
+ mnDefine(0),
+ mnToken(OOXML_FAST_TOKENS_END),
+ mpStream(NULL),
+ mnTableDepth(0),
+ mnInstanceNumber(mnInstanceCount),
+ mnRefCount(0),
+ m_xContext(pContext->m_xContext)
+{
+ if (pContext != NULL)
+ {
+ mpStream = pContext->mpStream;
+ mpParserState = pContext->mpParserState;
+ mnTableDepth = pContext->mnTableDepth;
+ m_xContext = pContext->m_xContext;
+ }
+
+ if (mpParserState.get() == NULL)
+ mpParserState.reset(new OOXMLParserState());
+
+ mnInstanceCount++;
+ aSetContexts.insert(this);
+ mpParserState->incContextCount();
+}
+
+OOXMLFastContextHandler::~OOXMLFastContextHandler()
+{
+ aSetContexts.erase(this);
+}
+
+// ::com::sun::star::xml::sax::XFastContextHandler:
+void SAL_CALL OOXMLFastContextHandler::startFastElement
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.element");
+ string sToken = fastTokenToId(Element);
+ mpParserState->getXPathLogger().startElement(sToken);
+ debug_logger->attribute("token", sToken);
+ debug_logger->attribute("type", getType());
+ debug_logger->attribute("xpath", mpParserState->getXPathLogger().getXPath());
+ debug_logger->startElement("at-start");
+ debug_logger->addTag(toTag());
+ debug_logger->endElement("at-start");
+#endif
+ attributes(Attribs);
+ lcl_startFastElement(Element, Attribs);
+}
+
+void SAL_CALL OOXMLFastContextHandler::startUnknownElement
+(const ::rtl::OUString & Namespace, const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.unknown-element");
+ debug_logger->attribute("namespace", Namespace);
+ debug_logger->attribute("name", Name);
+ mpParserState->getXPathLogger().startElement("unknown");
+#else
+ (void) Namespace;
+ (void) Name;
+#endif
+}
+
+void SAL_CALL OOXMLFastContextHandler::endFastElement(Token_t Element)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ string sToken = fastTokenToId(Element);
+ (void) sToken;
+#endif
+
+ lcl_endFastElement(Element);
+
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("at-end");
+ debug_logger->addTag(toTag());
+ debug_logger->endElement("at-end");
+ debug_logger->endElement("contexthandler.element");
+ mpParserState->getXPathLogger().endElement();
+#endif
+}
+
+void OOXMLFastContextHandler::lcl_startFastElement
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ OOXMLFactory::getInstance()->startAction(this, Element);
+}
+
+void OOXMLFastContextHandler::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ OOXMLFactory::getInstance()->endAction(this, Element);
+}
+
+void SAL_CALL OOXMLFastContextHandler::endUnknownElement
+(const ::rtl::OUString & , const ::rtl::OUString & )
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->endElement("contexthandler.unknown-element");
+ mpParserState->getXPathLogger().endElement();
+#endif
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ OOXMLFastContextHandler::createFastChildContext
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.createFastChildContext");
+ debug_logger->attribute("token", fastTokenToId(Element));
+ debug_logger->attribute("type", getType());
+#endif
+
+ uno::Reference< xml::sax::XFastContextHandler > xResult
+ (lcl_createFastChildContext(Element, Attribs));
+
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->endElement("contexthandler.createFastChildContext");
+#endif
+
+ return xResult;
+}
+
+uno::Reference< xml::sax::XFastContextHandler >
+ OOXMLFastContextHandler::lcl_createFastChildContext
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ return OOXMLFactory::getInstance()->createFastChildContext(this, Element);
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+OOXMLFastContextHandler::createUnknownChildContext
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.createUnknownChildContext");
+ debug_logger->attribute("namespace", Namespace);
+ debug_logger->attribute("name", Name);
+ debug_logger->endElement("contexthandler.createUnknownChildContext");
+#else
+ (void) Namespace;
+ (void) Name;
+#endif
+
+ return uno::Reference< xml::sax::XFastContextHandler >
+ (new OOXMLFastContextHandler(*const_cast<const OOXMLFastContextHandler *>(this)));
+}
+
+void SAL_CALL OOXMLFastContextHandler::characters
+(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ lcl_characters(aChars);
+}
+
+void OOXMLFastContextHandler::lcl_characters
+(const ::rtl::OUString & rString)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ OOXMLFactory::getInstance()->characters(this, rString);
+}
+
+const uno::Sequence< sal_Int8 > & OOXMLFastContextHandler::getUnoTunnelId()
+{
+ static uno::Sequence< sal_Int8 > aSeq = CreateUnoTunnelId();
+ return aSeq;
+}
+
+sal_Int64 SAL_CALL OOXMLFastContextHandler::getSomething( const uno::Sequence< sal_Int8 >& rId )
+ throw(uno::RuntimeException)
+{
+ if( rId.getLength() == 16
+ && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
+ rId.getConstArray(), 16 ) )
+ {
+ return sal::static_int_cast<sal_Int64>
+ (reinterpret_cast<sal_IntPtr>(this));
+ }
+
+ return 0x0;
+}
+
+void OOXMLFastContextHandler::setStream(Stream * pStream)
+{
+ mpStream = pStream;
+}
+
+OOXMLValue::Pointer_t OOXMLFastContextHandler::getValue() const
+{
+ return OOXMLValue::Pointer_t();
+}
+
+void OOXMLFastContextHandler::attributes
+(const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ OOXMLFactory::getInstance()->attributes(this, Attribs);
+}
+
+void OOXMLFastContextHandler::startAction(Token_t Element)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.startAction");
+#endif
+ lcl_startAction(Element);
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->endElement("contexthandler.startAction");
+#endif
+}
+
+void OOXMLFastContextHandler::lcl_startAction(Token_t Element)
+{
+ OOXMLFactory::getInstance()->startAction(this, Element);
+}
+
+void OOXMLFastContextHandler::endAction(Token_t Element)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.endAction");
+#endif
+ lcl_endAction(Element);
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->endElement("contexthandler.endAction");
+#endif
+}
+
+void OOXMLFastContextHandler::lcl_endAction(Token_t Element)
+{
+ OOXMLFactory::getInstance()->endAction(this, Element);
+}
+
+#ifdef DEBUG
+XMLTag::Pointer_t OOXMLFastContextHandler::toPropertiesTag
+ (OOXMLPropertySet::Pointer_t pProps)
+{
+ XMLTag::Pointer_t pTag;
+
+ if (pProps.get() != NULL)
+ {
+ PropertySetToTagHandler aHandler(IdToString::Pointer_t(new OOXMLIdToString()));
+
+ pProps->resolve(aHandler);
+ pTag = aHandler.getTag();
+ }
+
+ return pTag;
+}
+
+XMLTag::Pointer_t OOXMLFastContextHandler::toTag() const
+{
+ XMLTag::Pointer_t pTag(new XMLTag("context"));
+
+ static char sBuffer[128];
+ snprintf(sBuffer, sizeof(sBuffer), "%p", this);
+
+ pTag->addAttr("parent", sBuffer);
+ pTag->addAttr("type", getType());
+ pTag->addAttr("resource", getResourceString());
+ pTag->addAttr("token", fastTokenToId(getToken()));
+ pTag->addAttr("id", (*QNameToString::Instance())(getId()));
+
+ OOXMLValue::Pointer_t pVal(getValue());
+
+ if (pVal.get() != NULL)
+ pTag->addAttr("value", pVal->toString());
+ else
+ pTag->addAttr("value", "(null)");
+
+ XMLTag::Pointer_t pTagProps(toPropertiesTag(getPropertySet()));
+ if (pTagProps.get() != NULL)
+ pTag->addTag(pTagProps);
+
+ pTag->addTag(mpParserState->toTag());
+
+ return pTag;
+}
+
+string OOXMLFastContextHandler::toString() const
+{
+ return toTag()->toString();
+}
+#endif
+
+string OOXMLFastContextHandler::getResourceString() const
+{
+ return resourceToString(getResource());
+}
+
+void OOXMLFastContextHandler::setId(Id rId)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.setId");
+
+ static char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "%" SAL_PRIuUINT32, rId);
+
+ debug_logger->attribute("id", sBuffer);
+ debug_logger->attribute("name", (*QNameToString::Instance())(rId));
+ debug_logger->endElement("contexthandler.setId");
+#endif
+
+ mId = rId;
+}
+
+Id OOXMLFastContextHandler::getId() const
+{
+ return mId;
+}
+
+void OOXMLFastContextHandler::setDefine(Id nDefine)
+{
+ mnDefine = nDefine;
+}
+
+Id OOXMLFastContextHandler::getDefine() const
+{
+ return mnDefine;
+}
+
+OOXMLParserState::Pointer_t OOXMLFastContextHandler::getParserState() const
+{
+ return mpParserState;
+}
+
+void OOXMLFastContextHandler::setToken(Token_t nToken)
+{
+ mnToken = nToken;
+
+#ifdef DEBUG_CONTEXT_HANDLER
+ msTokenString = fastTokenToId(mnToken);
+#endif
+}
+
+Token_t OOXMLFastContextHandler::getToken() const
+{
+ return mnToken;
+}
+
+void OOXMLFastContextHandler::mark(const Id & rId, OOXMLValue::Pointer_t pVal)
+{
+ OOXMLPropertySetImpl::Pointer_t pPropSet(new OOXMLPropertySetImpl());
+ OOXMLPropertyImpl::Pointer_t pProperty
+ (new OOXMLPropertyImpl(rId, pVal, OOXMLPropertyImpl::ATTRIBUTE));
+
+ pPropSet->add(pProperty);
+ mpStream->props(pPropSet);
+}
+
+void OOXMLFastContextHandler::setParent
+(OOXMLFastContextHandler * pParent)
+{
+ mpParent = pParent;
+}
+
+OOXMLPropertySet * OOXMLFastContextHandler::getPicturePropSet
+(const ::rtl::OUString & rId)
+{
+ return dynamic_cast<OOXMLDocumentImpl *>(mpParserState->getDocument())->
+ getPicturePropSet(rId);
+}
+
+void OOXMLFastContextHandler::sendTableDepth() const
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.sendTableDepth");
+#endif
+
+ if (mnTableDepth > 0)
+ {
+ OOXMLPropertySet * pProps = new OOXMLPropertySetImpl();
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(mnTableDepth));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(NS_sprm::LN_PTableDepth, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(1));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(NS_sprm::LN_PFInTable, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+
+ mpStream->props(writerfilter::Reference<Properties>::Pointer_t(pProps));
+ }
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->endElement("contexthandler.sendTableDepth");
+#endif
+}
+
+void OOXMLFastContextHandler::setHandle()
+{
+ mpParserState->setHandle();
+ mpStream->info(mpParserState->getHandle());
+}
+
+void OOXMLFastContextHandler::startCharacterGroup()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.startCharacterGroup");
+#endif
+
+ if (isForwardEvents())
+ {
+ if (mpParserState->isInCharacterGroup())
+ endCharacterGroup();
+
+ if (! mpParserState->isInParagraphGroup())
+ startParagraphGroup();
+
+ if (! mpParserState->isInCharacterGroup())
+ {
+ mpStream->startCharacterGroup();
+ mpParserState->setInCharacterGroup(true);
+ mpParserState->resolveCharacterProperties(*mpStream);
+ }
+ }
+}
+
+void OOXMLFastContextHandler::endCharacterGroup()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.endCharacterGroup");
+#endif
+
+ if (isForwardEvents() && mpParserState->isInCharacterGroup())
+ {
+ mpStream->endCharacterGroup();
+ mpParserState->setInCharacterGroup(false);
+ }
+}
+
+void OOXMLFastContextHandler::startParagraphGroup()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.startParagraphGroup");
+#endif
+
+ if (isForwardEvents())
+ {
+ if (mpParserState->isInParagraphGroup())
+ endParagraphGroup();
+
+ if (! mpParserState->isInSectionGroup())
+ startSectionGroup();
+
+ if (! mpParserState->isInParagraphGroup())
+ {
+ mpStream->startParagraphGroup();
+ mpParserState->setInParagraphGroup(true);
+ }
+ }
+}
+
+void OOXMLFastContextHandler::endParagraphGroup()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.endParagraphGroup");
+#endif
+
+ if (isForwardEvents())
+ {
+ if (mpParserState->isInCharacterGroup())
+ endCharacterGroup();
+
+ if (mpParserState->isInParagraphGroup())
+ {
+ mpStream->endParagraphGroup();
+ mpParserState->setInParagraphGroup(false);
+ }
+ }
+}
+
+void OOXMLFastContextHandler::startSectionGroup()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.startSectionGroup");
+#endif
+
+ if (isForwardEvents())
+ {
+ if (mpParserState->isInSectionGroup())
+ endSectionGroup();
+
+ if (! mpParserState->isInSectionGroup())
+ {
+ mpStream->info(mpParserState->getHandle());
+ mpStream->startSectionGroup();
+ mpParserState->setInSectionGroup(true);
+ }
+ }
+}
+
+void OOXMLFastContextHandler::endSectionGroup()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.endSectionGroup");
+#endif
+
+ if (isForwardEvents())
+ {
+ if (mpParserState->isInParagraphGroup())
+ endParagraphGroup();
+
+ if (mpParserState->isInSectionGroup())
+ {
+ mpStream->endSectionGroup();
+ mpParserState->setInSectionGroup(false);
+ }
+ }
+}
+
+void OOXMLFastContextHandler::setLastParagraphInSection()
+{
+ mpParserState->setLastParagraphInSection(true);
+ mpStream->markLastParagraphInSection( );
+}
+
+void OOXMLFastContextHandler::newProperty
+(const Id & /*nId*/, OOXMLValue::Pointer_t /*pVal*/)
+{
+}
+
+void OOXMLFastContextHandler::setPropertySet
+(OOXMLPropertySet::Pointer_t /* pPropertySet */)
+{
+}
+
+OOXMLPropertySet::Pointer_t OOXMLFastContextHandler::getPropertySet() const
+{
+ return OOXMLPropertySet::Pointer_t();
+}
+
+void OOXMLFastContextHandler::startField()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.startField");
+#endif
+ startCharacterGroup();
+ if (isForwardEvents())
+ mpStream->text(sFieldStart, 1);
+ endCharacterGroup();
+}
+
+void OOXMLFastContextHandler::fieldSeparator()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.fieldSeparator");
+#endif
+ startCharacterGroup();
+ if (isForwardEvents())
+ mpStream->text(sFieldSep, 1);
+ endCharacterGroup();
+}
+
+void OOXMLFastContextHandler::endField()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.endField");
+#endif
+ startCharacterGroup();
+ if (isForwardEvents())
+ mpStream->text(sFieldEnd, 1);
+ endCharacterGroup();
+}
+
+void OOXMLFastContextHandler::ftnednref()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.ftnednref");
+#endif
+ if (isForwardEvents())
+ mpStream->utext(sFtnEdnRef, 1);
+}
+
+void OOXMLFastContextHandler::ftnednsep()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.ftnednsep");
+#endif
+ if (isForwardEvents())
+ mpStream->utext(sFtnEdnSep, 1);
+}
+
+void OOXMLFastContextHandler::ftnedncont()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.ftnedncont");
+#endif
+ if (isForwardEvents())
+ mpStream->text(sFtnEdnCont, 1);
+}
+
+void OOXMLFastContextHandler::pgNum()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.pgNum");
+#endif
+ if (isForwardEvents())
+ mpStream->utext((const sal_uInt8*)sPgNum, 1);
+}
+
+void OOXMLFastContextHandler::tab()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.tab");
+#endif
+ if (isForwardEvents())
+ mpStream->utext((const sal_uInt8*)sTab, 1);
+}
+
+void OOXMLFastContextHandler::cr()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.cr");
+#endif
+ if (isForwardEvents())
+ mpStream->utext((const sal_uInt8*)sCR, 1);
+}
+
+void OOXMLFastContextHandler::noBreakHyphen()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.noBreakHyphen");
+#endif
+ if (isForwardEvents())
+ mpStream->utext((const sal_uInt8*)sNoBreakHyphen, 1);
+}
+
+void OOXMLFastContextHandler::softHyphen()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.softHyphen");
+#endif
+ if (isForwardEvents())
+ mpStream->utext((const sal_uInt8*)sSoftHyphen, 1);
+}
+
+void OOXMLFastContextHandler::handleLastParagraphInSection()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.handleLastParagraphInSection");
+#endif
+
+ if (mpParserState->isLastParagraphInSection())
+ {
+ mpParserState->setLastParagraphInSection(false);
+ startSectionGroup();
+ }
+}
+
+void OOXMLFastContextHandler::endOfParagraph()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.endOfParagraph");
+#endif
+ if (! mpParserState->isInCharacterGroup())
+ startCharacterGroup();
+ if (isForwardEvents())
+ mpStream->utext((const sal_uInt8*)sCR, 1);
+}
+
+void OOXMLFastContextHandler::text(const ::rtl::OUString & sText)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.text");
+ debug_logger->chars(sText);
+ debug_logger->endElement("contexthandler.text");
+#endif
+ if (isForwardEvents())
+ mpStream->utext(reinterpret_cast < const sal_uInt8 * >
+ (sText.getStr()),
+ sText.getLength());
+}
+
+void OOXMLFastContextHandler::propagateCharacterProperties()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.propagateCharacterProperties");
+ debug_logger->addTag(toPropertiesTag(getPropertySet()));
+ debug_logger->endElement("contexthandler.propagateCharacterProperties");
+#endif
+
+ mpParserState->setCharacterProperties(getPropertySet());
+}
+
+void OOXMLFastContextHandler::propagateCharacterPropertiesAsSet(const Id & rId)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.propagateCharacterPropertiesAsSet");
+ debug_logger->addTag(toPropertiesTag(getPropertySet()));
+ debug_logger->endElement("contexthandler.propagateCharacterPropertiesAsSet");
+#endif
+
+ OOXMLValue::Pointer_t pValue(new OOXMLPropertySetValue(getPropertySet()));
+ OOXMLPropertySet::Pointer_t pPropertySet(new OOXMLPropertySetImpl());
+
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(rId, pValue, OOXMLPropertyImpl::SPRM));
+
+ pPropertySet->add(pProp);
+ mpParserState->setCharacterProperties(pPropertySet);
+}
+
+bool OOXMLFastContextHandler::propagatesProperties() const
+{
+ return false;
+}
+
+void OOXMLFastContextHandler::propagateCellProperties()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.propagateCellProperties");
+#endif
+
+ mpParserState->setCellProperties(getPropertySet());
+}
+
+void OOXMLFastContextHandler::propagateRowProperties()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.propagateRowProperties");
+#endif
+
+ mpParserState->setRowProperties(getPropertySet());
+}
+
+void OOXMLFastContextHandler::propagateTableProperties()
+{
+ OOXMLPropertySet::Pointer_t pProps = getPropertySet();
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.propagateTableProperties");
+ debug_logger->addTag(toPropertiesTag(pProps));
+ debug_logger->endElement("contexthandler.propagateTableProperties");
+#endif
+
+ mpParserState->setTableProperties(pProps);
+}
+
+void OOXMLFastContextHandler::sendCellProperties()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.sendCellProperties");
+#endif
+
+ mpParserState->resolveCellProperties(*mpStream);
+
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->endElement("contexthandler.sendCellProperties");
+#endif
+}
+
+void OOXMLFastContextHandler::sendRowProperties()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.sendRowProperties");
+#endif
+
+ mpParserState->resolveRowProperties(*mpStream);
+
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->endElement("contexthandler.sendRowProperties");
+#endif
+}
+
+void OOXMLFastContextHandler::sendTableProperties()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.sendTableProperties");
+#endif
+
+ mpParserState->resolveTableProperties(*mpStream);
+
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->endElement("contexthandler.sendTableProperties");
+#endif
+}
+
+void OOXMLFastContextHandler::clearTableProps()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.clearTableProps");
+#endif
+
+ mpParserState->setTableProperties(OOXMLPropertySet::Pointer_t
+ (new OOXMLPropertySetImpl()));
+}
+
+void OOXMLFastContextHandler::sendPropertiesWithId(const Id & rId)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.sendPropertiesWithId");
+ debug_logger->attribute("id", fastTokenToId(rId));
+#endif
+
+ OOXMLValue::Pointer_t pValue(new OOXMLPropertySetValue(getPropertySet()));
+ OOXMLPropertySet::Pointer_t pPropertySet(new OOXMLPropertySetImpl());
+
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(rId, pValue, OOXMLPropertyImpl::SPRM));
+
+ pPropertySet->add(pProp);
+ mpStream->props(pPropertySet);
+
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->addTag(toPropertiesTag(pPropertySet));
+ debug_logger->endElement("contexthandler.sendPropertiesWithId");
+#endif
+}
+
+void OOXMLFastContextHandler::clearProps()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->element("contexthandler.clearProps");
+#endif
+
+ setPropertySet(OOXMLPropertySet::Pointer_t(new OOXMLPropertySetImpl()));
+}
+
+void OOXMLFastContextHandler::setDefaultBooleanValue()
+{
+}
+
+void OOXMLFastContextHandler::setDefaultIntegerValue()
+{
+}
+
+void OOXMLFastContextHandler::setDefaultHexValue()
+{
+}
+
+void OOXMLFastContextHandler::setDefaultStringValue()
+{
+}
+
+void OOXMLFastContextHandler::setDocument(OOXMLDocument * pDocument)
+{
+ mpParserState->setDocument(pDocument);
+}
+
+OOXMLDocument * OOXMLFastContextHandler::getDocument()
+{
+ return mpParserState->getDocument();
+}
+
+void OOXMLFastContextHandler::setForwardEvents(bool bForwardEvents)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.setForwardEvents");
+
+ if (bForwardEvents)
+ debug_logger->chars("true");
+ else
+ debug_logger->chars("false");
+
+ debug_logger->endElement("contexthandler.setForwardEvents");
+#endif
+
+ mpParserState->setForwardEvents(bForwardEvents);
+}
+
+bool OOXMLFastContextHandler::isForwardEvents() const
+{
+ return mpParserState->isForwardEvents();
+}
+
+void OOXMLFastContextHandler::setXNoteId(const ::rtl::OUString & rId)
+{
+ mpParserState->setXNoteId(rId);
+}
+
+void OOXMLFastContextHandler::setXNoteId(OOXMLValue::Pointer_t pValue)
+{
+ mpParserState->setXNoteId(pValue->getString());
+}
+
+const rtl::OUString & OOXMLFastContextHandler::getXNoteId() const
+{
+ return mpParserState->getXNoteId();
+}
+
+void OOXMLFastContextHandler::resolveFootnote
+(const rtl::OUString & rId)
+{
+ mpParserState->getDocument()->resolveFootnote
+ (*mpStream, 0, rId);
+}
+
+void OOXMLFastContextHandler::resolveEndnote(const rtl::OUString & rId)
+{
+ mpParserState->getDocument()->resolveEndnote
+ (*mpStream, 0, rId);
+}
+
+void OOXMLFastContextHandler::resolveComment(const rtl::OUString & rId)
+{
+ mpParserState->getDocument()->resolveComment(*mpStream, rId);
+}
+
+void OOXMLFastContextHandler::resolvePicture(const rtl::OUString & rId)
+{
+ mpParserState->getDocument()->resolvePicture(*mpStream, rId);
+}
+
+void OOXMLFastContextHandler::resolveHeader
+(const sal_Int32 type, const rtl::OUString & rId)
+{
+ mpParserState->getDocument()->resolveHeader(*mpStream, type, rId);
+}
+
+void OOXMLFastContextHandler::resolveFooter
+(const sal_Int32 type, const rtl::OUString & rId)
+{
+ mpParserState->getDocument()->resolveFooter(*mpStream, type, rId);
+}
+
+void OOXMLFastContextHandler::resolveOLE(const rtl::OUString & rId)
+{
+ uno::Reference<io::XInputStream> xInputStream
+ (mpParserState->getDocument()->getInputStreamForId(rId));
+
+ OOXMLValue::Pointer_t aValue(new OOXMLInputStreamValue(xInputStream));
+
+ newProperty(NS_ooxml::LN_inputstream, aValue);
+}
+
+::rtl::OUString OOXMLFastContextHandler::getTargetForId
+(const ::rtl::OUString & rId)
+{
+ return mpParserState->getDocument()->getTargetForId(rId);
+}
+
+void OOXMLFastContextHandler::resolvePropertySetAttrs()
+{
+}
+
+void OOXMLFastContextHandler::sendPropertyToParent()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.sendPropertyToParent");
+#endif
+
+ if (mpParent != NULL)
+ {
+ OOXMLPropertySet::Pointer_t pProps(mpParent->getPropertySet());
+
+ if (pProps.get() != NULL)
+ {
+ OOXMLProperty::Pointer_t
+ pProp(new OOXMLPropertyImpl(mId, getValue(),
+ OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->addTag(toPropertiesTag(pProps));
+#endif
+ }
+ }
+
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->endElement("contexthandler.sendPropertyToParent");
+#endif
+}
+
+void OOXMLFastContextHandler::sendPropertiesToParent()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.sendPropertiesToParent");
+#endif
+ if (mpParent != NULL)
+ {
+ OOXMLPropertySet::Pointer_t pParentProps(mpParent->getPropertySet());
+
+ if (pParentProps.get() != NULL)
+ {
+ OOXMLPropertySet::Pointer_t pProps(getPropertySet());
+
+ if (pProps.get() != NULL)
+ {
+ OOXMLValue::Pointer_t pValue
+ (new OOXMLPropertySetValue(getPropertySet()));
+
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(getId(), pValue, OOXMLPropertyImpl::SPRM));
+
+ pParentProps->add(pProp);
+ }
+ }
+ }
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->endElement("contexthandler.sendPropertiesToParent");
+#endif
+}
+
+uno::Reference< uno::XComponentContext >
+OOXMLFastContextHandler::getComponentContext()
+{
+ return m_xContext;
+}
+
+/*
+ class OOXMLFastContextHandlerStream
+ */
+
+OOXMLFastContextHandlerStream::OOXMLFastContextHandlerStream
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext),
+ mpPropertySetAttrs(new OOXMLPropertySetImpl())
+{
+}
+
+OOXMLFastContextHandlerStream::~OOXMLFastContextHandlerStream()
+{
+}
+
+void OOXMLFastContextHandlerStream::newProperty(const Id & rId,
+ OOXMLValue::Pointer_t pVal)
+{
+ if (rId != 0x0)
+ {
+ OOXMLPropertyImpl::Pointer_t pProperty
+ (new OOXMLPropertyImpl(rId, pVal, OOXMLPropertyImpl::ATTRIBUTE));
+
+ mpPropertySetAttrs->add(pProperty);
+ }
+}
+
+void OOXMLFastContextHandlerStream::sendProperty(Id nId)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.sendProperty");
+ debug_logger->attribute("id", (*QNameToString::Instance())(nId));
+ debug_logger->chars(xmlify(getPropertySetAttrs()->toString()));
+ debug_logger->endElement("contexthandler.sendProperty");
+#endif
+
+ OOXMLPropertySetEntryToString aHandler(nId);
+ getPropertySetAttrs()->resolve(aHandler);
+ const ::rtl::OUString & sText = aHandler.getString();
+ mpStream->utext(reinterpret_cast < const sal_uInt8 * >
+ (sText.getStr()),
+ sText.getLength());
+}
+
+OOXMLPropertySet::Pointer_t
+OOXMLFastContextHandlerStream::getPropertySetAttrs() const
+{
+ return mpPropertySetAttrs;
+}
+
+void OOXMLFastContextHandlerStream::resolvePropertySetAttrs()
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.resolvePropertySetAttrs");
+ debug_logger->chars(mpPropertySetAttrs->toString());
+ debug_logger->endElement("contexthandler.resolvePropertySetAttrs");
+#endif
+ mpStream->props(mpPropertySetAttrs);
+}
+
+OOXMLPropertySet::Pointer_t OOXMLFastContextHandlerStream::getPropertySet()
+ const
+{
+ return getPropertySetAttrs();
+}
+
+void OOXMLFastContextHandlerStream::handleHyperlink()
+{
+ OOXMLHyperlinkHandler aHyperlinkHandler(this);
+ getPropertySetAttrs()->resolve(aHyperlinkHandler);
+}
+
+void OOXMLFastContextHandlerStream::lcl_characters
+(const ::rtl::OUString & rChars)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ text(rChars);
+}
+
+/*
+ class OOXMLFastContextHandlerProperties
+ */
+OOXMLFastContextHandlerProperties::OOXMLFastContextHandlerProperties
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext), mpPropertySet(new OOXMLPropertySetImpl()),
+ mbResolve(false)
+{
+ if (pContext->getResource() == STREAM)
+ mbResolve = true;
+}
+
+OOXMLFastContextHandlerProperties::~OOXMLFastContextHandlerProperties()
+{
+}
+
+void OOXMLFastContextHandlerProperties::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ endAction(Element);
+
+ if (mbResolve)
+ {
+ if (isForwardEvents())
+ {
+ mpStream->props(mpPropertySet);
+ }
+ }
+ else
+ {
+ sendPropertiesToParent();
+ }
+}
+
+OOXMLValue::Pointer_t OOXMLFastContextHandlerProperties::getValue() const
+{
+ return OOXMLValue::Pointer_t(new OOXMLPropertySetValue(mpPropertySet));
+}
+
+#ifdef DEBUG
+XMLTag::Pointer_t OOXMLFastContextHandlerProperties::toTag() const
+{
+ XMLTag::Pointer_t pTag(OOXMLFastContextHandler::toTag());
+ pTag->addAttr("resolve", mbResolve ? "resolve" : "noResolve");
+
+ return pTag;
+}
+#endif
+
+void OOXMLFastContextHandlerProperties::newProperty
+(const Id & rId, OOXMLValue::Pointer_t pVal)
+{
+ if (rId != 0x0)
+ {
+ OOXMLPropertyImpl::Pointer_t pProperty
+ (new OOXMLPropertyImpl(rId, pVal, OOXMLPropertyImpl::ATTRIBUTE));
+
+ mpPropertySet->add(pProperty);
+ }
+}
+
+void OOXMLFastContextHandlerProperties::handleXNotes()
+{
+ switch (mnToken)
+ {
+ case NS_wordprocessingml|OOXML_footnoteReference:
+ {
+ OOXMLFootnoteHandler aFootnoteHandler(this);
+ mpPropertySet->resolve(aFootnoteHandler);
+ }
+ break;
+ case NS_wordprocessingml|OOXML_endnoteReference:
+ {
+ OOXMLEndnoteHandler aEndnoteHandler(this);
+ mpPropertySet->resolve(aEndnoteHandler);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLFastContextHandlerProperties::handleHdrFtr()
+{
+ switch (mnToken)
+ {
+ case NS_wordprocessingml|OOXML_footerReference:
+ {
+ OOXMLFooterHandler aFooterHandler(this);
+ mpPropertySet->resolve(aFooterHandler);
+ }
+ break;
+ case NS_wordprocessingml|OOXML_headerReference:
+ {
+ OOXMLHeaderHandler aHeaderHandler(this);
+ mpPropertySet->resolve(aHeaderHandler);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void OOXMLFastContextHandlerProperties::handleComment()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("handleComment");
+#endif
+
+ OOXMLCommentHandler aCommentHandler(this);
+ getPropertySet()->resolve(aCommentHandler);
+}
+
+void OOXMLFastContextHandlerProperties::handlePicture()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("handlePicture");
+#endif
+
+ OOXMLPictureHandler aPictureHandler(this);
+ getPropertySet()->resolve(aPictureHandler);
+}
+
+void OOXMLFastContextHandlerProperties::handleBreak()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("handleBreak");
+#endif
+
+ OOXMLBreakHandler aBreakHandler(*mpStream, this);
+ getPropertySet()->resolve(aBreakHandler);
+}
+
+void OOXMLFastContextHandlerProperties::handleOLE()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("handleOLE");
+#endif
+
+ OOXMLOLEHandler aOLEHandler(this);
+ getPropertySet()->resolve(aOLEHandler);
+}
+
+void OOXMLFastContextHandlerProperties::setParent
+(OOXMLFastContextHandler * pParent)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("setParent");
+ debug_logger->chars("OOXMLFastContextHandlerProperties");
+ debug_logger->endElement("setParent");
+#endif
+
+ OOXMLFastContextHandler::setParent(pParent);
+
+ if (mpParent->getResource() == STREAM)
+ mbResolve = true;
+}
+
+void OOXMLFastContextHandlerProperties::setPropertySet
+(OOXMLPropertySet::Pointer_t pPropertySet)
+{
+ if (pPropertySet.get() != NULL)
+ mpPropertySet = pPropertySet;
+}
+
+OOXMLPropertySet::Pointer_t
+OOXMLFastContextHandlerProperties::getPropertySet() const
+{
+ return mpPropertySet;
+}
+
+/*
+ * class OOXMLFasContextHandlerPropertyTable
+ */
+
+OOXMLFastContextHandlerPropertyTable::OOXMLFastContextHandlerPropertyTable
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandlerProperties(pContext)
+{
+}
+
+OOXMLFastContextHandlerPropertyTable::~OOXMLFastContextHandlerPropertyTable()
+{
+}
+
+void OOXMLFastContextHandlerPropertyTable::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ OOXMLPropertySet::Pointer_t pPropSet(mpPropertySet->clone());
+ OOXMLTableImpl::ValuePointer_t pTmpVal
+ (new OOXMLPropertySetValue(pPropSet));
+
+ mTable.add(pTmpVal);
+
+ writerfilter::Reference<Table>::Pointer_t pTable(mTable.clone());
+
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("table");
+ debug_logger->attribute("id", (*QNameToString::Instance())(mId));
+ debug_logger->endElement("table");
+#endif
+
+ mpStream->table(mId, pTable);
+
+ endAction(Element);
+}
+
+/*
+ class OOXMLFastContextHandlerValue
+*/
+
+OOXMLFastContextHandlerValue::OOXMLFastContextHandlerValue
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+}
+
+OOXMLFastContextHandlerValue::~OOXMLFastContextHandlerValue()
+{
+}
+
+void OOXMLFastContextHandlerValue::setValue(OOXMLValue::Pointer_t pValue)
+{
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->startElement("contexthandler.setValue");
+ debug_logger->attribute("value", pValue->toString());
+#endif
+
+ mpValue = pValue;
+
+#ifdef DEBUG_CONTEXT_HANDLER
+ debug_logger->endElement("contexthandler.setValue");
+#endif
+}
+
+OOXMLValue::Pointer_t OOXMLFastContextHandlerValue::getValue() const
+{
+ return mpValue;
+}
+
+void OOXMLFastContextHandlerValue::lcl_endFastElement
+(Token_t Element)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ sendPropertyToParent();
+
+ endAction(Element);
+}
+
+void OOXMLFastContextHandlerValue::setDefaultBooleanValue()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("setDefaultBooleanValue");
+#endif
+
+ if (mpValue.get() == NULL)
+ {
+ OOXMLValue::Pointer_t pValue(new OOXMLBooleanValue(true));
+ setValue(pValue);
+ }
+}
+
+void OOXMLFastContextHandlerValue::setDefaultIntegerValue()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("setDefaultIntegerValue");
+#endif
+
+ if (mpValue.get() == NULL)
+ {
+ OOXMLValue::Pointer_t pValue(new OOXMLIntegerValue(0));
+ setValue(pValue);
+ }
+}
+
+void OOXMLFastContextHandlerValue::setDefaultHexValue()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("setDefaultHexValue");
+#endif
+
+ if (mpValue.get() == NULL)
+ {
+ OOXMLValue::Pointer_t pValue(new OOXMLHexValue(0));
+ setValue(pValue);
+ }
+}
+
+void OOXMLFastContextHandlerValue::setDefaultStringValue()
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->element("setDefaultStringValue");
+#endif
+
+ if (mpValue.get() == NULL)
+ {
+ OOXMLValue::Pointer_t pValue(new OOXMLStringValue(::rtl::OUString()));
+ setValue(pValue);
+ }
+}
+/*
+ class OOXMLFastContextHandlerTable
+*/
+
+OOXMLFastContextHandlerTable::OOXMLFastContextHandlerTable
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+}
+
+OOXMLFastContextHandlerTable::~OOXMLFastContextHandlerTable()
+{
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+OOXMLFastContextHandlerTable::createFastChildContext
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ addCurrentChild();
+
+ mCurrentChild.set
+ (OOXMLFastContextHandler::createFastChildContext(Element, Attribs));
+
+ return mCurrentChild;
+}
+
+void OOXMLFastContextHandlerTable::lcl_endFastElement
+(Token_t /*Element*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ addCurrentChild();
+
+ writerfilter::Reference<Table>::Pointer_t pTable(mTable.clone());
+ if (isForwardEvents() && mId != 0x0)
+ {
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("table");
+ string str = (*QNameToString::Instance())(mId);
+ debug_logger->attribute("id", str);
+ debug_logger->endElement("table");
+#endif
+
+ mpStream->table(mId, pTable);
+ }
+}
+
+void OOXMLFastContextHandlerTable::addCurrentChild()
+{
+ OOXMLFastContextHandler * pHandler = mCurrentChild.getPointer();
+ if ( pHandler != NULL)
+ {
+ OOXMLValue::Pointer_t pValue(pHandler->getValue());
+
+ if (pValue.get() != NULL)
+ {
+ OOXMLTableImpl::ValuePointer_t pTmpVal(pValue->clone());
+ mTable.add(pTmpVal);
+ }
+ }
+}
+
+void OOXMLFastContextHandlerTable::newPropertySet
+(OOXMLPropertySet::Pointer_t /*pPropertySet*/)
+{
+
+}
+
+/*
+ class OOXMLFastContextHandlerXNote
+ */
+
+OOXMLFastContextHandlerXNote::OOXMLFastContextHandlerXNote
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+}
+
+OOXMLFastContextHandlerXNote::~OOXMLFastContextHandlerXNote()
+{
+}
+
+void OOXMLFastContextHandlerXNote::lcl_startFastElement
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ mbForwardEventsSaved = isForwardEvents();
+
+ if (msMyXNoteId.compareTo(getXNoteId()) == 0)
+ setForwardEvents(true);
+ else
+ setForwardEvents(false);
+
+ startAction(Element);
+}
+
+void OOXMLFastContextHandlerXNote::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ endAction(Element);
+
+ setForwardEvents(mbForwardEventsSaved);
+}
+
+void OOXMLFastContextHandlerXNote::checkId(OOXMLValue::Pointer_t pValue)
+{
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("checkId");
+ debug_logger->attribute("myId", pValue->getString());
+ debug_logger->attribute("id", getXNoteId());
+ debug_logger->endElement("checkId");
+#endif
+
+ msMyXNoteId = pValue->getString();
+}
+
+/*
+ class OOXMLFastContextHandlerTextTableCell
+ */
+
+OOXMLFastContextHandlerTextTableCell::OOXMLFastContextHandlerTextTableCell
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+}
+
+OOXMLFastContextHandlerTextTableCell::~OOXMLFastContextHandlerTextTableCell()
+{
+}
+
+void OOXMLFastContextHandlerTextTableCell::startCell()
+{
+}
+
+void OOXMLFastContextHandlerTextTableCell::endCell()
+{
+ if (isForwardEvents())
+ {
+ OOXMLPropertySet * pProps = new OOXMLPropertySetImpl();
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(mnTableDepth));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(NS_sprm::LN_PTableDepth, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(1));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(NS_sprm::LN_PFInTable, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLBooleanValue(mnTableDepth > 0));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(NS_sprm::LN_PCell, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("endcell");
+ debug_logger->addTag(toPropertiesTag
+ (OOXMLPropertySet::Pointer_t(pProps->clone())));
+ debug_logger->endElement("endcell");
+#endif
+ mpStream->props(writerfilter::Reference<Properties>::Pointer_t(pProps));
+ }
+}
+
+/*
+ class OOXMLFastContextHandlerTextTableRow
+ */
+
+OOXMLFastContextHandlerTextTableRow::OOXMLFastContextHandlerTextTableRow
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+}
+
+OOXMLFastContextHandlerTextTableRow::~OOXMLFastContextHandlerTextTableRow()
+{
+}
+
+void OOXMLFastContextHandlerTextTableRow::startRow()
+{
+}
+
+void OOXMLFastContextHandlerTextTableRow::endRow()
+{
+ startParagraphGroup();
+
+ if (isForwardEvents())
+ {
+ OOXMLPropertySet * pProps = new OOXMLPropertySetImpl();
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(mnTableDepth));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(NS_sprm::LN_PTableDepth, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(1));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(NS_sprm::LN_PFInTable, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(1));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(NS_sprm::LN_PRow, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("endrow");
+ debug_logger->addTag(toPropertiesTag
+ (OOXMLPropertySet::Pointer_t(pProps->clone())));
+ debug_logger->endElement("endrow");
+#endif
+
+ mpStream->props(writerfilter::Reference<Properties>::Pointer_t(pProps));
+ }
+
+ startCharacterGroup();
+
+ if (isForwardEvents())
+ mpStream->utext(s0xd, 1);
+
+ endCharacterGroup();
+ endParagraphGroup();
+}
+
+/*
+ class OOXMLFastContextHandlerTextTable
+ */
+
+OOXMLFastContextHandlerTextTable::OOXMLFastContextHandlerTextTable
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandler(pContext)
+{
+}
+
+OOXMLFastContextHandlerTextTable::~OOXMLFastContextHandlerTextTable()
+{
+ clearTableProps();
+}
+
+void OOXMLFastContextHandlerTextTable::lcl_startFastElement
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ mpParserState->startTable();
+ mnTableDepth++;
+
+ boost::shared_ptr<OOXMLPropertySet> pProps( new OOXMLPropertySetImpl );
+ {
+ OOXMLValue::Pointer_t pVal
+ (new OOXMLIntegerValue(mnTableDepth));
+ OOXMLProperty::Pointer_t pProp
+ (new OOXMLPropertyImpl(NS_ooxml::LN_tblStart, pVal, OOXMLPropertyImpl::SPRM));
+ pProps->add(pProp);
+ }
+ mpParserState->setCharacterProperties(pProps);
+
+ startAction(Element);
+}
+
+void OOXMLFastContextHandlerTextTable::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ endAction(Element);
+
+ mnTableDepth--;
+ mpParserState->endTable();
+}
+
+/*
+ class OOXMLFastContextHandlerShape
+ */
+
+OOXMLFastContextHandlerShape::OOXMLFastContextHandlerShape
+(OOXMLFastContextHandler * pContext)
+: OOXMLFastContextHandlerProperties(pContext), m_bShapeSent( false ),
+ m_bShapeStarted(false)
+{
+ uno::Reference<uno::XComponentContext> xContext(getComponentContext());
+ if (xContext.is())
+ {
+ uno::Reference<XMultiComponentFactory> rServiceManager
+ (xContext->getServiceManager());
+
+ mrShapeContext.set
+ (rServiceManager->
+ createInstanceWithContext
+ (::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.xml.sax.FastShapeContextHandler")), xContext),
+ uno::UNO_QUERY);
+
+ if (mrShapeContext.is())
+ {
+ mrShapeContext->setModel(getDocument()->getModel());
+ mrShapeContext->setDrawPage(getDocument()->getDrawPage());
+ mrShapeContext->setInputStream(getDocument()->getStorageStream());
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("setRelationFragmentPath");
+ debug_logger->attribute("path", mpParserState->getTarget());
+ debug_logger->endElement("setRelationFragmentPath");
+#endif
+ mrShapeContext->setRelationFragmentPath
+ (mpParserState->getTarget());
+ }
+#ifdef DEBUG_CONTEXT_STACK
+ else
+ {
+ debug_logger->startElement("error");
+ debug_logger->chars("failed to get shape handler");
+ debug_logger->endElement("error");
+ }
+#endif
+ }
+}
+
+OOXMLFastContextHandlerShape::~OOXMLFastContextHandlerShape()
+{
+}
+
+void OOXMLFastContextHandlerShape::lcl_startFastElement
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ startAction(Element);
+
+ if (mrShapeContext.is())
+ {
+ mrShapeContext->startFastElement(Element, Attribs);
+ }
+}
+
+void SAL_CALL OOXMLFastContextHandlerShape::startUnknownElement
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mrShapeContext.is())
+ mrShapeContext->startUnknownElement(Namespace, Name, Attribs);
+}
+
+void OOXMLFastContextHandlerShape::setToken(Token_t nToken)
+{
+ OOXMLFastContextHandler::setToken(nToken);
+
+ if (mrShapeContext.is())
+ mrShapeContext->setStartToken(nToken);
+}
+
+void OOXMLFastContextHandlerShape::sendShape( Token_t Element )
+{
+ if ( mrShapeContext.is() && !m_bShapeSent )
+ {
+ uno::Reference<drawing::XShape> xShape(mrShapeContext->getShape());
+ if (xShape.is())
+ {
+ OOXMLValue::Pointer_t
+ pValue(new OOXMLShapeValue(xShape));
+ newProperty(NS_ooxml::LN_shape, pValue);
+ m_bShapeSent = true;
+
+ bool bIsPicture = Element == ( NS_picture | OOXML_pic );
+
+ // Notify the dmapper that the shape is ready to use
+ if ( !bIsPicture )
+ {
+ mpStream->startShape( xShape );
+ m_bShapeStarted = true;
+ }
+ }
+ }
+}
+
+void OOXMLFastContextHandlerShape::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mrShapeContext.is())
+ {
+ mrShapeContext->endFastElement(Element);
+ sendShape( Element );
+ }
+
+ OOXMLFastContextHandlerProperties::lcl_endFastElement(Element);
+
+ // Ending the shape should be the last thing to do
+ bool bIsPicture = Element == ( NS_picture | OOXML_pic );
+ if ( !bIsPicture && m_bShapeStarted)
+ mpStream->endShape( );
+}
+
+void SAL_CALL OOXMLFastContextHandlerShape::endUnknownElement
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mrShapeContext.is())
+ mrShapeContext->endUnknownElement(Namespace, Name);
+}
+
+uno::Reference< xml::sax::XFastContextHandler >
+OOXMLFastContextHandlerShape::lcl_createFastChildContext
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ uno::Reference< xml::sax::XFastContextHandler > xContextHandler;
+
+ sal_uInt32 nNamespace = Element & 0xffff0000;
+
+ switch (nNamespace)
+ {
+ case NS_wordprocessingml:
+ case NS_vml_wordprocessingDrawing:
+ case NS_office:
+ xContextHandler.set(OOXMLFactory::getInstance()->createFastChildContextFromStart(this, Element));
+ break;
+ default:
+ if (mrShapeContext.is())
+ {
+ uno::Reference<XFastContextHandler> pChildContext =
+ mrShapeContext->createFastChildContext(Element, Attribs);
+
+ OOXMLFastContextHandlerWrapper * pWrapper =
+ new OOXMLFastContextHandlerWrapper(this, pChildContext);
+
+ pWrapper->addNamespace(NS_wordprocessingml);
+ pWrapper->addNamespace(NS_vml_wordprocessingDrawing);
+ pWrapper->addNamespace(NS_office);
+ pWrapper->addToken( NS_vml|OOXML_textbox );
+
+ xContextHandler.set(pWrapper);
+ }
+ else
+ xContextHandler.set(this);
+ break;
+ }
+
+
+ return xContextHandler;
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+OOXMLFastContextHandlerShape::createUnknownChildContext
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ uno::Reference< xml::sax::XFastContextHandler > xResult;
+
+ if (mrShapeContext.is())
+ xResult.set(mrShapeContext->createUnknownChildContext
+ (Namespace, Name, Attribs));
+
+ return xResult;
+}
+
+void OOXMLFastContextHandlerShape::lcl_characters
+(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mrShapeContext.is())
+ mrShapeContext->characters(aChars);
+}
+
+/*
+ class OOXMLFastContextHandlerWrapper
+*/
+
+OOXMLFastContextHandlerWrapper::OOXMLFastContextHandlerWrapper
+(OOXMLFastContextHandler * pParent,
+ uno::Reference<XFastContextHandler> xContext)
+: OOXMLFastContextHandler(pParent), mxContext(xContext)
+{
+ if (pParent != NULL)
+ {
+ setId(pParent->getId());
+ setToken(pParent->getToken());
+ setPropertySet(pParent->getPropertySet());
+ }
+}
+
+OOXMLFastContextHandlerWrapper::~OOXMLFastContextHandlerWrapper()
+{
+}
+
+void SAL_CALL OOXMLFastContextHandlerWrapper::startUnknownElement
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mxContext.is())
+ mxContext->startUnknownElement(Namespace, Name, Attribs);
+}
+
+void SAL_CALL OOXMLFastContextHandlerWrapper::endUnknownElement
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mxContext.is())
+ mxContext->endUnknownElement(Namespace, Name);
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+OOXMLFastContextHandlerWrapper::createUnknownChildContext
+(const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ uno::Reference< xml::sax::XFastContextHandler > xResult;
+
+ if (mxContext.is())
+ xResult = mxContext->createUnknownChildContext
+ (Namespace, Name, Attribs);
+ else
+ xResult.set(this);
+
+ return xResult;
+}
+
+void OOXMLFastContextHandlerWrapper::attributes
+(const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ pHandler->attributes(Attribs);
+ }
+}
+
+OOXMLFastContextHandler::ResourceEnum_t
+OOXMLFastContextHandlerWrapper::getResource() const
+{
+ return UNKNOWN;
+}
+
+void OOXMLFastContextHandlerWrapper::addNamespace(const Id & nId)
+{
+ mMyNamespaces.insert(nId);
+}
+
+void OOXMLFastContextHandlerWrapper::addToken( Token_t Token )
+{
+ mMyTokens.insert( Token );
+}
+
+void OOXMLFastContextHandlerWrapper::lcl_startFastElement
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mxContext.is())
+ mxContext->startFastElement(Element, Attribs);
+}
+
+void OOXMLFastContextHandlerWrapper::lcl_endFastElement
+(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mxContext.is())
+ mxContext->endFastElement(Element);
+}
+
+uno::Reference< xml::sax::XFastContextHandler >
+OOXMLFastContextHandlerWrapper::lcl_createFastChildContext
+(Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ uno::Reference< xml::sax::XFastContextHandler > xResult;
+
+ Id nNameSpace = Element & 0xffff0000;
+
+#ifdef DEBUG_ELEMENT
+ debug_logger->startElement("Wrapper-createChildContext");
+ debug_logger->attribute("token", fastTokenToId(Element));
+
+ set<Id>::const_iterator aIt(mMyNamespaces.begin());
+ while (aIt != mMyNamespaces.end())
+ {
+ debug_logger->startElement("namespace");
+ debug_logger->attribute("id", fastTokenToId(*aIt));
+ debug_logger->endElement("namespace");
+
+ aIt++;
+ }
+
+ debug_logger->endElement("Wrapper-createChildContext");
+#endif
+
+ bool bInNamespaces = mMyNamespaces.find(nNameSpace) != mMyNamespaces.end();
+ bool bInTokens = mMyTokens.find( Element ) != mMyTokens.end( );
+ if ( bInNamespaces )
+ xResult.set(OOXMLFactory::getInstance()->createFastChildContextFromStart(this, Element));
+ else if (mxContext.is())
+ {
+ OOXMLFastContextHandlerWrapper * pWrapper =
+ new OOXMLFastContextHandlerWrapper
+ (this, mxContext->createFastChildContext(Element, Attribs));
+ pWrapper->mMyNamespaces = mMyNamespaces;
+ pWrapper->setPropertySet(getPropertySet());
+ xResult.set(pWrapper);
+ }
+ else
+ xResult.set(this);
+
+ if ( bInTokens )
+ {
+ OOXMLFastContextHandlerShape* pShapeCtx = (OOXMLFastContextHandlerShape*)mpParent;
+ pShapeCtx->sendShape( Element );
+ }
+
+ return xResult;
+}
+
+void OOXMLFastContextHandlerWrapper::lcl_characters
+(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ if (mxContext.is())
+ mxContext->characters(aChars);
+}
+
+OOXMLFastContextHandler *
+OOXMLFastContextHandlerWrapper::getFastContextHandler() const
+{
+ if (mxContext.is())
+ return dynamic_cast<OOXMLFastContextHandler *>(mxContext.get());
+
+ return NULL;
+}
+
+void OOXMLFastContextHandlerWrapper::newProperty
+(const Id & rId, OOXMLValue::Pointer_t pVal)
+{
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ pHandler->newProperty(rId, pVal);
+ }
+}
+
+void OOXMLFastContextHandlerWrapper::setPropertySet
+(OOXMLPropertySet::Pointer_t pPropertySet)
+{
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ pHandler->setPropertySet(pPropertySet);
+ }
+
+ mpPropertySet = pPropertySet;
+}
+
+OOXMLPropertySet::Pointer_t OOXMLFastContextHandlerWrapper::getPropertySet()
+ const
+{
+ OOXMLPropertySet::Pointer_t pResult(mpPropertySet);
+
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ pResult = pHandler->getPropertySet();
+ }
+
+ return pResult;
+}
+
+string OOXMLFastContextHandlerWrapper::getType() const
+{
+ string sResult = "Wrapper(";
+
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ sResult += pHandler->getType();
+ }
+
+ sResult += ")";
+
+ return sResult;
+}
+
+void OOXMLFastContextHandlerWrapper::setId(Id rId)
+{
+ OOXMLFastContextHandler::setId(rId);
+
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ pHandler->setId(rId);
+ }
+}
+
+Id OOXMLFastContextHandlerWrapper::getId() const
+{
+ Id nResult = OOXMLFastContextHandler::getId();
+
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL && pHandler->getId() != 0)
+ nResult = pHandler->getId();
+ }
+
+ return nResult;
+}
+
+void OOXMLFastContextHandlerWrapper::setToken(Token_t nToken)
+{
+ OOXMLFastContextHandler::setToken(nToken);
+
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ pHandler->setToken(nToken);
+ }
+}
+
+Token_t OOXMLFastContextHandlerWrapper::getToken() const
+{
+ Token_t nResult = OOXMLFastContextHandler::getToken();
+
+ if (mxContext.is())
+ {
+ OOXMLFastContextHandler * pHandler = getFastContextHandler();
+ if (pHandler != NULL)
+ nResult = pHandler->getToken();
+ }
+
+ return nResult;
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
new file mode 100644
index 000000000000..59ee2cc42080
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastContextHandler.hxx
@@ -0,0 +1,639 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_OOXML_FAST_CONTEXT_HANDLER_HXX
+#define INCLUDED_OOXML_FAST_CONTEXT_HANDLER_HXX
+
+#include <com/sun/star/xml/sax/XFastShapeContextHandler.hpp>
+
+#include <string>
+#include <set>
+#include "sal/config.h"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "cppuhelper/implbase1.hxx"
+#include "com/sun/star/xml/sax/XFastContextHandler.hpp"
+#include "OOXMLParserState.hxx"
+#include "OOXMLPropertySetImpl.hxx"
+#include "OOXMLDocumentImpl.hxx"
+#include "RefAndPointer.hxx"
+#include <ooxml/OOXMLFastTokens.hxx>
+
+namespace writerfilter {
+namespace ooxml
+{
+using namespace ::std;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::xml::sax;
+
+typedef boost::shared_ptr<Stream> StreamPointer_t;
+
+class OOXMLFastContextHandler:
+ public ::cppu::WeakImplHelper1<
+ xml::sax::XFastContextHandler>
+{
+public:
+ typedef RefAndPointer<XFastContextHandler, OOXMLFastContextHandler>
+ RefAndPointer_t;
+ typedef boost::shared_ptr<OOXMLFastContextHandler> Pointer_t;
+
+ enum ResourceEnum_t { UNKNOWN, STREAM, PROPERTIES, TABLE, SHAPE };
+
+ OOXMLFastContextHandler();
+ explicit OOXMLFastContextHandler
+ (uno::Reference< uno::XComponentContext > const & context);
+
+ explicit OOXMLFastContextHandler
+ (OOXMLFastContextHandler * pContext);
+
+ virtual ~OOXMLFastContextHandler();
+
+ // ::com::sun::star::xml::sax::XFastContextHandler:
+ virtual void SAL_CALL startFastElement
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void SAL_CALL startUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void SAL_CALL endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void SAL_CALL endUnknownElement
+ (const ::rtl::OUString & Namespace, const ::rtl::OUString & Name)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createFastChildContext
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createUnknownChildContext
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void SAL_CALL characters(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ static const uno::Sequence< sal_Int8 > & getUnoTunnelId();
+ virtual sal_Int64 SAL_CALL getSomething(const uno::Sequence<sal_Int8> & rId)
+ throw (uno::RuntimeException);
+
+ // local
+
+ void setStream(Stream * pStream);
+
+ /**
+ Return value of this context(element).
+
+ @return the value
+ */
+ virtual OOXMLValue::Pointer_t getValue() const;
+
+ /**
+ Returns a string describing the type of the context.
+
+ This is the name of the define normally.
+
+ @return type string
+ */
+ virtual string getType() const { return "??"; }
+
+ virtual ResourceEnum_t getResource() const { return STREAM; }
+
+ virtual void attributes
+ (const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void newProperty(const Id & rId, OOXMLValue::Pointer_t pVal);
+ virtual void setPropertySet(OOXMLPropertySet::Pointer_t pPropertySet);
+ virtual OOXMLPropertySet::Pointer_t getPropertySet() const;
+
+ virtual void setToken(Token_t nToken);
+ virtual Token_t getToken() const;
+
+ void mark(const Id & rId, OOXMLValue::Pointer_t pVal);
+
+ void resolveFootnote(const rtl::OUString & rId);
+ void resolveEndnote(const rtl::OUString & rId);
+ void resolveComment(const rtl::OUString & rId);
+ void resolvePicture(const rtl::OUString & rId);
+ void resolveHeader(const sal_Int32 type,
+ const rtl::OUString & rId);
+ void resolveFooter(const sal_Int32 type,
+ const rtl::OUString & rId);
+ void resolveOLE(const rtl::OUString & rId);
+
+ ::rtl::OUString getTargetForId(const ::rtl::OUString & rId);
+
+ uno::Reference < xml::sax::XFastContextHandler >
+ createFromStart
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs);
+
+ void setDocument(OOXMLDocument * pDocument);
+ OOXMLDocument * getDocument();
+ void setXNoteId(OOXMLValue::Pointer_t pValue);
+ void setXNoteId(const ::rtl::OUString & rId);
+ const rtl::OUString & getXNoteId() const;
+ void setForwardEvents(bool bForwardEvents);
+ bool isForwardEvents() const;
+ virtual void setParent(OOXMLFastContextHandler * pParent);
+ virtual void setId(Id nId);
+ virtual Id getId() const;
+
+ void setDefine(Id nDefine);
+ Id getDefine() const;
+
+ OOXMLParserState::Pointer_t getParserState() const;
+
+ void sendTableDepth() const;
+ void setHandle();
+
+ void startSectionGroup();
+ void setLastParagraphInSection();
+ void endSectionGroup();
+ void startParagraphGroup();
+ void endParagraphGroup();
+ void startCharacterGroup();
+ void endCharacterGroup();
+
+ void startField();
+ void fieldSeparator();
+ void endField();
+ void ftnednref();
+ void ftnedncont();
+ void ftnednsep();
+ void pgNum();
+ void tab();
+ void cr();
+ void noBreakHyphen();
+ void softHyphen();
+ void handleLastParagraphInSection();
+ void endOfParagraph();
+ void text(const ::rtl::OUString & sText);
+ virtual void propagateCharacterProperties();
+ virtual void propagateCharacterPropertiesAsSet(const Id & rId);
+ virtual void propagateTableProperties();
+ virtual void propagateRowProperties();
+ virtual void propagateCellProperties();
+ virtual bool propagatesProperties() const;
+ void sendPropertiesWithId(const Id & rId);
+ void sendPropertiesToParent();
+ void sendCellProperties();
+ void sendRowProperties();
+ void sendTableProperties();
+ void clearTableProps();
+ void clearProps();
+
+ virtual void setDefaultBooleanValue();
+ virtual void setDefaultIntegerValue();
+ virtual void setDefaultHexValue();
+ virtual void setDefaultStringValue();
+
+ void sendPropertyToParent();
+
+#ifdef DEBUG
+ static XMLTag::Pointer_t toPropertiesTag(OOXMLPropertySet::Pointer_t);
+ virtual XMLTag::Pointer_t toTag() const;
+ virtual string toString() const;
+#endif
+
+protected:
+ OOXMLFastContextHandler * mpParent;
+ Id mId;
+ Id mnDefine;
+ Token_t mnToken;
+
+#ifdef DEBUG_CONTEXT_HANDLER
+ string msTokenString;
+#endif
+
+ // the stream to send the stream events to.
+ Stream * mpStream;
+
+ // the current global parser state
+ OOXMLParserState::Pointer_t mpParserState;
+
+ // the table depth of this context
+ unsigned int mnTableDepth;
+
+ virtual void lcl_startFastElement
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler >
+ lcl_createFastChildContext
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_characters(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ void startAction(Token_t Element);
+ virtual void lcl_startAction(Token_t Element);
+ void endAction(Token_t Element);
+ virtual void lcl_endAction(Token_t Element);
+
+
+ // Returns string for resource of this context. (debug)
+ string getResourceString() const;
+
+ virtual OOXMLPropertySet * getPicturePropSet
+ (const ::rtl::OUString & rId);
+ virtual void resolvePropertySetAttrs();
+
+ uno::Reference< uno::XComponentContext > getComponentContext();
+
+ sal_uInt32 mnInstanceNumber;
+ sal_uInt32 mnRefCount;
+private:
+ void operator =(OOXMLFastContextHandler &); // not defined
+
+ uno::Reference< uno::XComponentContext > m_xContext;
+
+ static sal_uInt32 mnInstanceCount;
+
+};
+
+class OOXMLFastContextHandlerStream : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerStream(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerStream();
+
+ virtual ResourceEnum_t getResource() const { return STREAM; }
+
+ OOXMLPropertySet::Pointer_t getPropertySetAttrs() const;
+
+ virtual void newProperty(const Id & rId, OOXMLValue::Pointer_t pVal);
+ virtual void sendProperty(Id nId);
+ virtual OOXMLPropertySet::Pointer_t getPropertySet() const;
+
+ void handleHyperlink();
+
+protected:
+ virtual void resolvePropertySetAttrs();
+ virtual void lcl_characters(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+private:
+ mutable OOXMLPropertySet::Pointer_t mpPropertySetAttrs;
+};
+
+class OOXMLFastContextHandlerProperties : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerProperties(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerProperties();
+
+ virtual OOXMLValue::Pointer_t getValue() const;
+ virtual ResourceEnum_t getResource() const { return PROPERTIES; }
+
+ virtual void newProperty(const Id & nId, OOXMLValue::Pointer_t pVal);
+
+ void handleXNotes();
+ void handleHdrFtr();
+ void handleComment();
+ void handlePicture();
+ void handleBreak();
+ void handleOLE();
+
+ virtual void setPropertySet(OOXMLPropertySet::Pointer_t pPropertySet);
+ virtual OOXMLPropertySet::Pointer_t getPropertySet() const;
+
+#ifdef DEBUG
+ virtual XMLTag::Pointer_t toTag() const;
+#endif
+
+protected:
+ /// the properties
+ OOXMLPropertySet::Pointer_t mpPropertySet;
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void setParent(OOXMLFastContextHandler * pParent);
+
+private:
+
+ bool mbResolve;
+};
+
+class OOXMLFastContextHandlerPropertyTable :
+ public OOXMLFastContextHandlerProperties
+{
+public:
+ OOXMLFastContextHandlerPropertyTable(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerPropertyTable();
+
+protected:
+ OOXMLTableImpl mTable;
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ };
+
+class OOXMLFastContextHandlerValue :
+ public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerValue
+ (OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerValue();
+
+ virtual void setValue(OOXMLValue::Pointer_t pValue);
+ virtual OOXMLValue::Pointer_t getValue() const;
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual string getType() const { return "Value"; }
+
+ virtual void setDefaultBooleanValue();
+ virtual void setDefaultIntegerValue();
+ virtual void setDefaultHexValue();
+ virtual void setDefaultStringValue();
+
+protected:
+ OOXMLValue::Pointer_t mpValue;
+};
+
+class OOXMLFastContextHandlerTable : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerTable(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerTable();
+
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createFastChildContext
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void newPropertySet(OOXMLPropertySet::Pointer_t pPropertySet);
+protected:
+ OOXMLTableImpl mTable;
+
+ RefAndPointer_t mCurrentChild;
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual ResourceEnum_t getResource() const { return TABLE; }
+
+ virtual string getType() const { return "Table"; }
+
+ void addCurrentChild();
+};
+
+class OOXMLFastContextHandlerXNote : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerXNote(OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerXNote();
+
+ void checkId(OOXMLValue::Pointer_t pValue);
+
+ virtual string getType() const { return "XNote"; }
+
+private:
+ bool mbForwardEventsSaved;
+ ::rtl::OUString msMyXNoteId;
+
+ virtual void lcl_startFastElement
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual ResourceEnum_t getResource() const { return STREAM; }
+};
+
+class OOXMLFastContextHandlerTextTableCell : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerTextTableCell
+ (OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerTextTableCell();
+
+ virtual string getType() const { return "TextTableCell"; }
+
+ void startCell();
+ void endCell();
+};
+
+class OOXMLFastContextHandlerTextTableRow : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerTextTableRow
+ (OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerTextTableRow();
+
+ virtual string getType() const { return "TextTableRow"; }
+
+ void startRow();
+ void endRow();
+};
+
+class OOXMLFastContextHandlerTextTable : public OOXMLFastContextHandler
+{
+public:
+ OOXMLFastContextHandlerTextTable
+ (OOXMLFastContextHandler * pContext);
+
+ virtual ~OOXMLFastContextHandlerTextTable();
+
+ virtual string getType() const { return "TextTable"; }
+
+protected:
+ virtual void lcl_startFastElement
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+};
+
+class OOXMLFastContextHandlerShape: public OOXMLFastContextHandlerProperties
+{
+private:
+ bool m_bShapeSent;
+ bool m_bShapeStarted;
+
+public:
+ explicit OOXMLFastContextHandlerShape
+ (OOXMLFastContextHandler * pContext);
+ virtual ~OOXMLFastContextHandlerShape();
+
+ virtual string getType() const { return "Shape"; }
+
+ // ::com::sun::star::xml::sax::XFastContextHandler:
+ virtual void SAL_CALL startUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void SAL_CALL endUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createUnknownChildContext
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void setToken(Token_t nToken);
+
+ virtual ResourceEnum_t getResource() const { return SHAPE; }
+
+ void sendShape( Token_t Element );
+
+protected:
+ typedef uno::Reference<XFastShapeContextHandler> ShapeContextRef;
+ ShapeContextRef mrShapeContext;
+
+ virtual void lcl_startFastElement
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler >
+ lcl_createFastChildContext
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_characters(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+};
+
+/**
+ OOXMLFastContextHandlerWrapper wraps an OOXMLFastContextHandler.
+
+ The method calls for the interface
+ ::com::sun::star::xml::sax::XFastContextHandler are forwarded to the wrapped
+ OOXMLFastContextHandler.
+ */
+class OOXMLFastContextHandlerWrapper : public OOXMLFastContextHandler
+{
+public:
+ explicit OOXMLFastContextHandlerWrapper
+ (OOXMLFastContextHandler * pParent,
+ uno::Reference<XFastContextHandler> xContext);
+ virtual ~OOXMLFastContextHandlerWrapper();
+
+ // ::com::sun::star::xml::sax::XFastContextHandler:
+ virtual void SAL_CALL startUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void SAL_CALL endUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createUnknownChildContext
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void attributes
+ (const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual ResourceEnum_t getResource() const;
+
+ void addNamespace(const Id & nId);
+ void addToken( Token_t Element );
+
+ virtual void newProperty(const Id & rId, OOXMLValue::Pointer_t pVal);
+ virtual void setPropertySet(OOXMLPropertySet::Pointer_t pPropertySet);
+ virtual OOXMLPropertySet::Pointer_t getPropertySet() const;
+
+ virtual string getType() const;
+
+protected:
+ virtual void lcl_startFastElement
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_endFastElement(Token_t Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual uno::Reference< xml::sax::XFastContextHandler >
+ lcl_createFastChildContext
+ (Token_t Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void lcl_characters(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ virtual void setId(Id nId);
+ virtual Id getId() const;
+
+ virtual void setToken(Token_t nToken);
+ virtual Token_t getToken() const;
+
+private:
+ uno::Reference<XFastContextHandler> mxContext;
+ set<Id> mMyNamespaces;
+ set<Token_t> mMyTokens;
+ OOXMLPropertySet::Pointer_t mpPropertySet;
+
+ OOXMLFastContextHandler * getFastContextHandler() const;
+};
+}}
+#endif // INCLUDED_OOXML_FAST_CONTEXT_HANDLER_HXX
diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
new file mode 100644
index 000000000000..83c568dfba50
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.cxx
@@ -0,0 +1,230 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <iostream>
+#include <boost/shared_ptr.hpp>
+#ifdef DEBUG_ELEMENT
+#include "ooxmlLoggers.hxx"
+#include <resourcemodel/Protocol.hxx>
+#endif
+#include "OOXMLFastDocumentHandler.hxx"
+#include "OOXMLFastContextHandler.hxx"
+#include "OOXMLFastTokens.hxx"
+#include "OOXMLFactory.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+using namespace ::com::sun::star;
+using namespace ::std;
+
+
+OOXMLFastDocumentHandler::OOXMLFastDocumentHandler
+(uno::Reference< uno::XComponentContext > const & context)
+: m_xContext(context)
+{}
+
+// ::com::sun::star::xml::sax::XFastContextHandler:
+void SAL_CALL OOXMLFastDocumentHandler::startFastElement
+(::sal_Int32
+#ifdef DEBUG_CONTEXT_STACK
+Element
+#endif
+, const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ clog << this << ":start element:"
+ << fastTokenToId(Element)
+ << endl;
+#endif
+}
+
+void SAL_CALL OOXMLFastDocumentHandler::startUnknownElement
+(const ::rtl::OUString &
+#ifdef DEBUG_CONTEXT_STACK
+Namespace
+#endif
+, const ::rtl::OUString &
+#ifdef DEBUG_CONTEXT_STACK
+Name
+#endif
+,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ clog << this << ":start unknown element:"
+ << OUStringToOString(Namespace, RTL_TEXTENCODING_ASCII_US).getStr()
+ << ":"
+ << OUStringToOString(Name, RTL_TEXTENCODING_ASCII_US).getStr()
+ << endl;
+#endif
+}
+
+void SAL_CALL OOXMLFastDocumentHandler::endFastElement(::sal_Int32
+#ifdef DEBUG_CONTEXT_STACK
+Element
+#endif
+)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ clog << this << ":end element:"
+ << fastTokenToId(Element)
+ << endl;
+#endif
+}
+
+void SAL_CALL OOXMLFastDocumentHandler::endUnknownElement
+(const ::rtl::OUString &
+#ifdef DEBUG_CONTEXT_STACK
+Namespace
+#endif
+, const ::rtl::OUString &
+#ifdef DEBUG_CONTEXT_STACK
+Name
+#endif
+)
+throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ clog << this << ":end unknown element:"
+ << OUStringToOString(Namespace, RTL_TEXTENCODING_ASCII_US).getStr()
+ << ":"
+ << OUStringToOString(Name, RTL_TEXTENCODING_ASCII_US).getStr()
+ << endl;
+#endif
+}
+
+OOXMLFastContextHandler::Pointer_t
+OOXMLFastDocumentHandler::getContextHandler() const
+{
+ if (mpContextHandler == OOXMLFastContextHandler::Pointer_t())
+ {
+ mpContextHandler.reset
+ (new OOXMLFastContextHandler(m_xContext));
+ mpContextHandler->setStream(mpStream);
+ mpContextHandler->setDocument(mpDocument);
+ mpContextHandler->setXNoteId(msXNoteId);
+ mpContextHandler->setForwardEvents(true);
+ }
+
+ return mpContextHandler;
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ OOXMLFastDocumentHandler::createFastChildContext
+(::sal_Int32 Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ clog << this << ":createFastChildContext:"
+ << fastTokenToId(Element)
+ << endl;
+#endif
+
+ return OOXMLFactory::getInstance()->createFastChildContextFromStart(getContextHandler().get(), Element);
+}
+
+uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+OOXMLFastDocumentHandler::createUnknownChildContext
+(const ::rtl::OUString &
+#ifdef DEBUG_CONTEXT_STACK
+Namespace
+#endif
+,
+ const ::rtl::OUString &
+#ifdef DEBUG_CONTEXT_STACK
+Name
+#endif
+, const uno::Reference< xml::sax::XFastAttributeList > & /*Attribs*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+#ifdef DEBUG_CONTEXT_STACK
+ clog << this << ":createUnknownChildContext:"
+ << OUStringToOString(Namespace, RTL_TEXTENCODING_ASCII_US).getStr()
+ << ":"
+ << OUStringToOString(Name, RTL_TEXTENCODING_ASCII_US).getStr()
+ << endl;
+#endif
+
+ return uno::Reference< xml::sax::XFastContextHandler >
+ (new OOXMLFastDocumentHandler(m_xContext));
+}
+
+void SAL_CALL OOXMLFastDocumentHandler::characters(const ::rtl::OUString & /*aChars*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ // TODO: Insert your implementation for "characters" here.
+}
+
+// ::com::sun::star::xml::sax::XFastDocumentHandler:
+void SAL_CALL OOXMLFastDocumentHandler::startDocument()
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+}
+
+void SAL_CALL OOXMLFastDocumentHandler::endDocument()
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+}
+
+void SAL_CALL OOXMLFastDocumentHandler::setDocumentLocator
+(const uno::Reference< xml::sax::XLocator > & /*xLocator*/)
+ throw (uno::RuntimeException, xml::sax::SAXException)
+{
+ // TODO: Insert your implementation for "setDocumentLocator" here.
+}
+
+void OOXMLFastDocumentHandler::setStream(Stream * pStream)
+{
+#ifdef DEBUG_PROTOCOL
+ mpTmpStream.reset(new StreamProtocol(pStream, debug_logger));
+ mpStream = mpTmpStream.get();
+#else
+ mpStream = pStream;
+#endif
+}
+
+void OOXMLFastDocumentHandler::setDocument(OOXMLDocument * pDocument)
+{
+ mpDocument = pDocument;
+}
+
+void OOXMLFastDocumentHandler::setXNoteId(const ::rtl::OUString & rXNoteId)
+{
+ msXNoteId = rXNoteId;
+}
+
+void OOXMLFastDocumentHandler::setIsSubstream( bool bSubstream )
+{
+ getContextHandler( )->getParserState( )->setInSectionGroup( bSubstream );
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
new file mode 100644
index 000000000000..ca322e0c2098
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastDocumentHandler.hxx
@@ -0,0 +1,117 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_OOXML_FAST_DOCUMENT_HANDLER_HXX
+#define INCLUDED_OOXML_FAST_DOCUMENT_HANDLER_HXX
+
+#include <sal/config.h>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/xml/sax/XFastDocumentHandler.hpp>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <ooxml/OOXMLDocument.hxx>
+#include "OOXMLParserState.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+using namespace ::com::sun::star;
+
+class OOXMLFastContextHandler;
+
+class OOXMLFastDocumentHandler:
+ public ::cppu::WeakImplHelper1<
+ xml::sax::XFastDocumentHandler>
+{
+public:
+ OOXMLFastDocumentHandler
+ (uno::Reference< uno::XComponentContext > const & context);
+ virtual ~OOXMLFastDocumentHandler() {}
+
+ // ::com::sun::star::xml::sax::XFastDocumentHandler:
+ virtual void SAL_CALL startDocument()
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void SAL_CALL endDocument()
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void SAL_CALL setDocumentLocator
+ (const uno::Reference< xml::sax::XLocator > & xLocator)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ // ::com::sun::star::xml::sax::XFastContextHandler:
+ virtual void SAL_CALL startFastElement
+ (::sal_Int32 Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void SAL_CALL startUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void SAL_CALL endFastElement(::sal_Int32 Element)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void SAL_CALL endUnknownElement
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createFastChildContext
+ (::sal_Int32 Element,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual uno::Reference< xml::sax::XFastContextHandler > SAL_CALL
+ createUnknownChildContext
+ (const ::rtl::OUString & Namespace,
+ const ::rtl::OUString & Name,
+ const uno::Reference< xml::sax::XFastAttributeList > & Attribs)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+ virtual void SAL_CALL characters(const ::rtl::OUString & aChars)
+ throw (uno::RuntimeException, xml::sax::SAXException);
+
+ void setStream(Stream * pStream);
+ void setDocument(OOXMLDocument * pDocument);
+ void setXNoteId(const ::rtl::OUString & rXNoteId);
+
+ void setIsSubstream( bool bSubstream );
+
+private:
+ OOXMLFastDocumentHandler(OOXMLFastDocumentHandler &); // not defined
+ void operator =(OOXMLFastDocumentHandler &); // not defined
+
+ uno::Reference< uno::XComponentContext > m_xContext;
+
+ Stream * mpStream;
+#ifdef DEBUG_ELEMENT
+ Stream::Pointer_t mpTmpStream;
+#endif
+ OOXMLDocument * mpDocument;
+ ::rtl::OUString msXNoteId;
+ mutable boost::shared_ptr<OOXMLFastContextHandler> mpContextHandler;
+ boost::shared_ptr<OOXMLFastContextHandler> getContextHandler() const;
+};
+}}
+
+#endif // INCLUDED_OOXML_FAST_DOCUMENT_HANDLER_HXX
diff --git a/writerfilter/source/ooxml/OOXMLFastHelper.hxx b/writerfilter/source/ooxml/OOXMLFastHelper.hxx
new file mode 100644
index 000000000000..961b4660f036
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastHelper.hxx
@@ -0,0 +1,254 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_FAST_HELPER_HXX
+#define INCLUDED_FAST_HELPER_HXX
+
+#include <iostream>
+#include <resourcemodel/QNameToString.hxx>
+#include "OOXMLFastContextHandler.hxx"
+#include "ooxmlLoggers.hxx"
+namespace writerfilter {
+
+namespace ooxml
+{
+using namespace ::std;
+using namespace ::com::sun::star;
+using namespace ::com::sun::star::xml::sax;
+
+template <class T>
+class OOXMLFastHelper
+{
+public:
+ static uno::Reference<XFastContextHandler> createAndSetParent
+ (OOXMLFastContextHandler * pHandler, sal_uInt32 nToken, Id nId);
+
+ static uno::Reference<XFastContextHandler> createAndSetParentAndDefine
+ (OOXMLFastContextHandler * pHandler, sal_uInt32 nToken, Id nId, Id nDefine);
+
+ static uno::Reference<XFastContextHandler> createAndSetParentRef
+ (OOXMLFastContextHandler * pHandler, sal_uInt32 nToken,
+ const uno::Reference < xml::sax::XFastAttributeList > & Attribs);
+
+ static void newProperty(OOXMLFastContextHandler * pHandler,
+ Id nId,
+ const ::rtl::OUString & rValue);
+
+ static void newProperty(OOXMLFastContextHandler * pHandler,
+ Id nId, sal_Int32 nValue);
+
+ static void mark(OOXMLFastContextHandler * pHandler,
+ Id nId,
+ const ::rtl::OUString & rValue);
+
+ static void attributes
+ (OOXMLFastContextHandler * pContext,
+ const uno::Reference < xml::sax::XFastAttributeList > & Attribs);
+};
+
+template <class T>
+uno::Reference<XFastContextHandler>
+OOXMLFastHelper<T>::createAndSetParent
+(OOXMLFastContextHandler * pHandler, sal_uInt32 nToken, Id nId)
+{
+#ifdef DEBUG_HELPER
+ debug_logger->startElement("helper.createAndSetParent");
+ debug_logger->attribute("context", pHandler->getType());
+ debug_logger->attribute("id", (*QNameToString::Instance())(nId));
+#endif
+
+ OOXMLFastContextHandler * pTmp = new T(pHandler);
+
+ pTmp->setToken(nToken);
+ pTmp->setId(nId);
+
+#ifdef DEBUG_CREATE
+ debug_logger->startElement("createAndSetParent");
+ debug_logger->attribute("context", pHandler->getType());
+ debug_logger->attribute("token", fastTokenToId(pTmp->getToken()));
+ debug_logger->attribute("id", (*QNameToString::Instance())(nId));
+
+ debug_logger->startElement("created");
+ debug_logger->addTag(pTmp->toTag());
+ debug_logger->endElement("created");
+ debug_logger->endElement("helper.createAndSetParent");
+#endif
+
+ uno::Reference<XFastContextHandler> aResult(pTmp);
+
+ return aResult;
+}
+
+template <class T>
+uno::Reference<XFastContextHandler>
+OOXMLFastHelper<T>::createAndSetParentAndDefine
+(OOXMLFastContextHandler * pHandler, sal_uInt32 nToken, Id nId, Id nDefine)
+{
+#ifdef DEBUG_HELPER
+ debug_logger->startElement("helper.createAndSetParentAndDefine");
+ debug_logger->attribute("context", pHandler->getType());
+ debug_logger->attribute("id", (*QNameToString::Instance())(nId));
+
+ static char buffer[16];
+ snprintf(buffer, sizeof(buffer), "0x%08" SAL_PRIxUINT32, nId);
+
+ debug_logger->attribute("idnum", buffer);
+#endif
+
+ OOXMLFastContextHandler * pTmp = new T(pHandler);
+
+ pTmp->setToken(nToken);
+ pTmp->setId(nId);
+ pTmp->setDefine(nDefine);
+
+
+#ifdef DEBUG_HELPER
+ debug_logger->startElement("created");
+ debug_logger->addTag(pTmp->toTag());
+ debug_logger->endElement("created");
+ debug_logger->endElement("helper.createAndSetParentAndDefine");
+#endif
+
+ uno::Reference<XFastContextHandler> aResult(pTmp);
+
+ return aResult;
+}
+
+template <class T>
+uno::Reference<XFastContextHandler>
+OOXMLFastHelper<T>::createAndSetParentRef
+(OOXMLFastContextHandler * pHandler, sal_uInt32 nToken,
+ const uno::Reference < xml::sax::XFastAttributeList > & Attribs)
+{
+#ifdef DEBUG_HELPER
+ debug_logger->startElement("helper.createAndSetParentRef");
+ debug_logger->attribute("context", pHandler->getType());
+ debug_logger->attribute("type", fastTokenToId(nToken));
+#endif
+
+ boost::shared_ptr<OOXMLFastContextHandler> pTmp(new T(pHandler));
+
+ uno::Reference<XFastContextHandler> xChild =
+ pTmp->createFastChildContext(nToken, Attribs);
+
+ OOXMLFastContextHandler * pResult = NULL;
+ if (xChild.is())
+ {
+ pResult = dynamic_cast<OOXMLFastContextHandler *>(xChild.get());
+ pResult->setToken(nToken);
+ pResult->setParent(pHandler);
+ }
+
+
+#ifdef DEBUG_HELPER
+ debug_logger->startElement("created");
+ debug_logger->addTag(pTmp->toTag());
+ debug_logger->endElement("created");
+ debug_logger->endElement("helper.createAndSetParentRef");
+#endif
+
+ return xChild;
+}
+
+template <class T>
+void OOXMLFastHelper<T>::newProperty(OOXMLFastContextHandler * pHandler,
+ Id nId,
+ const ::rtl::OUString & rValue)
+{
+ OOXMLValue::Pointer_t pVal(new T(rValue));
+
+#ifdef DEBUG_HELPER
+ string aStr = (*QNameToString::Instance())(nId);
+
+ debug_logger->startElement("newProperty-from-string");
+ debug_logger->attribute("name", aStr);
+ debug_logger->attribute
+ ("value",
+ ::rtl::OUStringToOString
+ (rValue, RTL_TEXTENCODING_ASCII_US).getStr());
+
+ if (aStr.size() == 0)
+ debug_logger->addTag(XMLTag::Pointer_t(new XMLTag("unknown-qname")));
+#endif
+
+ pHandler->newProperty(nId, pVal);
+
+#ifdef DEBUG_HELPER
+ debug_logger->endElement("newProperty-from-string");
+#endif
+
+}
+
+template <class T>
+void OOXMLFastHelper<T>::newProperty(OOXMLFastContextHandler * pHandler,
+ Id nId,
+ sal_Int32 nVal)
+{
+ OOXMLValue::Pointer_t pVal(new T(nVal));
+
+#ifdef DEBUG_HELPER
+ string aStr = (*QNameToString::Instance())(nId);
+
+ debug_logger->startElement("helper.newProperty-from-int");
+ debug_logger->attribute("name", aStr);
+ debug_logger->attribute("value", pVal->toString());
+
+ if (aStr.size() == 0)
+ debug_logger->addTag(XMLTag::Pointer_t(new XMLTag("unknown-qname")));
+
+ debug_logger->endElement("helper.newProperty-from-int");
+#endif
+
+ pHandler->newProperty(nId, pVal);
+}
+
+template <class T>
+void OOXMLFastHelper<T>::mark(OOXMLFastContextHandler * pHandler,
+ Id nId,
+ const ::rtl::OUString & rValue)
+{
+ OOXMLValue::Pointer_t pVal(new T(rValue));
+
+ string aStr = (*QNameToString::Instance())(nId);
+
+#ifdef DEBUG_HELPER
+ debug_logger->startElement("helper.mark");
+ debug_logger->attribute("name", aStr);
+ debug_logger->attribute
+ ("value",
+ ::rtl::OUStringToOString
+ (rValue, RTL_TEXTENCODING_ASCII_US).getStr());
+
+ if (aStr.size() == 0)
+ debug_logger->addTag(XMLTag::Pointer_t(new XMLTag("unknown-qname")));
+
+ debug_logger->endElement("helper.mark");
+#endif
+
+ pHandler->mark(nId, pVal);
+}
+}}
+#endif // INCLUDED_FAST_HELPER_HXX
diff --git a/writerfilter/source/ooxml/OOXMLFastTokenHandler.cxx b/writerfilter/source/ooxml/OOXMLFastTokenHandler.cxx
new file mode 100644
index 000000000000..bb44111195d2
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastTokenHandler.cxx
@@ -0,0 +1,119 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <iostream>
+#include <string.h>
+#include <ooxml/resourceids.hxx>
+#include "OOXMLFastTokenHandler.hxx"
+#include "gperffasttoken.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+
+using namespace ::std;
+
+OOXMLFastTokenHandler::OOXMLFastTokenHandler
+(css::uno::Reference< css::uno::XComponentContext > const & context)
+: m_xContext(context)
+{}
+
+// ::com::sun::star::xml::sax::XFastTokenHandler:
+::sal_Int32 SAL_CALL OOXMLFastTokenHandler::getToken(const ::rtl::OUString & Identifier)
+ throw (css::uno::RuntimeException)
+{
+ ::sal_Int32 nResult = OOXML_FAST_TOKENS_END;
+
+ struct tokenmap::token * pToken =
+ tokenmap::Perfect_Hash::in_word_set
+ (OUStringToOString(Identifier, RTL_TEXTENCODING_ASCII_US).getStr(),
+ Identifier.getLength());
+
+ if (pToken != NULL)
+ nResult = pToken->nToken;
+
+#ifdef DEBUG_TOKEN
+ clog << "getToken: "
+ << OUStringToOString(Identifier, RTL_TEXTENCODING_ASCII_US).getStr()
+ << ", " << nResult
+ << endl;
+#endif
+
+ return nResult;
+}
+
+::rtl::OUString SAL_CALL OOXMLFastTokenHandler::getIdentifier(::sal_Int32 Token)
+ throw (css::uno::RuntimeException)
+{
+ ::rtl::OUString sResult;
+
+ if ( Token >= 0 || Token < OOXML_FAST_TOKENS_END )
+ {
+ static ::rtl::OUString aTokens[OOXML_FAST_TOKENS_END];
+
+ if (aTokens[Token].getLength() == 0)
+ aTokens[Token] = ::rtl::OUString::createFromAscii
+ (tokenmap::wordlist[Token].name);
+ }
+
+ return sResult;
+}
+
+css::uno::Sequence< ::sal_Int8 > SAL_CALL OOXMLFastTokenHandler::getUTF8Identifier(::sal_Int32 Token)
+ throw (css::uno::RuntimeException)
+{
+ if ( Token < 0 || Token >= OOXML_FAST_TOKENS_END )
+ return css::uno::Sequence< ::sal_Int8 >();
+
+ return css::uno::Sequence< ::sal_Int8 >(reinterpret_cast< const sal_Int8 *>(tokenmap::wordlist[Token].name), strlen(tokenmap::wordlist[Token].name));
+}
+
+::sal_Int32 SAL_CALL OOXMLFastTokenHandler::getTokenFromUTF8
+(const css::uno::Sequence< ::sal_Int8 > & Identifier) throw (css::uno::RuntimeException)
+{
+ ::sal_Int32 nResult = OOXML_FAST_TOKENS_END;
+
+ struct tokenmap::token * pToken =
+ tokenmap::Perfect_Hash::in_word_set
+ (reinterpret_cast<const char *>(Identifier.getConstArray()),
+ Identifier.getLength());
+
+ if (pToken != NULL)
+ nResult = pToken->nToken;
+
+#ifdef DEBUG_TOKEN
+ clog << "getTokenFromUTF8: "
+ << string(reinterpret_cast<const char *>
+ (Identifier.getConstArray()), Identifier.getLength())
+ << ", " << nResult
+ << (pToken == NULL ? ", failed" : "") << endl;
+#endif
+
+ return nResult;
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLFastTokenHandler.hxx b/writerfilter/source/ooxml/OOXMLFastTokenHandler.hxx
new file mode 100644
index 000000000000..5debd7224cb9
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLFastTokenHandler.hxx
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_OOXML_FAST_TOKEN_HANDLER_HXX
+#define INCLUDED_OOXML_FAST_TOKEN_HANDLER_HXX
+
+#include "sal/config.h"
+#include "com/sun/star/uno/XComponentContext.hpp"
+#include "cppuhelper/implbase1.hxx"
+#include "com/sun/star/xml/sax/XFastTokenHandler.hpp"
+
+namespace css = ::com::sun::star;
+
+namespace writerfilter {
+namespace ooxml
+{
+
+class OOXMLFastTokenHandler:
+ public ::cppu::WeakImplHelper1<
+ css::xml::sax::XFastTokenHandler>
+{
+public:
+ explicit OOXMLFastTokenHandler(css::uno::Reference< css::uno::XComponentContext > const & context);
+
+ // ::com::sun::star::xml::sax::XFastTokenHandler:
+ virtual ::sal_Int32 SAL_CALL getToken(const ::rtl::OUString & Identifier) throw (css::uno::RuntimeException);
+ virtual ::rtl::OUString SAL_CALL getIdentifier(::sal_Int32 Token) throw (css::uno::RuntimeException);
+ virtual css::uno::Sequence< ::sal_Int8 > SAL_CALL getUTF8Identifier(::sal_Int32 Token) throw (css::uno::RuntimeException);
+ virtual ::sal_Int32 SAL_CALL getTokenFromUTF8(const css::uno::Sequence< ::sal_Int8 > & Identifier) throw (css::uno::RuntimeException);
+
+private:
+ OOXMLFastTokenHandler(OOXMLFastTokenHandler &); // not defined
+ void operator =(OOXMLFastTokenHandler &); // not defined
+
+ virtual ~OOXMLFastTokenHandler() {}
+
+ css::uno::Reference< css::uno::XComponentContext > m_xContext;
+};
+
+}}
+#endif // INCLUDED_OOXML_FAST_TOKEN_HANDLER_HXX
diff --git a/writerfilter/source/ooxml/OOXMLParserState.cxx b/writerfilter/source/ooxml/OOXMLParserState.cxx
new file mode 100644
index 000000000000..41a3738ee7ab
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLParserState.cxx
@@ -0,0 +1,330 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include <iostream>
+#include "OOXMLParserState.hxx"
+#include "ooxmlLoggers.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+/*
+ class OOXMLParserState
+*/
+
+OOXMLParserState::OOXMLParserState() :
+ mbInSectionGroup(false),
+ mbInParagraphGroup(false),
+ mbInCharacterGroup(false),
+ mbLastParagraphInSection(false),
+ mbForwardEvents(true),
+ mnContexts(0),
+ mnHandle(0),
+ mpDocument(NULL)
+{
+}
+
+OOXMLParserState::~OOXMLParserState()
+{
+}
+
+void OOXMLParserState::setLastParagraphInSection(bool bLastParagraphInSection)
+{
+ mbLastParagraphInSection = bLastParagraphInSection;
+}
+
+bool OOXMLParserState::isLastParagraphInSection() const
+{
+ return mbLastParagraphInSection;
+}
+
+bool OOXMLParserState::isInSectionGroup() const
+{
+ return mbInSectionGroup;
+}
+
+void OOXMLParserState::setInSectionGroup(bool bInSectionGroup)
+{
+ mbInSectionGroup = bInSectionGroup;
+}
+
+bool OOXMLParserState::isInParagraphGroup() const
+{
+ return mbInParagraphGroup;
+}
+
+void OOXMLParserState::setInParagraphGroup(bool bInParagraphGroup)
+{
+ mbInParagraphGroup = bInParagraphGroup;
+}
+
+bool OOXMLParserState::isInCharacterGroup() const
+{
+ return mbInCharacterGroup;
+}
+
+void OOXMLParserState::setInCharacterGroup(bool bInCharacterGroup)
+{
+ mbInCharacterGroup = bInCharacterGroup;
+}
+
+void OOXMLParserState::setForwardEvents(bool bForwardEvents)
+{
+ mbForwardEvents = bForwardEvents;
+}
+
+bool OOXMLParserState::isForwardEvents() const
+{
+ return mbForwardEvents;
+}
+
+const string OOXMLParserState::getHandle() const
+{
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "%d", mnHandle);
+
+ return sBuffer;
+}
+
+void OOXMLParserState::setHandle()
+{
+ mnHandle = mnContexts;
+}
+
+void OOXMLParserState::setDocument(OOXMLDocument * pDocument)
+{
+ mpDocument = pDocument;
+}
+
+OOXMLDocument * OOXMLParserState::getDocument() const
+{
+ return mpDocument;
+}
+
+void OOXMLParserState::setXNoteId(const rtl::OUString & rId)
+{
+ mpDocument->setXNoteId(rId);
+}
+
+const rtl::OUString & OOXMLParserState::getXNoteId() const
+{
+ return mpDocument->getXNoteId();
+}
+
+const ::rtl::OUString & OOXMLParserState::getTarget() const
+{
+ return mpDocument->getTarget();
+}
+
+void OOXMLParserState::resolveCharacterProperties(Stream & rStream)
+{
+ if (mpCharacterProps.get() != NULL)
+ {
+#ifdef DEBUG_PROPERTIES
+ debug_logger->startElement("resolveCharacterProperties");
+#endif
+
+ rStream.props(mpCharacterProps);
+ mpCharacterProps.reset(new OOXMLPropertySetImpl());
+
+#ifdef DEBUG_PROPERTIES
+ debug_logger->endElement("resolveCharacterProperties");
+#endif
+ }
+}
+
+void OOXMLParserState::setCharacterProperties
+(OOXMLPropertySet::Pointer_t pProps)
+{
+ if (mpCharacterProps.get() == NULL)
+ mpCharacterProps = pProps;
+ else
+ mpCharacterProps->add(pProps);
+}
+
+void OOXMLParserState::setCellProperties
+(OOXMLPropertySet::Pointer_t pProps)
+{
+ if (mCellProps.size() > 0)
+ {
+ OOXMLPropertySet::Pointer_t & rCellProps = mCellProps.top();
+
+ if (rCellProps.get() == NULL)
+ rCellProps = pProps;
+ else
+ rCellProps->add(pProps);
+ }
+}
+
+void OOXMLParserState::setRowProperties
+(OOXMLPropertySet::Pointer_t pProps)
+{
+ if (mRowProps.size() > 0)
+ {
+ OOXMLPropertySet::Pointer_t & rRowProps = mRowProps.top();
+
+ if (rRowProps.get() == NULL)
+ rRowProps = pProps;
+ else
+ rRowProps->add(pProps);
+ }
+}
+
+void OOXMLParserState::resolveCellProperties(Stream & rStream)
+{
+ if (mCellProps.size() > 0)
+ {
+ OOXMLPropertySet::Pointer_t & rCellProps = mCellProps.top();
+
+ if (rCellProps.get() != NULL)
+ {
+ rStream.props(rCellProps);
+ rCellProps.reset(new OOXMLPropertySetImpl());
+ }
+ }
+}
+
+void OOXMLParserState::resolveRowProperties(Stream & rStream)
+{
+ if (mRowProps.size() > 0)
+ {
+ OOXMLPropertySet::Pointer_t & rRowProps = mRowProps.top();
+
+ if (rRowProps.get() != NULL)
+ {
+ rStream.props(rRowProps);
+ rRowProps.reset(new OOXMLPropertySetImpl());
+ }
+ }
+}
+
+void OOXMLParserState::resolveTableProperties(Stream & rStream)
+{
+ if (mTableProps.size() > 0)
+ {
+ OOXMLPropertySet::Pointer_t & rTableProps = mTableProps.top();
+
+ if (rTableProps.get() != NULL)
+ {
+ rStream.props(rTableProps);
+ rTableProps.reset(new OOXMLPropertySetImpl());
+ }
+ }
+}
+
+void OOXMLParserState::setTableProperties
+(OOXMLPropertySet::Pointer_t pProps)
+{
+ if (mTableProps.size() > 0)
+ {
+ OOXMLPropertySet::Pointer_t & rTableProps = mTableProps.top();
+ if (rTableProps.get() == NULL)
+ rTableProps = pProps;
+ else
+ rTableProps->add(pProps);
+ }
+}
+
+void OOXMLParserState::startTable()
+{
+ OOXMLPropertySet::Pointer_t pCellProps;
+ OOXMLPropertySet::Pointer_t pRowProps;
+ OOXMLPropertySet::Pointer_t pTableProps;
+
+ mCellProps.push(pCellProps);
+ mRowProps.push(pRowProps);
+ mTableProps.push(pTableProps);
+}
+
+void OOXMLParserState::endTable()
+{
+ mCellProps.pop();
+ mRowProps.pop();
+ mTableProps.pop();
+}
+
+void OOXMLParserState::incContextCount()
+{
+ mnContexts++;
+}
+
+#ifdef DEBUG
+unsigned int OOXMLParserState::getContextCount() const
+{
+ return mnContexts;
+}
+
+string OOXMLParserState::toString() const
+{
+ return toTag()->toString();
+}
+
+XMLTag::Pointer_t OOXMLParserState::toTag() const
+{
+ XMLTag::Pointer_t pTag(new XMLTag("parserstate"));
+
+ string sTmp;
+
+ if (isInSectionGroup())
+ sTmp += "s";
+ else
+ sTmp += "-";
+
+ if (isInParagraphGroup())
+ sTmp += "p";
+ else
+ sTmp += "-";
+
+ if (isInCharacterGroup())
+ sTmp += "c";
+ else
+ sTmp += "-";
+
+ if (isForwardEvents())
+ sTmp += "f";
+ else
+ sTmp += "-";
+
+ pTag->addAttr("state", sTmp);
+ pTag->addAttr("XNoteId",
+ OUStringToOString(getXNoteId(),
+ RTL_TEXTENCODING_ASCII_US).getStr());
+ if (mpCharacterProps != OOXMLPropertySet::Pointer_t())
+ pTag->chars(mpCharacterProps->toString());
+
+ return pTag;
+ }
+
+XPathLogger & OOXMLParserState::getXPathLogger()
+{
+ return m_xPathLogger;
+}
+#endif
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLParserState.hxx b/writerfilter/source/ooxml/OOXMLParserState.hxx
new file mode 100644
index 000000000000..12a9876ce6eb
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLParserState.hxx
@@ -0,0 +1,123 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDE_OOXML_PARSER_STATE_HXX
+#define INCLUDE_OOXML_PARSER_STATE_HXX
+
+#include <stack>
+#include <ooxml/OOXMLDocument.hxx>
+#include "OOXMLPropertySetImpl.hxx"
+
+#ifdef DEBUG
+#include <resourcemodel/TagLogger.hxx>
+#include <resourcemodel/XPathLogger.hxx>
+#endif
+
+namespace writerfilter {
+namespace ooxml
+{
+
+using ::std::stack;
+
+class OOXMLParserState
+{
+ bool mbInSectionGroup;
+ bool mbInParagraphGroup;
+ bool mbInCharacterGroup;
+ bool mbLastParagraphInSection;
+ bool mbForwardEvents;
+ unsigned int mnContexts;
+ unsigned int mnHandle;
+ OOXMLDocument * mpDocument;
+ rtl::OUString msXNoteId;
+ rtl::OUString msTarget;
+ OOXMLPropertySet::Pointer_t mpCharacterProps;
+ stack<OOXMLPropertySet::Pointer_t> mCellProps;
+ stack<OOXMLPropertySet::Pointer_t> mRowProps;
+ stack<OOXMLPropertySet::Pointer_t> mTableProps;
+#ifdef DEBUG
+ XPathLogger m_xPathLogger;
+#endif
+
+public:
+ typedef boost::shared_ptr<OOXMLParserState> Pointer_t;
+
+ OOXMLParserState();
+ virtual ~OOXMLParserState();
+
+ bool isInSectionGroup() const;
+ void setInSectionGroup(bool bInSectionGroup);
+
+ void setLastParagraphInSection(bool bLastParagraphInSection);
+ bool isLastParagraphInSection() const;
+
+ bool isInParagraphGroup() const;
+ void setInParagraphGroup(bool bInParagraphGroup);
+
+ bool isInCharacterGroup() const;
+ void setInCharacterGroup(bool bInCharacterGroup);
+
+ void setForwardEvents(bool bForwardEvents);
+ bool isForwardEvents() const;
+
+ const string getHandle() const;
+ void setHandle();
+
+ void setDocument(OOXMLDocument * pDocument);
+ OOXMLDocument * getDocument() const;
+
+ void setXNoteId(const rtl::OUString & rId);
+ const rtl::OUString & getXNoteId() const;
+
+ const rtl::OUString & getTarget() const;
+
+ void resolveCharacterProperties(Stream & rStream);
+ void setCharacterProperties(OOXMLPropertySet::Pointer_t pProps);
+ void resolveCellProperties(Stream & rStream);
+ void setCellProperties(OOXMLPropertySet::Pointer_t pProps);
+ void resolveRowProperties(Stream & rStream);
+ void setRowProperties(OOXMLPropertySet::Pointer_t pProps);
+ void resolveTableProperties(Stream & rStream);
+ void setTableProperties(OOXMLPropertySet::Pointer_t pProps);
+
+ void startTable();
+ void endTable();
+
+ void incContextCount();
+
+#ifdef DEBUG
+public:
+ unsigned int getContextCount() const;
+ string toString() const;
+ XMLTag::Pointer_t toTag() const;
+ XPathLogger & getXPathLogger();
+#endif
+
+};
+
+}}
+
+#endif // INCLUDE_OOXML_PARSER_STATE_HXX
diff --git a/writerfilter/source/ooxml/OOXMLPropertySet.hxx b/writerfilter/source/ooxml/OOXMLPropertySet.hxx
new file mode 100644
index 000000000000..d448b58cc304
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLPropertySet.hxx
@@ -0,0 +1,82 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OOXML_PROPERTY_SET_HXX
+#define INCLUDED_OOXML_PROPERTY_SET_HXX
+
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+namespace writerfilter {
+namespace ooxml
+{
+
+class OOXMLProperty : public Sprm
+{
+public:
+ typedef boost::shared_ptr<OOXMLProperty> Pointer_t;
+
+ virtual ~OOXMLProperty();
+
+ virtual sal_uInt32 getId() const = 0;
+ virtual Value::Pointer_t getValue() = 0;
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary() = 0;
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream() = 0;
+ virtual writerfilter::Reference<Properties>::Pointer_t getProps() = 0;
+ virtual string getName() const = 0;
+ virtual string toString() const = 0;
+ virtual void resolve(Properties & rProperties) = 0;
+
+ virtual Sprm * clone() = 0;
+};
+
+class OOXMLPropertySet : public writerfilter::Reference<Properties>
+{
+public:
+ typedef boost::shared_ptr<OOXMLPropertySet> Pointer_t;
+
+ virtual ~OOXMLPropertySet();
+
+ virtual void resolve(Properties & rHandler) = 0;
+ virtual string getType() const = 0;
+ virtual void add(OOXMLProperty::Pointer_t pProperty) = 0;
+ virtual void add(OOXMLPropertySet::Pointer_t pPropertySet) = 0;
+ virtual OOXMLPropertySet * clone() const = 0;
+ virtual void setType(const string & rsType) = 0;
+
+ virtual string toString() = 0;
+};
+
+class OOXMLTable : public writerfilter::Reference<Table>
+{
+public:
+ virtual ~OOXMLTable();
+
+ virtual void resolve(Table & rTable) = 0;
+ virtual OOXMLTable * clone() const = 0;
+};
+}}
+
+#endif // INCLUDED_OOXML_PROPERTY_SET_HXX
diff --git a/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx b/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
new file mode 100644
index 000000000000..6e0bcaf763cd
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLPropertySetImpl.cxx
@@ -0,0 +1,797 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "OOXMLPropertySetImpl.hxx"
+#include <stdio.h>
+#include <iostream>
+#include <resourcemodel/QNameToString.hxx>
+#include <resourcemodel/Protocol.hxx>
+#include <com/sun/star/drawing/XShape.hpp>
+#include <ooxml/OOXMLFastTokens.hxx>
+#include "ooxmlLoggers.hxx"
+
+namespace writerfilter {
+namespace ooxml
+{
+using namespace ::std;
+
+static ::rtl::OUString strue(RTL_CONSTASCII_USTRINGPARAM("true"));
+static ::rtl::OUString sTrue(RTL_CONSTASCII_USTRINGPARAM("True"));
+static ::rtl::OUString s1(RTL_CONSTASCII_USTRINGPARAM("1"));
+static ::rtl::OUString sOn(RTL_CONSTASCII_USTRINGPARAM("On"));
+static ::rtl::OUString son(RTL_CONSTASCII_USTRINGPARAM("on"));
+
+OOXMLProperty::~OOXMLProperty()
+{
+}
+
+OOXMLPropertySet::~OOXMLPropertySet()
+{
+}
+
+OOXMLTable::~OOXMLTable()
+{
+}
+
+OOXMLPropertyImpl::OOXMLPropertyImpl(Id id, OOXMLValue::Pointer_t pValue,
+ OOXMLPropertyImpl::Type_t eType)
+: mId(id), mpValue(pValue), meType(eType)
+{
+}
+
+OOXMLPropertyImpl::OOXMLPropertyImpl(const OOXMLPropertyImpl & rSprm)
+: OOXMLProperty(), mId(rSprm.mId), mpValue(rSprm.mpValue), meType(rSprm.meType)
+{
+}
+
+OOXMLPropertyImpl::~OOXMLPropertyImpl()
+{
+}
+
+sal_uInt32 OOXMLPropertyImpl::getId() const
+{
+ return mId;
+}
+
+Value::Pointer_t OOXMLPropertyImpl::getValue()
+{
+ Value::Pointer_t pResult;
+
+ if (mpValue.get() != NULL)
+ pResult = Value::Pointer_t(mpValue->clone());
+ else
+ pResult = Value::Pointer_t(new OOXMLValue());
+
+ return pResult;
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t OOXMLPropertyImpl::getBinary()
+{
+ writerfilter::Reference<BinaryObj>::Pointer_t pResult;
+
+ if (mpValue.get() != NULL)
+ pResult = mpValue->getBinary();
+
+ return pResult;
+}
+
+writerfilter::Reference<Stream>::Pointer_t OOXMLPropertyImpl::getStream()
+{
+ writerfilter::Reference<Stream>::Pointer_t pResult;
+
+ if (mpValue.get() != NULL)
+ pResult = mpValue->getStream();
+
+ return pResult;
+}
+
+writerfilter::Reference<Properties>::Pointer_t OOXMLPropertyImpl::getProps()
+{
+ writerfilter::Reference<Properties>::Pointer_t pResult;
+
+ if (mpValue.get() != NULL)
+ pResult = mpValue->getProperties();
+
+ return pResult;
+}
+
+string OOXMLPropertyImpl::getName() const
+{
+ string sResult = (*QNameToString::Instance())(mId);
+
+ if (sResult.length() == 0)
+ sResult = (*SprmIdToString::Instance())(mId);
+
+ if (sResult.length() == 0)
+ sResult = fastTokenToId(mId);
+
+ if (sResult.length() == 0)
+ {
+ static char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "%" SAL_PRIxUINT32, mId);
+ sResult = sBuffer;
+ }
+
+ return sResult;
+}
+
+string OOXMLPropertyImpl::toString() const
+{
+ string sResult = "(";
+
+ sResult += getName();
+ sResult += ", ";
+ if (mpValue.get() != NULL)
+ sResult += mpValue->toString();
+ else
+ sResult +="(null)";
+ sResult +=")";
+
+ return sResult;
+}
+
+Sprm::Kind OOXMLPropertyImpl::getKind()
+{
+ return SprmKind(getId());
+}
+
+Sprm * OOXMLPropertyImpl::clone()
+{
+ return new OOXMLPropertyImpl(*this);
+}
+
+void OOXMLPropertyImpl::resolve(writerfilter::Properties & rProperties)
+{
+ writerfilter::Properties * pProperties = NULL;
+#ifdef DEBUG_PROTOCOL
+ writerfilter::PropertiesProtocol::Pointer_t pProtocol
+ (new writerfilter::PropertiesProtocol(&rProperties, debug_logger));
+ pProperties = pProtocol.get();
+#else
+ pProperties = &rProperties;
+#endif
+
+ switch (meType)
+ {
+ case SPRM:
+ if (mId != 0x0)
+ pProperties->sprm(*this);
+ break;
+ case ATTRIBUTE:
+ pProperties->attribute(mId, *getValue());
+ break;
+ }
+}
+
+/*
+ class OOXMLValue
+*/
+
+OOXMLValue::OOXMLValue()
+{
+}
+
+OOXMLValue::~OOXMLValue()
+{
+}
+
+bool OOXMLValue::getBool() const
+{
+ return false;
+}
+
+int OOXMLValue::getInt() const
+{
+ return 0;
+}
+
+::rtl::OUString OOXMLValue::getString() const
+{
+ return ::rtl::OUString();
+}
+
+uno::Any OOXMLValue::getAny() const
+{
+ return uno::Any();
+}
+
+writerfilter::Reference<Properties>::Pointer_t OOXMLValue::getProperties()
+{
+ return writerfilter::Reference<Properties>::Pointer_t();
+}
+
+writerfilter::Reference<Stream>::Pointer_t OOXMLValue::getStream()
+{
+ return writerfilter::Reference<Stream>::Pointer_t();
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t OOXMLValue::getBinary()
+{
+ return writerfilter::Reference<BinaryObj>::Pointer_t();
+}
+
+string OOXMLValue::toString() const
+{
+ return "OOXMLValue";
+}
+
+OOXMLValue * OOXMLValue::clone() const
+{
+ return new OOXMLValue(*this);
+}
+
+/*
+ class OOXMLBinaryValue
+ */
+
+OOXMLBinaryValue::OOXMLBinaryValue(OOXMLBinaryObjectReference::Pointer_t
+ pBinaryObj)
+: mpBinaryObj(pBinaryObj)
+{
+}
+
+OOXMLBinaryValue::~OOXMLBinaryValue()
+{
+}
+
+writerfilter::Reference<BinaryObj>::Pointer_t OOXMLBinaryValue::getBinary()
+{
+ return mpBinaryObj;
+}
+
+string OOXMLBinaryValue::toString() const
+{
+ return "BinaryObj";
+}
+
+OOXMLValue * OOXMLBinaryValue::clone() const
+{
+ return new OOXMLBinaryValue(mpBinaryObj);
+}
+
+/*
+ class OOXMLBooleanValue
+*/
+
+OOXMLBooleanValue::OOXMLBooleanValue(bool bValue)
+: mbValue(bValue)
+{
+}
+
+OOXMLBooleanValue::OOXMLBooleanValue(const rtl::OUString & rValue)
+: mbValue(false)
+{
+ if (strue.compareTo(rValue) == 0
+ || sTrue.compareTo(rValue) == 0
+ || s1.compareTo(rValue) == 0
+ || son.compareTo(rValue) == 0
+ || sOn.compareTo(rValue) == 0)
+ mbValue = true;
+ else
+ mbValue = false;
+}
+
+OOXMLBooleanValue::~OOXMLBooleanValue()
+{
+}
+
+bool OOXMLBooleanValue::getBool() const
+{
+ return mbValue;
+}
+
+int OOXMLBooleanValue::getInt() const
+{
+ return mbValue ? 1 : 0;
+}
+
+uno::Any OOXMLBooleanValue::getAny() const
+{
+ uno::Any aResult(mbValue);
+
+ return aResult;
+}
+
+string OOXMLBooleanValue::toString() const
+{
+ return mbValue ? "true" : "false";
+}
+
+OOXMLValue * OOXMLBooleanValue::clone() const
+{
+ return new OOXMLBooleanValue(*this);
+}
+
+/*
+ class OOXMLStringValue
+*/
+
+OOXMLStringValue::OOXMLStringValue(const rtl::OUString & rStr)
+: mStr(rStr)
+{
+}
+
+OOXMLStringValue::~OOXMLStringValue()
+{
+}
+
+uno::Any OOXMLStringValue::getAny() const
+{
+ uno::Any aAny(mStr);
+
+ return aAny;
+}
+
+rtl::OUString OOXMLStringValue::getString() const
+{
+ return mStr;
+}
+
+string OOXMLStringValue::toString() const
+{
+ return OUStringToOString(mStr, RTL_TEXTENCODING_ASCII_US).getStr();
+}
+
+OOXMLValue * OOXMLStringValue::clone() const
+{
+ return new OOXMLStringValue(*this);
+}
+
+/*
+ class OOXMLInputStreamValue
+ */
+OOXMLInputStreamValue::OOXMLInputStreamValue(uno::Reference<io::XInputStream> xInputStream)
+: mxInputStream(xInputStream)
+{
+}
+
+OOXMLInputStreamValue::~OOXMLInputStreamValue()
+{
+}
+
+uno::Any OOXMLInputStreamValue::getAny() const
+{
+ uno::Any aAny(mxInputStream);
+
+ return aAny;
+}
+
+string OOXMLInputStreamValue::toString() const
+{
+ return "InputStream";
+}
+
+OOXMLValue * OOXMLInputStreamValue::clone() const
+{
+ return new OOXMLInputStreamValue(mxInputStream);
+}
+
+/*
+ struct OOXMLPropertySetImplCompare
+ */
+
+bool OOXMLPropertySetImplCompare::operator()(const OOXMLProperty::Pointer_t x,
+ const OOXMLProperty::Pointer_t y) const
+{
+ bool bResult = false;
+
+ if (x.get() == NULL && y.get() != NULL)
+ bResult = true;
+ else if (x.get() != NULL && y.get() != NULL)
+ bResult = x->getId() < y->getId();
+
+ return bResult;
+}
+
+/**
+ class OOXMLPropertySetImpl
+*/
+
+OOXMLPropertySetImpl::OOXMLPropertySetImpl()
+: msType("OOXMLPropertySetImpl")
+{
+}
+
+OOXMLPropertySetImpl::~OOXMLPropertySetImpl()
+{
+}
+
+void OOXMLPropertySetImpl::resolve(Properties & rHandler)
+{
+ OOXMLProperties_t::iterator aIt = begin();
+ while (aIt != end())
+ {
+ OOXMLProperty::Pointer_t pProp = *aIt;
+
+ if (pProp.get() != NULL)
+ pProp->resolve(rHandler);
+#ifdef DEBUG_RESOLVE
+ else
+ {
+ debug_logger->startElement("error");
+ debug_logger->chars("zero-property");
+ debug_logger->endElement("error");
+ }
+#endif
+
+ aIt++;
+ }
+}
+
+OOXMLPropertySetImpl::OOXMLProperties_t::iterator OOXMLPropertySetImpl::begin()
+{
+ return mProperties.begin();
+}
+
+OOXMLPropertySetImpl::OOXMLProperties_t::iterator OOXMLPropertySetImpl::end()
+{
+ return mProperties.end();
+}
+
+OOXMLPropertySetImpl::OOXMLProperties_t::const_iterator
+OOXMLPropertySetImpl::begin() const
+{
+ return mProperties.begin();
+}
+
+OOXMLPropertySetImpl::OOXMLProperties_t::const_iterator
+OOXMLPropertySetImpl::end() const
+{
+ return mProperties.end();
+}
+
+string OOXMLPropertySetImpl::getType() const
+{
+ return msType;
+}
+
+void OOXMLPropertySetImpl::add(OOXMLProperty::Pointer_t pProperty)
+{
+#ifdef DEBUG_PROPERTY_SET
+ debug_logger->startElement("propertyset.add");
+ debug_logger->chars(pProperty->toString());
+#endif
+
+ if (pProperty.get() != NULL && pProperty->getId() != 0x0)
+ {
+ mProperties.push_back(pProperty);
+ }
+#ifdef DEBUG_PROPERTY_SET
+ else
+ {
+ debug_logger->element("warning.property_not_added");
+ }
+
+ debug_logger->endElement("propertyset.add");
+#endif
+}
+
+void OOXMLPropertySetImpl::add(OOXMLPropertySet::Pointer_t pPropertySet)
+{
+ if (pPropertySet.get() != NULL)
+ {
+ OOXMLPropertySetImpl * pSet =
+ dynamic_cast<OOXMLPropertySetImpl *>(pPropertySet.get());
+
+ if (pSet != NULL)
+ {
+ mProperties.resize(mProperties.size() + pSet->mProperties.size());
+ for (OOXMLProperties_t::iterator aIt = pSet->mProperties.begin();
+ aIt != pSet->mProperties.end(); aIt++)
+ add(*aIt);
+ }
+ }
+}
+
+OOXMLPropertySet * OOXMLPropertySetImpl::clone() const
+{
+ return new OOXMLPropertySetImpl(*this);
+}
+
+void OOXMLPropertySetImpl::setType(const string & rsType)
+{
+ msType = rsType;
+}
+
+string OOXMLPropertySetImpl::toString()
+{
+ string sResult = "[";
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "%p", this);
+ sResult += sBuffer;
+ sResult += ":";
+
+ OOXMLProperties_t::iterator aItBegin = begin();
+ OOXMLProperties_t::iterator aItEnd = end();
+
+ for (OOXMLProperties_t::iterator aIt = aItBegin; aIt != aItEnd; aIt++)
+ {
+ if (aIt != aItBegin)
+ sResult += ", ";
+
+ if ((*aIt).get() != NULL)
+ sResult += (*aIt)->toString();
+ else
+ sResult += "0x0";
+ }
+
+ sResult += "]";
+
+ return sResult;
+}
+
+/*
+ class OOXMLPropertySetValue
+*/
+
+OOXMLPropertySetValue::OOXMLPropertySetValue
+(OOXMLPropertySet::Pointer_t pPropertySet)
+: mpPropertySet(pPropertySet)
+{
+}
+
+OOXMLPropertySetValue::~OOXMLPropertySetValue()
+{
+}
+
+writerfilter::Reference<Properties>::Pointer_t OOXMLPropertySetValue::getProperties()
+{
+ return writerfilter::Reference<Properties>::Pointer_t
+ (mpPropertySet->clone());
+}
+
+string OOXMLPropertySetValue::toString() const
+{
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "t:%p, m:%p", this, mpPropertySet.get());
+
+ return "OOXMLPropertySetValue(" + string(sBuffer) + ")";
+}
+
+OOXMLValue * OOXMLPropertySetValue::clone() const
+{
+ return new OOXMLPropertySetValue(*this);
+}
+
+/*
+ class OOXMLIntegerValue
+*/
+
+OOXMLIntegerValue::OOXMLIntegerValue(sal_Int32 nValue)
+: mnValue(nValue)
+{
+}
+
+OOXMLIntegerValue::OOXMLIntegerValue(const rtl::OUString & rValue)
+: mnValue(0)
+{
+ mnValue = rValue.toInt32();
+}
+
+OOXMLIntegerValue::~OOXMLIntegerValue()
+{
+}
+
+int OOXMLIntegerValue::getInt() const
+{
+ return mnValue;
+}
+
+uno::Any OOXMLIntegerValue::getAny() const
+{
+ uno::Any aResult(mnValue);
+
+ return aResult;
+}
+
+OOXMLValue * OOXMLIntegerValue::clone() const
+{
+ return new OOXMLIntegerValue(*this);
+}
+
+string OOXMLIntegerValue::toString() const
+{
+ char buffer[256];
+ snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32, mnValue);
+
+ return buffer;
+}
+
+/*
+ class OOXMLHexValue
+*/
+
+OOXMLHexValue::OOXMLHexValue(sal_uInt32 nValue)
+: mnValue(nValue)
+{
+}
+
+OOXMLHexValue::OOXMLHexValue(const rtl::OUString & rValue)
+{
+ mnValue = static_cast<sal_uInt32>(rValue.toInt32(16));
+}
+
+OOXMLHexValue::~OOXMLHexValue()
+{
+}
+
+int OOXMLHexValue::getInt() const
+{
+ return mnValue;
+}
+
+OOXMLValue * OOXMLHexValue::clone() const
+{
+ return new OOXMLHexValue(*this);
+}
+
+string OOXMLHexValue::toString() const
+{
+ char buffer[256];
+ snprintf(buffer, sizeof(buffer), "0x%" SAL_PRIxUINT32, mnValue);
+
+ return buffer;
+}
+
+/*
+ class OOXMLShapeValue
+ */
+
+
+OOXMLShapeValue::OOXMLShapeValue(uno::Reference<XShape> rShape)
+: mrShape(rShape)
+{
+}
+
+OOXMLShapeValue::~OOXMLShapeValue()
+{
+}
+
+uno::Any OOXMLShapeValue::getAny() const
+{
+ return uno::Any(mrShape);
+}
+
+string OOXMLShapeValue::toString() const
+{
+ return "Shape";
+}
+
+OOXMLValue * OOXMLShapeValue::clone() const
+{
+ return new OOXMLShapeValue(mrShape);
+}
+
+/*
+ class OOXMLTableImpl
+ */
+
+OOXMLTableImpl::OOXMLTableImpl()
+{
+}
+
+OOXMLTableImpl::~OOXMLTableImpl()
+{
+}
+
+void OOXMLTableImpl::resolve(Table & rTable)
+{
+#ifdef DEBUG_PROTOCOL
+ Table::Pointer_t pTable(new TableProtocol(&rTable, debug_logger));
+#else
+ Table * pTable = &rTable;
+#endif
+
+ int nPos = 0;
+
+ PropertySets_t::iterator it = mPropertySets.begin();
+ PropertySets_t::iterator itEnd = mPropertySets.end();
+
+ while (it != itEnd)
+ {
+ writerfilter::Reference<Properties>::Pointer_t pProperties
+ ((*it)->getProperties());
+
+ if (pProperties.get() != NULL)
+ pTable->entry(nPos, pProperties);
+
+ ++nPos;
+ it++;
+ }
+}
+
+void OOXMLTableImpl::add(ValuePointer_t pPropertySet)
+{
+ if (pPropertySet.get() != NULL)
+ mPropertySets.push_back(pPropertySet);
+}
+
+string OOXMLTableImpl::getType() const
+{
+ return "OOXMLTableImpl";
+}
+
+OOXMLTable * OOXMLTableImpl::clone() const
+{
+ return new OOXMLTableImpl(*this);
+}
+
+/*
+ class: OOXMLPropertySetEntryToString
+*/
+
+OOXMLPropertySetEntryToString::OOXMLPropertySetEntryToString(Id nId)
+: mnId(nId)
+{
+}
+
+OOXMLPropertySetEntryToString::~OOXMLPropertySetEntryToString()
+{
+}
+
+void OOXMLPropertySetEntryToString::sprm(Sprm & /*rSprm*/)
+{
+}
+
+void OOXMLPropertySetEntryToString::attribute(Id nId, Value & rValue)
+{
+ if (nId == mnId)
+ mStr = rValue.getString();
+}
+
+const ::rtl::OUString & OOXMLPropertySetEntryToString::getString() const
+{
+ return mStr;
+}
+
+OOXMLPropertySetEntryToInteger::OOXMLPropertySetEntryToInteger(Id nId)
+: mnId(nId)
+{
+}
+
+OOXMLPropertySetEntryToInteger::~OOXMLPropertySetEntryToInteger()
+{
+}
+
+void OOXMLPropertySetEntryToInteger::sprm(Sprm & /*rSprm*/)
+{
+}
+
+void OOXMLPropertySetEntryToInteger::attribute(Id nId, Value & rValue)
+{
+ if (nId == mnId)
+ mnValue = rValue.getInt();
+}
+
+int OOXMLPropertySetEntryToInteger::getValue() const
+{
+ return mnValue;
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx b/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx
new file mode 100644
index 000000000000..a04fc5f5d1af
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLPropertySetImpl.hxx
@@ -0,0 +1,289 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OOXML_PROPERTY_SET_IMPL_HXX
+#define INCLUDED_OOXML_PROPERTY_SET_IMPL_HXX
+
+#include <vector>
+#include "OOXMLPropertySet.hxx"
+#include "OOXMLBinaryObjectReference.hxx"
+
+namespace com {
+namespace sun {
+namespace star {
+namespace drawing {
+class XShape;
+}}}}
+
+namespace writerfilter {
+namespace ooxml
+{
+using namespace ::std;
+using ::com::sun::star::drawing::XShape;
+
+class OOXMLValue : public Value
+{
+public:
+ typedef boost::shared_ptr<OOXMLValue> Pointer_t;
+ OOXMLValue();
+ virtual ~OOXMLValue();
+
+ virtual int getInt() const;
+ virtual bool getBool() const;
+ virtual ::rtl::OUString getString() const;
+ virtual uno::Any getAny() const;
+ virtual writerfilter::Reference<Properties>::Pointer_t getProperties();
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream();
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLPropertyImpl : public OOXMLProperty
+{
+public:
+ enum Type_t { SPRM, ATTRIBUTE };
+private:
+ Id mId;
+ mutable OOXMLValue::Pointer_t mpValue;
+ Type_t meType;
+
+public:
+ typedef boost::shared_ptr<OOXMLProperty> Pointer_t;
+
+ OOXMLPropertyImpl(Id id, OOXMLValue::Pointer_t pValue, Type_t eType);
+ OOXMLPropertyImpl(const OOXMLPropertyImpl & rSprm);
+ virtual ~OOXMLPropertyImpl();
+
+ virtual sal_uInt32 getId() const;
+ virtual Value::Pointer_t getValue();
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+ virtual writerfilter::Reference<Stream>::Pointer_t getStream();
+ virtual writerfilter::Reference<Properties>::Pointer_t getProps();
+ virtual string getName() const;
+ virtual Kind getKind();
+ virtual string toString() const;
+ virtual Sprm * clone();
+ virtual void resolve(Properties & rProperties);
+};
+
+class OOXMLBinaryValue : public OOXMLValue
+{
+protected:
+ mutable OOXMLBinaryObjectReference::Pointer_t mpBinaryObj;
+public:
+ explicit OOXMLBinaryValue(OOXMLBinaryObjectReference::Pointer_t pBinaryObj);
+ virtual ~OOXMLBinaryValue();
+
+ virtual writerfilter::Reference<BinaryObj>::Pointer_t getBinary();
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLBooleanValue : public OOXMLValue
+{
+protected:
+ bool mbValue;
+public:
+ explicit OOXMLBooleanValue(bool bValue);
+ explicit OOXMLBooleanValue(const rtl::OUString & rValue);
+ virtual ~OOXMLBooleanValue();
+
+ virtual int getInt() const;
+ virtual bool getBool() const;
+ virtual uno::Any getAny() const;
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLStringValue : public OOXMLValue
+{
+protected:
+ rtl::OUString mStr;
+public:
+ explicit OOXMLStringValue(const rtl::OUString & rStr);
+ virtual ~OOXMLStringValue();
+
+ virtual uno::Any getAny() const;
+ virtual rtl::OUString getString() const;
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLInputStreamValue : public OOXMLValue
+{
+protected:
+ uno::Reference<io::XInputStream> mxInputStream;
+
+public:
+ explicit OOXMLInputStreamValue(uno::Reference<io::XInputStream> xInputStream);
+ virtual ~OOXMLInputStreamValue();
+
+ virtual uno::Any getAny() const;
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+struct OOXMLPropertySetImplCompare
+{
+ bool operator()(const OOXMLProperty::Pointer_t x,
+ const OOXMLProperty::Pointer_t y) const;
+};
+
+class OOXMLPropertySetImpl : public OOXMLPropertySet
+{
+public:
+ typedef vector<OOXMLProperty::Pointer_t> OOXMLProperties_t;
+private:
+ OOXMLProperties_t mProperties;
+ string msType;
+public:
+ OOXMLPropertySetImpl();
+ virtual ~OOXMLPropertySetImpl();
+
+ virtual void resolve(Properties & rHandler);
+ virtual string getType() const;
+ virtual void add(OOXMLProperty::Pointer_t pProperty);
+ virtual void add(OOXMLPropertySet::Pointer_t pPropertySet);
+ virtual OOXMLPropertySet * clone() const;
+
+ OOXMLProperties_t::iterator begin();
+ OOXMLProperties_t::iterator end();
+ OOXMLProperties_t::const_iterator begin() const;
+ OOXMLProperties_t::const_iterator end() const;
+
+ virtual void setType(const string & rsType);
+
+ virtual string toString();
+};
+
+class OOXMLPropertySetValue : public OOXMLValue
+{
+ OOXMLPropertySet::Pointer_t mpPropertySet;
+public:
+ OOXMLPropertySetValue(OOXMLPropertySet::Pointer_t pPropertySet);
+ virtual ~OOXMLPropertySetValue();
+
+ virtual writerfilter::Reference<Properties>::Pointer_t getProperties();
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLIntegerValue : public OOXMLValue
+{
+protected:
+ sal_Int32 mnValue;
+public:
+ explicit OOXMLIntegerValue(sal_Int32 nValue);
+ explicit OOXMLIntegerValue(const rtl::OUString & rValue);
+ virtual ~OOXMLIntegerValue();
+
+ virtual int getInt() const;
+ virtual uno::Any getAny() const;
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLHexValue : public OOXMLValue
+{
+protected:
+ sal_uInt32 mnValue;
+public:
+ explicit OOXMLHexValue(sal_uInt32 nValue);
+ explicit OOXMLHexValue(const rtl::OUString & rValue);
+ virtual ~OOXMLHexValue();
+
+ virtual int getInt() const;
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLShapeValue : public OOXMLValue
+{
+protected:
+ uno::Reference<XShape> mrShape;
+public:
+ explicit OOXMLShapeValue(uno::Reference<XShape> rShape);
+ virtual ~OOXMLShapeValue();
+
+ virtual uno::Any getAny() const;
+ virtual string toString() const;
+ virtual OOXMLValue * clone() const;
+};
+
+class OOXMLTableImpl : public OOXMLTable
+{
+public:
+ typedef boost::shared_ptr<OOXMLValue> ValuePointer_t;
+private:
+ typedef vector<ValuePointer_t> PropertySets_t;
+ PropertySets_t mPropertySets;
+
+public:
+ OOXMLTableImpl();
+ virtual ~OOXMLTableImpl();
+
+ virtual void resolve(Table & rTable);
+ virtual void add(ValuePointer_t pPropertySet);
+ virtual string getType() const;
+ virtual OOXMLTable * clone() const;
+};
+
+class OOXMLPropertySetEntryToString : public Properties
+{
+ Id mnId;
+ ::rtl::OUString mStr;
+
+public:
+ OOXMLPropertySetEntryToString(Id nId);
+ virtual ~OOXMLPropertySetEntryToString();
+
+ virtual void sprm(Sprm & rSprm);
+ virtual void attribute(Id nId, Value & rValue);
+
+ const ::rtl::OUString & getString() const;
+};
+
+class OOXMLPropertySetEntryToInteger : public Properties
+{
+ Id mnId;
+ int mnValue;
+public:
+ OOXMLPropertySetEntryToInteger(Id nId);
+ virtual ~OOXMLPropertySetEntryToInteger();
+
+ virtual void sprm(Sprm & rSprm);
+ virtual void attribute(Id nId, Value & rValue);
+
+ int getValue() const;
+};
+
+Sprm::Kind SprmKind(sal_uInt32 nSprmCode);
+
+} // namespace ooxml
+} // namespace writerfilter
+
+#endif // INCLUDED_OOXML_PROPERTY_SET_IMPL_HXX
diff --git a/writerfilter/source/ooxml/OOXMLStreamImpl.cxx b/writerfilter/source/ooxml/OOXMLStreamImpl.cxx
new file mode 100644
index 000000000000..8b879f4b0aec
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLStreamImpl.cxx
@@ -0,0 +1,317 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "OOXMLStreamImpl.hxx"
+#include "OOXMLFastTokenHandler.hxx"
+#include "ooxmlLoggers.hxx"
+#include <iostream>
+
+#ifndef _COM_SUN_STAR_CONTAINER_XHIERARCHICALSTORAGEACCESS_HPP_
+#include <com/sun/star/embed/XHierarchicalStorageAccess.hpp>
+#endif
+
+//#define DEBUG_STREAM
+
+namespace writerfilter {
+namespace ooxml
+{
+
+using namespace ::std;
+
+OOXMLStreamImpl::OOXMLStreamImpl
+(uno::Reference<uno::XComponentContext> xContext,
+ uno::Reference<io::XInputStream> xStorageStream, StreamType_t nType)
+: mxContext(xContext), mxStorageStream(xStorageStream), mnStreamType(nType)
+{
+ mxStorage.set
+ (comphelper::OStorageHelper::GetStorageOfFormatFromInputStream
+ (OFOPXML_STORAGE_FORMAT_STRING, mxStorageStream));
+ mxRelationshipAccess.set(mxStorage, uno::UNO_QUERY_THROW);
+
+ init();
+}
+
+OOXMLStreamImpl::OOXMLStreamImpl
+(OOXMLStreamImpl & rOOXMLStream, StreamType_t nStreamType)
+: mxContext(rOOXMLStream.mxContext),
+ mxStorageStream(rOOXMLStream.mxStorageStream),
+ mxStorage(rOOXMLStream.mxStorage),
+ mnStreamType(nStreamType),
+ msPath(rOOXMLStream.msPath)
+{
+ mxRelationshipAccess.set(rOOXMLStream.mxDocumentStream, uno::UNO_QUERY_THROW);
+
+ init();
+}
+
+OOXMLStreamImpl::OOXMLStreamImpl
+(OOXMLStreamImpl & rOOXMLStream, const rtl::OUString & rId)
+: mxContext(rOOXMLStream.mxContext),
+ mxStorageStream(rOOXMLStream.mxStorageStream),
+ mxStorage(rOOXMLStream.mxStorage),
+ mnStreamType(UNKNOWN),
+ msId(rId),
+ msPath(rOOXMLStream.msPath)
+{
+ mxRelationshipAccess.set(rOOXMLStream.mxDocumentStream, uno::UNO_QUERY_THROW);
+
+ init();
+}
+
+OOXMLStreamImpl::~OOXMLStreamImpl()
+{
+#ifdef DEBUG_STREAM
+ debug_logger->endElement("stream");
+#endif
+}
+
+const ::rtl::OUString & OOXMLStreamImpl::getTarget() const
+{
+ return msTarget;
+}
+
+bool OOXMLStreamImpl::lcl_getTarget(uno::Reference<embed::XRelationshipAccess>
+ xRelationshipAccess,
+ StreamType_t nStreamType,
+ const ::rtl::OUString & rId,
+ ::rtl::OUString & rDocumentTarget)
+{
+ bool bFound = false;
+
+ static rtl::OUString sType(RTL_CONSTASCII_USTRINGPARAM("Type"));
+ static rtl::OUString sId(RTL_CONSTASCII_USTRINGPARAM("Id"));
+ static rtl::OUString sDocumentType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"));
+ static rtl::OUString sStylesType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"));
+ static rtl::OUString sNumberingType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering"));
+ static rtl::OUString sFonttableType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable"));
+ static rtl::OUString sFootnotesType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes"));
+ static rtl::OUString sEndnotesType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/endnotes"));
+ static rtl::OUString sCommentsType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments"));
+ static rtl::OUString sThemeType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme"));
+ static rtl::OUString sSettingsType(RTL_CONSTASCII_USTRINGPARAM("http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings"));
+ static rtl::OUString sTarget(RTL_CONSTASCII_USTRINGPARAM("Target"));
+ static rtl::OUString sTargetMode(RTL_CONSTASCII_USTRINGPARAM("TargetMode"));
+ static rtl::OUString sExternal(RTL_CONSTASCII_USTRINGPARAM("External"));
+
+ rtl::OUString sStreamType;
+
+ switch (nStreamType)
+ {
+ case DOCUMENT:
+ sStreamType = sDocumentType;
+ break;
+ case STYLES:
+ sStreamType = sStylesType;
+ break;
+ case NUMBERING:
+ sStreamType = sNumberingType;
+ break;
+ case FONTTABLE:
+ sStreamType = sFonttableType;
+ break;
+ case FOOTNOTES:
+ sStreamType = sFootnotesType;
+ break;
+ case ENDNOTES:
+ sStreamType = sEndnotesType;
+ break;
+ case COMMENTS:
+ sStreamType = sCommentsType;
+ break;
+ case THEME:
+ sStreamType = sThemeType;
+ break;
+ case SETTINGS:
+ sStreamType = sSettingsType;
+ break;
+ default:
+ break;
+ }
+
+ if (xRelationshipAccess.is())
+ {
+ uno::Sequence< uno::Sequence< beans::StringPair > >aSeqs =
+ xRelationshipAccess->getAllRelationships();
+
+ for (sal_Int32 j = 0; j < aSeqs.getLength(); j++)
+ {
+ uno::Sequence< beans::StringPair > aSeq = aSeqs[j];
+
+ bool bExternalTarget = false;
+ ::rtl::OUString sMyTarget;
+ for (sal_Int32 i = 0; i < aSeq.getLength(); i++)
+ {
+ beans::StringPair aPair = aSeq[i];
+
+ if (aPair.First.compareTo(sType) == 0 &&
+ aPair.Second.compareTo(sStreamType) == 0)
+ bFound = true;
+ else if (aPair.First.compareTo(sId) == 0 &&
+ aPair.Second.compareTo(rId) == 0)
+ bFound = true;
+ else if (aPair.First.compareTo(sTarget) == 0)
+ sMyTarget = aPair.Second;
+ else if (aPair.First.compareTo(sTargetMode) == 0 &&
+ aPair.Second.compareTo(sExternal) == 0)
+ bExternalTarget = true;
+
+ }
+
+ if (bFound)
+ {
+ if (bExternalTarget)
+ rDocumentTarget = sMyTarget;
+ else
+ {
+ rDocumentTarget = msPath;
+ rDocumentTarget += sMyTarget;
+ }
+
+ break;
+ }
+ }
+ }
+
+ return bFound;
+}
+
+::rtl::OUString OOXMLStreamImpl::getTargetForId(const ::rtl::OUString & rId)
+{
+ ::rtl::OUString sTarget;
+
+ uno::Reference<embed::XRelationshipAccess> xRelationshipAccess
+ (mxDocumentStream, uno::UNO_QUERY_THROW);
+
+ if (lcl_getTarget(xRelationshipAccess, UNKNOWN, rId, sTarget))
+ return sTarget;
+
+ return ::rtl::OUString();
+}
+
+void OOXMLStreamImpl::init()
+{
+ bool bFound = lcl_getTarget(mxRelationshipAccess,
+ mnStreamType, msId, msTarget);
+#ifdef DEBUG_STREAM
+ debug_logger->startElement("stream");
+ debug_logger->attribute("target", msTarget);
+#endif
+
+ if (bFound)
+ {
+ sal_Int32 nLastIndex = msTarget.lastIndexOf('/');
+ if (nLastIndex >= 0)
+ msPath = msTarget.copy(0, nLastIndex + 1);
+
+ uno::Reference<embed::XHierarchicalStorageAccess>
+ xHierarchicalStorageAccess(mxStorage, uno::UNO_QUERY);
+
+ if (xHierarchicalStorageAccess.is())
+ {
+ uno::Any aAny(xHierarchicalStorageAccess->
+ openStreamElementByHierarchicalName
+ (msTarget, embed::ElementModes::SEEKABLEREAD));
+ aAny >>= mxDocumentStream;
+ }
+ }
+}
+
+uno::Reference<io::XInputStream> OOXMLStreamImpl::getDocumentStream()
+{
+ uno::Reference<io::XInputStream> xResult;
+
+ if (mxDocumentStream.is())
+ xResult = mxDocumentStream->getInputStream();
+
+ return xResult;
+}
+
+uno::Reference<io::XInputStream> OOXMLStreamImpl::getStorageStream()
+{
+ return mxStorageStream;
+}
+
+uno::Reference<xml::sax::XParser> OOXMLStreamImpl::getParser()
+{
+ uno::Reference<lang::XMultiComponentFactory> xFactory =
+ uno::Reference<lang::XMultiComponentFactory>
+ (mxContext->getServiceManager());
+
+ uno::Reference<xml::sax::XParser> xParser
+ (xFactory->createInstanceWithContext
+ ( rtl::OUString::createFromAscii( "com.sun.star.xml.sax.Parser" ),
+ mxContext ),
+ uno::UNO_QUERY );
+
+ return xParser;
+}
+
+uno::Reference<uno::XComponentContext> OOXMLStreamImpl::getContext()
+{
+ return mxContext;
+}
+
+uno::Reference <xml::sax::XFastTokenHandler>
+OOXMLStreamImpl::getFastTokenHandler
+(uno::Reference<uno::XComponentContext> xContext)
+{
+ if (! mxFastTokenHandler.is())
+ mxFastTokenHandler.set(new OOXMLFastTokenHandler(xContext));
+
+ return mxFastTokenHandler;
+}
+
+OOXMLStream::Pointer_t
+OOXMLDocumentFactory::createStream
+(uno::Reference<uno::XComponentContext> xContext,
+ uno::Reference<io::XInputStream> rStream,
+ OOXMLStream::StreamType_t nStreamType)
+{
+ OOXMLStreamImpl * pStream = new OOXMLStreamImpl(xContext, rStream,
+ nStreamType);
+ return OOXMLStream::Pointer_t(pStream);
+}
+
+OOXMLStream::Pointer_t
+OOXMLDocumentFactory::createStream
+(OOXMLStream::Pointer_t pStream, OOXMLStream::StreamType_t nStreamType)
+{
+ return OOXMLStream::Pointer_t
+ (new OOXMLStreamImpl(*dynamic_cast<OOXMLStreamImpl *>(pStream.get()),
+ nStreamType));
+}
+
+OOXMLStream::Pointer_t
+OOXMLDocumentFactory::createStream
+(OOXMLStream::Pointer_t pStream, const rtl::OUString & rId)
+{
+ return OOXMLStream::Pointer_t
+ (new OOXMLStreamImpl(*dynamic_cast<OOXMLStreamImpl *>(pStream.get()),
+ rId));
+}
+
+}}
diff --git a/writerfilter/source/ooxml/OOXMLStreamImpl.hxx b/writerfilter/source/ooxml/OOXMLStreamImpl.hxx
new file mode 100644
index 000000000000..15409fe8ae2a
--- /dev/null
+++ b/writerfilter/source/ooxml/OOXMLStreamImpl.hxx
@@ -0,0 +1,91 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef INCLUDED_OOXML_STREAM_IMPL_HXX
+#define INCLUDED_OOXML_STREAM_IMPL_HXX
+
+#include <ooxml/OOXMLDocument.hxx>
+#include <comphelper/storagehelper.hxx>
+#include <com/sun/star/embed/XRelationshipAccess.hpp>
+#include <com/sun/star/io/XStream.hpp>
+
+namespace writerfilter {
+namespace ooxml
+{
+
+using namespace com::sun::star;
+
+class OOXMLStreamImpl : public OOXMLStream
+{
+ void init();
+
+ uno::Reference<uno::XComponentContext> mxContext;
+ uno::Reference<io::XInputStream> mxStorageStream;
+ uno::Reference<embed::XStorage> mxStorage;
+ uno::Reference<embed::XRelationshipAccess> mxRelationshipAccess;
+ uno::Reference<io::XStream> mxDocumentStream;
+ uno::Reference<xml::sax::XFastParser> mxFastParser;
+ uno::Reference<xml::sax::XFastTokenHandler> mxFastTokenHandler;
+
+ StreamType_t mnStreamType;
+
+ rtl::OUString msId;
+ rtl::OUString msPath;
+ rtl::OUString msTarget;
+
+ bool lcl_getTarget(uno::Reference<embed::XRelationshipAccess>
+ xRelationshipAccess,
+ StreamType_t nStreamType,
+ const ::rtl::OUString & rId,
+ ::rtl::OUString & rDocumentTarget);
+public:
+ typedef boost::shared_ptr<OOXMLStreamImpl> Pointer_t;
+
+ OOXMLStreamImpl
+ (OOXMLStreamImpl & rStream, StreamType_t nType);
+ OOXMLStreamImpl
+ (uno::Reference<uno::XComponentContext> xContext,
+ uno::Reference<io::XInputStream> xStorageStream,
+ StreamType_t nType);
+ OOXMLStreamImpl(OOXMLStreamImpl & rStream, const rtl::OUString & rId);
+
+ virtual ~OOXMLStreamImpl();
+
+ virtual uno::Reference<xml::sax::XParser> getParser();
+ virtual uno::Reference<xml::sax::XFastParser> getFastParser();
+ virtual uno::Reference<io::XInputStream> getDocumentStream();
+ virtual uno::Reference<io::XInputStream> getStorageStream();
+ virtual uno::Reference<uno::XComponentContext> getContext();
+ virtual ::rtl::OUString getTargetForId(const ::rtl::OUString & rId);
+ virtual const ::rtl::OUString & getTarget() const;
+
+ virtual uno::Reference<xml::sax::XFastTokenHandler>
+ getFastTokenHandler(uno::Reference<uno::XComponentContext> rContext);
+
+ void setInputStream(uno::Reference<io::XInputStream> rxInputStream);
+};
+}}
+#endif // INCLUDED_OOXML_STREAM_IMPL_HXX
diff --git a/writerfilter/source/ooxml/README.efforts b/writerfilter/source/ooxml/README.efforts
new file mode 100644
index 000000000000..03570a80ec5a
--- /dev/null
+++ b/writerfilter/source/ooxml/README.efforts
@@ -0,0 +1,131 @@
+This file describes how the remaining efforts for writerfilter can be
+extracted from the source code.
+
+1. Marking up the efforts in the code.
+
+Efforts are marked up in the code with comments like this:
+
+/* WRITERFILTERSTATUS: done: <percent done>, planned: <effort planned>, spent: <effort spent, yet> */
+
+The comments have to follow a case-label immediately. Consecutive
+case-labels can be marked up, too. In the latter case the efforts are
+counted for the preceeding case-labels as a whole.
+
+2. Extraction process
+
+2.1. Stage 1:
+
+This stage is handled in status.sh. An XML-file is generated that
+contains a top level element <stage1>. <stage1> contains an element
+<analyze> and several <qname> and <status> elements.
+
+2.1.1. Use analyzemodel.xsl to extract necessary data from model.xml.
+
+- Namespaces can be flagged with attribute @todo="ignore" to prevent
+ the namespace being considered.
+
+- For every <element>/<attribute> an entry in an according element in <analyze> is genereated. These elements look like this:
+
+<attribute id="..." resource="..." tokenid="..." qname="..." namespace="..." define="..." name="..."/>
+
+Important for the extraction of efforts: @qname is the identifier used
+in case-labels in .cxx files and thus links the status mark up
+comments with elements/attributes in the model.xml.
+
+2.1.2. Extract status information
+
+The variable SEARCHIN in status.sh determines in what directory the script will search for case labels and status comments. Only .cxx files are searched. Lines like this
+
+case NS_rtf::LN_UNUSED4:
+
+result in elements like this
+
+<qname file="/DomainMapper.cxx" line="216" qname="NS_rtf::LN_UNUSED4"/>.
+
+Lines like this
+
+/* WRITERFILTERSTATUS: done: 0, planned: 0, spent: 0 */
+
+result in elements like this
+
+<status done="0" planned="0" spent="0"/>
+
+The <qname> and <status> elements are children of the <stage1>
+element. The are inserted in the same order as found in the
+code. Therefore a <status> element corresponds to the group of
+consecutive preceding <qname> elements.
+
+2.2. Stage 2
+
+In this stage analyzestage2.xsl is used on the result of stage 1 to
+group the <qname> and <status> elements from stage 1. For each
+<status> element a <qnames> element is generated that contains the
+<qname> elements that the <status> element refers to, plus the
+<status> element.
+
+2.3. Stage 3
+
+This stage associates the <attribute> and <element> elements in
+model.xml with the extracted data. It uses analyzestage3.xsl on the
+result of stage 2 to do this.
+
+E.g. for given elements from stage 2:
+
+<attribute
+ id="dml-wordprocessingDrawing:CT_Inline:distR"
+ resource="Properties"
+ tokenid="ooxml:CT_Inline_distR"
+ qname="NS_ooxml::LN_CT_Inline_distR"
+ namespace="dml-wordprocessingDrawing"
+ define="CT_Inline"
+ name="distR"/>
+
+and
+
+ <qnames>
+ <qname file="/GraphicImport.cxx" line="1078" qname="NS_ooxml::LN_CT_Inline_distT"/>
+ <qname file="/GraphicImport.cxx" line="1079" qname="NS_ooxml::LN_CT_Inline_distB"/>
+ <qname file="/GraphicImport.cxx" line="1080" qname="NS_ooxml::LN_CT_Inline_distL"/>
+ <qname file="/GraphicImport.cxx" line="1081" qname="NS_ooxml::LN_CT_Inline_distR"/>
+ <status done="0" planned="0.5" spent="0"/>
+ </qnames>
+
+the result of stage 3 will be
+
+ <attribute
+ id="dml-wordprocessingDrawing:CT_Inline:distR"
+ resource="Properties"
+ tokenid="ooxml:CT_Inline_distR"
+ qname="NS_ooxml::LN_CT_Inline_distR"
+ namespace="dml-wordprocessingDrawing"
+ define="CT_Inline" name="distR">
+
+ <file name="/GraphicImport.cxx" line="1081">
+ <status done="0" planned="0.5" spent="0" qname-count="4"/>
+ </file>
+
+ </attribute>
+
+@qname-count is the number of case-labels that the according mark-up comment refers to.
+
+3. Collect efforts
+
+This is done by the script efforts.sh. It uses status.sh to extract the status and determines the efforts in two steps.
+
+3.1. Choose which <attribute>/<element> elements need effort
+
+This stage uses todo.xsl on the result of 2.3.
+
+There are two criteria that imply effort:
+
+- The <attribute>/<element> is not handled in any file.
+
+- The status for the <attribute>/<element> declares that work is
+ planned for it and less than 100 percent of this work is done.
+
+3.2. Generate table of efforts in CSV format
+
+This stage uses effort.xsl on the results of 3.1. and produces the
+table of efforts. If there is no status defined for an
+<attribute>/<element> it is assumed that the planned effort is 0.5
+hours and no work has been done.
diff --git a/writerfilter/source/ooxml/RefAndPointer.hxx b/writerfilter/source/ooxml/RefAndPointer.hxx
new file mode 100644
index 000000000000..c997d302fd33
--- /dev/null
+++ b/writerfilter/source/ooxml/RefAndPointer.hxx
@@ -0,0 +1,119 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_REF_AND_POINTER_HXX
+#define INCLUDED_REF_AND_POINTER_HXX
+
+#include <iostream>
+#include <com/sun/star/lang/XUnoTunnel.hpp>
+
+namespace writerfilter {
+namespace ooxml
+{
+using namespace ::com::sun::star;
+using namespace ::std;
+
+template <class Interface, class ChildClass>
+class RefAndPointer
+{
+ mutable ChildClass * mpHandler;
+ mutable uno::Reference<Interface> mRef;
+
+public:
+ RefAndPointer()
+ : mpHandler(NULL)
+ {
+#ifdef DEBUG_MEMORY
+ clog << "MEMORY:" << mpHandler->getInstanceNumber() << ":RefAndPointer"
+ << endl;
+#endif
+ }
+
+ RefAndPointer(ChildClass * pHandler)
+ : mpHandler(pHandler), mRef(pHandler)
+ {
+#ifdef DEBUG_MEMORY
+ clog << "MEMORY:" << mpHandler->getInstanceNumber() << ":RefAndPointer"
+ << endl;
+#endif
+ }
+
+ RefAndPointer(uno::Reference<Interface> xRef)
+ : mRef(xRef)
+ {
+#if 0
+ uno::Reference<lang::XUnoTunnel> xTunnel( xRef, uno::UNO_QUERY);
+
+ if (xTunnel.is())
+ mpHandler = reinterpret_cast<ChildClass *>(xTunnel->getSomething(ChildClass::getUnoTunnelId()));
+#else
+ mpHandler = dynamic_cast<ChildClass *>(xRef.get());
+#endif
+ if (mpHandler != NULL)
+ clog << "MEMORY:" << mpHandler->getInstanceNumber()
+ << ":RefAndPointer" << endl;
+ }
+
+ virtual ~RefAndPointer()
+ {
+#ifdef DEBUG_MEMORY
+ if (mpHandler != NULL)
+ clog << "MEMORY:" << mpHandler->getInstanceNumber()
+ << ":~RefAndPointer" << endl;
+#endif
+ }
+
+ void set(ChildClass * pHandler)
+ {
+ mpHandler = pHandler;
+ mRef = pHandler;
+ }
+
+ void set(uno::Reference<Interface> xHandler)
+ {
+ mpHandler = dynamic_cast<ChildClass*>(xHandler.get());
+ mRef = xHandler;
+ }
+
+ ChildClass * getPointer() const { return mpHandler; }
+ const uno::Reference<Interface> getRef() const { return mRef; }
+
+ RefAndPointer & operator=
+ (const RefAndPointer & rSrc)
+ {
+ set(rSrc.getHandler());
+
+ return *this;
+ }
+
+ bool is() { return getRef().is(); }
+
+ operator ChildClass* () { return getPointer(); }
+ operator uno::Reference<Interface> () { return getRef(); }
+};
+}}
+#endif // INCLUDED_REF_AND_POINTER_HXX
diff --git a/writerfilter/source/ooxml/analyzemodel.xsl b/writerfilter/source/ooxml/analyzemodel.xsl
new file mode 100644
index 000000000000..3cce9795a947
--- /dev/null
+++ b/writerfilter/source/ooxml/analyzemodel.xsl
@@ -0,0 +1,104 @@
+<?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">
+
+<xsl:include href="factorytools.xsl"/>
+<xsl:output method="xml"/>
+
+<xsl:template match="/">
+ <analyze>
+ <xsl:for-each select="/model/namespace[not(@todo='ignore')]">
+ <xsl:call-template name="analyzegrammar"/>
+ </xsl:for-each>
+ </analyze>
+</xsl:template>
+
+<xsl:template name="analyzegrammar">
+ <xsl:variable name="nsname" select="@name"/>
+ <xsl:for-each select="rng:grammar/rng:define">
+ <xsl:variable name="defname" select="@name"/>
+ <xsl:for-each select=".//rng:attribute|.//rng:element">
+ <xsl:choose>
+ <xsl:when test="local-name()='element'">
+ <element>
+ <xsl:call-template name="defineattrs">
+ <xsl:with-param name="nsname" select="$nsname"/>
+ <xsl:with-param name="defname" select="$defname"/>
+ </xsl:call-template>
+ </element>
+ </xsl:when>
+ <xsl:when test="local-name()='attribute'">
+ <attribute>
+ <xsl:call-template name="defineattrs">
+ <xsl:with-param name="nsname" select="$nsname"/>
+ <xsl:with-param name="defname" select="$defname"/>
+ </xsl:call-template>
+ </attribute>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="defineattrs">
+ <xsl:param name="nsname"/>
+ <xsl:param name="defname"/>
+
+ <xsl:variable name="localname" select="local-name()"/>
+ <xsl:variable name="name" select="@name"/>
+
+ <xsl:attribute name="id">
+ <xsl:value-of select="$nsname"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="$defname"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:for-each select="ancestor::namespace/resource[@name=$defname]">
+ <xsl:attribute name="resource"><xsl:value-of select="@resource"/></xsl:attribute>
+ <xsl:choose>
+ <xsl:when test="$localname='attribute'">
+ <xsl:for-each select="attribute[@name=$name and @tokenid]">
+ <xsl:attribute name="tokenid"><xsl:value-of select="@tokenid"/></xsl:attribute>
+ <xsl:attribute name="qname">
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:attribute name="namespace">
+ <xsl:value-of select="$nsname"/>
+ </xsl:attribute>
+ <xsl:attribute name="define">
+ <xsl:value-of select="$defname"/>
+ </xsl:attribute>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:when test="$localname='element'">
+ <xsl:for-each select="element[@name=$name and @tokenid]">
+ <xsl:attribute name="tokenid"><xsl:value-of select="@tokenid"/></xsl:attribute>
+ <xsl:attribute name="qname">
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:attribute name="namespace">
+ <xsl:value-of select="$nsname"/>
+ </xsl:attribute>
+ <xsl:attribute name="define">
+ <xsl:value-of select="$defname"/>
+ </xsl:attribute>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ </xsl:for-each>
+ </xsl:when>
+ </xsl:choose>
+ <xsl:copy-of select="@tag"/>
+ </xsl:for-each>
+</xsl:template>
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/analyzestage2.xsl b/writerfilter/source/ooxml/analyzestage2.xsl
new file mode 100644
index 000000000000..9c7dc247b5ab
--- /dev/null
+++ b/writerfilter/source/ooxml/analyzestage2.xsl
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+<xsl:template match="/">
+ <stage2>
+ <xsl:copy-of select="/stage1/analyze"/>
+ <xsl:for-each select="/stage1/qname">
+ <xsl:if test="not(local-name(preceding-sibling::*[1]) = 'qname')">
+ <qnames>
+ <xsl:call-template name="handleqnames"/>
+ </qnames>
+ </xsl:if>
+ </xsl:for-each>
+ </stage2>
+</xsl:template>
+
+<xsl:template name="handleqnames">
+ <xsl:choose>
+ <xsl:when test="local-name() = 'qname'">
+ <xsl:copy-of select="."/>
+ <xsl:for-each select="following-sibling::*[1]">
+ <xsl:call-template name="handleqnames"/>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:when test="local-name() = 'nostatus' or local-name() = 'status'">
+ <xsl:copy-of select="."/>
+ </xsl:when>
+ </xsl:choose>
+</xsl:template>
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/analyzestage3.xsl b/writerfilter/source/ooxml/analyzestage3.xsl
new file mode 100644
index 000000000000..103782c1a11a
--- /dev/null
+++ b/writerfilter/source/ooxml/analyzestage3.xsl
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+
+
+<xsl:key name="qnames" match="/stage2/qnames/qname" use="@qname"/>
+
+<xsl:template match="/">
+ <stage3 xmlns:rng="http://relaxng.org/ns/structure/1.0">
+ <xsl:for-each select="/stage2/analyze">
+ <xsl:for-each select="attribute|element">
+ <xsl:variable name="qname" select="@qname"/>
+ <xsl:copy>
+ <xsl:copy-of select="@*"/>
+ <xsl:for-each select="key('qnames', @qname)">
+ <file>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@file"/>
+ </xsl:attribute>
+ <xsl:attribute name="line">
+ <xsl:value-of select="@line"/>
+ </xsl:attribute>
+ <xsl:for-each select="ancestor::qnames/status|ancestor::qnames/nostatus">
+ <xsl:copy>
+ <xsl:copy-of select="@*"/>
+ <xsl:attribute name="qname-count">
+ <xsl:value-of select="count(ancestor::qnames/qname)"/>
+ </xsl:attribute>
+ </xsl:copy>
+ </xsl:for-each>
+ </file>
+ </xsl:for-each>
+ </xsl:copy>
+ </xsl:for-each>
+ </xsl:for-each>
+ </stage3>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/attrsprm.xsl b/writerfilter/source/ooxml/attrsprm.xsl
new file mode 100644
index 000000000000..9351b1b874c9
--- /dev/null
+++ b/writerfilter/source/ooxml/attrsprm.xsl
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ exclude-result-prefixes = "xalan"
+ xml:indent="true">
+ <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>
+
+ <xsl:include href="factorytools.xsl"/>
+
+ <xsl:template match="/">
+ <class>
+ <xsl:for-each select="//rng:define[@name='CT_FFData']">
+ <xsl:call-template name="sprm"/>
+ <xsl:call-template name="attribute"/>
+ </xsl:for-each>
+ </class>
+ </xsl:template>
+
+ <xsl:template name="sprminner">
+ <xsl:variable name="defname" select="@name"/>
+ <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
+ <xsl:call-template name="sprminner"/>
+ </xsl:for-each>
+ <xsl:for-each select=".//rng:element">
+ <xsl:for-each select="rng:ref">
+ <xsl:variable name="refname" select="@name"/>
+ <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$refname]">
+ <xsl:call-template name="sprminner"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ <element>
+ <xsl:variable name="elementname" select="@name"/>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:for-each select="rng:ref">
+ <xsl:variable name="refname" select="@name"/>
+ <xsl:for-each select="ancestor::namespace/resource[@name=$refname]">
+ <xsl:attribute name="action">
+ <xsl:choose>
+ <xsl:when test="@resource='Properties'">
+ <xsl:text>resolve</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>set</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ </xsl:for-each>
+ <xsl:for-each select="ancestor::namespace/resource[@name=$defname]">
+ <xsl:for-each select="element[@name=$elementname]">
+ <xsl:attribute name="id">
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id">
+ <xsl:value-of select="@tokenid"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:attribute>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:for-each>
+ </element>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="sprm">
+ <sprm>
+ <xsl:call-template name="sprminner"/>
+ </sprm>
+ </xsl:template>
+
+ <xsl:template name="attributeinner">
+ <xsl:param name="parent"/>
+ <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
+ <xsl:variable name="refname" select="@name"/>
+ <xsl:comment><xsl:value-of select="$newparent"/></xsl:comment>
+ <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$refname]">
+ <xsl:call-template name="attributeinner">
+ <xsl:with-param name="parent" select="$parent"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:for-each>
+ <xsl:for-each select=".//rng:element">
+ <xsl:variable name="newparent">
+ <xsl:if test="string-length($parent)">
+ <xsl:value-of select="$parent"/>
+ <xsl:text>:</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="@name"/>
+ </xsl:variable>
+ <xsl:for-each select="rng:ref">
+ <xsl:variable name="refname" select="@name"/>
+ <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$refname]">
+ <xsl:call-template name="attributeinner">
+ <xsl:with-param name="parent" select="$newparent"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:for-each>
+ <xsl:variable name="defname" select="@name"/>
+ <xsl:variable name="resource">
+ <xsl:for-each select="ancestor::namespace/resource[@name=$defname]">
+ <xsl:value-of select="@resource"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:if test="$resource='Properties'">
+ <xsl:for-each select=".//rng:attribute">
+ <xsl:variable name="attrname" select="@name"/>
+ <attribute>
+ <xsl:attribute name="name">
+ <xsl:if test="string-length($parent) > 0">
+ <xsl:value-of select="$parent"/>
+ <xsl:text>:</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$attrname"/>
+ </xsl:attribute>
+ <xsl:for-each select="ancestor::namespace/resource[@name=$defname]">
+ <xsl:for-each select="attribute[@name=$attrname]">
+ <xsl:attribute name="id">
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id">
+ <xsl:value-of select="@tokenid"/>
+ </xsl:with-param>
+ </xsl:call-template>
+ </xsl:attribute>
+ </xsl:for-each>
+ </xsl:for-each>
+ </attribute>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="attribute">
+ <attribute>
+ <xsl:call-template name="attributeinner"/>
+ </attribute>
+ </xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/checkmodel.xsl b/writerfilter/source/ooxml/checkmodel.xsl
new file mode 100644
index 000000000000..b40544f796cf
--- /dev/null
+++ b/writerfilter/source/ooxml/checkmodel.xsl
@@ -0,0 +1,167 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xml:space="default" xml:indent="true">
+ <xsl:output method="text" />
+
+
+ <xsl:template name="noannotation">
+ <xsl:for-each select="//namespace">
+ <xsl:variable name="nsname" select="@name"/>
+ <xsl:value-of select="./rng:grammar/@ns"/>
+ <xsl:text>&#xa;</xsl:text>
+ <xsl:for-each select=".//rng:define">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:if test="not(ancestor::namespace//resource[@name=$name])">
+ <xsl:text>noannotation: </xsl:text>
+ <xsl:value-of select="$nsname"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="checkmodel">
+ <xsl:for-each select="//namespace">
+ <xsl:variable name="nsname" select="@name"/>
+ <xsl:for-each select=".//rng:define">
+ <xsl:call-template name="orphanedprops"/>
+ <xsl:variable name="definename" select="@name"/>
+ <xsl:if test="not(ancestor::namespace//resource[@name=$definename])">
+ <xsl:text>no annotation: </xsl:text>
+ <xsl:value-of select="$nsname"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$definename"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:for-each select=".//rng:element">
+ <xsl:variable name="elementname" select="@name"/>
+ <xsl:for-each select="ancestor::namespace//resource[@name=$definename and @resource='Properties']">
+ <xsl:if test="not(.//element[@name=$elementname])">
+ <xsl:text>missing element: </xsl:text>
+ <xsl:value-of select="$nsname"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$definename"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$elementname"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:call-template name="orphanedprops"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ <xsl:for-each select=".//rng:attribute">
+ <xsl:variable name="attributename" select="@name"/>
+ <xsl:for-each select="ancestor::namespace//resource[@name=$definename and @resource='Properties']">
+ <xsl:if test="not(.//attribute[@name=$attributename])">
+ <xsl:text>missing attribute: </xsl:text>
+ <xsl:value-of select="$nsname"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$definename"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$attributename"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:call-template name="orphanedprops"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:key name="defines-with-name" match="rng:define" use="@name"/>
+
+ <xsl:template name="defineforref">
+ <xsl:variable name="grammarid" select="generate-id(ancestor::grammar)"/>
+ <xsl:variable name="defineingrammar" select="key('defines-with-name', @name)[generate-id(ancestor::grammar) = $grammarid]"/>
+ <xsl:choose>
+ <xsl:when test="$defineingrammar">
+ <xsl:value-of select="$defineingrammar"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="key('defines-with-name', @name)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="contextresource">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:value-of select="ancestor::namespace//resource[@name=$name]/@resource"/>
+ </xsl:template>
+
+ <xsl:template name="orphanedprops">
+ <xsl:variable name="nsname" select="ancestor::namespace/@name"/>
+ <xsl:for-each select=".//rng:ref[not (ancestor::rng:element or ancestor::rng:attribute)]">
+ <xsl:variable name="defineresource">
+ <xsl:for-each select="ancestor::rng:define">
+ <xsl:call-template name="contextresource"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="definename" select="ancestor::rng:define/@name"/>
+ <xsl:variable name="mydefine">
+ <xsl:copy>
+ <xsl:call-template name="defineforref"/>
+ </xsl:copy>
+ </xsl:variable>
+ <xsl:variable name="myresource">
+ <xsl:call-template name="contextresource"/>
+ </xsl:variable>
+ <xsl:if test="$myresource = 'Properties'">
+ <xsl:choose>
+ <xsl:when test="$defineresource = 'Properties'"/>
+ <xsl:when test="$defineresource = 'Stream'"/>
+ <xsl:otherwise>
+ <xsl:text>orphaned properties: </xsl:text>
+ <xsl:value-of select="$nsname"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="$definename"/>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="$defineresource"/>
+ <xsl:text>)-&gt;</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>(</xsl:text>
+ <xsl:value-of select="$myresource"/>
+ <xsl:text>)&#xa;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template match="/">
+ <out>
+ <xsl:call-template name="checkmodel"/>
+ </out>
+ </xsl:template>
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/dummyannotate.xsl b/writerfilter/source/ooxml/dummyannotate.xsl
new file mode 100644
index 000000000000..0fcc1e0dcbc7
--- /dev/null
+++ b/writerfilter/source/ooxml/dummyannotate.xsl
@@ -0,0 +1,845 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xml:space="default" xml:indent="true">
+ <xsl:output method="xml" />
+
+ <xsl:template match="rng:define" mode="dummydoc">
+<xsl:processing-instruction name="mso-application">progid="Word.Document"</xsl:processing-instruction>
+<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage">
+ <pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="512">
+ <pkg:xmlData>
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
+ <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/>
+ <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/>
+ <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/>
+ </Relationships>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/_rels/document.xml.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="256">
+ <pkg:xmlData>
+ <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
+ <Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings" Target="webSettings.xml"/>
+ <Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings" Target="settings.xml"/>
+ <Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/>
+ <Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/>
+ <Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable" Target="fontTable.xml"/>
+ </Relationships>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/document.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml">
+ <pkg:xmlData>
+ <w:document xmlns:ve="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml">
+ <w:body>
+ <xsl:for-each select=".//rng:element">
+ <w:p>
+ <w:pPr/>
+ <w:r>
+ <w:rPr>
+ <xsl:element name="w:{@name}"/>
+ </w:rPr>
+ <xsl:element name="w:t">
+ <xsl:value-of select="@name"/>
+ </xsl:element>
+ </w:r>
+ </w:p>
+ </xsl:for-each>
+ <w:sectPr w:rsidR="00164A8D" w:rsidSect="008B7467">
+ <w:pgSz w:w="11906" w:h="16838"/>
+ <w:pgMar w:top="1417" w:right="1417" w:bottom="1134" w:left="1417" w:header="708" w:footer="708" w:gutter="0"/>
+ <w:cols w:space="708"/>
+ <w:docGrid w:linePitch="360"/>
+ </w:sectPr>
+ </w:body>
+ </w:document>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/theme/theme1.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.theme+xml">
+ <pkg:xmlData>
+ <a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme">
+ <a:themeElements>
+ <a:clrScheme name="Office">
+ <a:dk1>
+ <a:sysClr val="windowText" lastClr="000000"/>
+ </a:dk1>
+ <a:lt1>
+ <a:sysClr val="window" lastClr="FFFFFF"/>
+ </a:lt1>
+ <a:dk2>
+ <a:srgbClr val="1F497D"/>
+ </a:dk2>
+ <a:lt2>
+ <a:srgbClr val="EEECE1"/>
+ </a:lt2>
+ <a:accent1>
+ <a:srgbClr val="4F81BD"/>
+ </a:accent1>
+ <a:accent2>
+ <a:srgbClr val="C0504D"/>
+ </a:accent2>
+ <a:accent3>
+ <a:srgbClr val="9BBB59"/>
+ </a:accent3>
+ <a:accent4>
+ <a:srgbClr val="8064A2"/>
+ </a:accent4>
+ <a:accent5>
+ <a:srgbClr val="4BACC6"/>
+ </a:accent5>
+ <a:accent6>
+ <a:srgbClr val="F79646"/>
+ </a:accent6>
+ <a:hlink>
+ <a:srgbClr val="0000FF"/>
+ </a:hlink>
+ <a:folHlink>
+ <a:srgbClr val="800080"/>
+ </a:folHlink>
+ </a:clrScheme>
+ <a:fontScheme name="Office">
+ <a:majorFont>
+ <a:latin typeface="Cambria"/>
+ <a:ea typeface=""/>
+ <a:cs typeface=""/>
+ <a:font script="Jpan" typeface="MS ゴシック"/>
+ <a:font script="Hang" typeface="ë§‘ì€ ê³ ë”•"/>
+ <a:font script="Hans" typeface="宋体"/>
+ <a:font script="Hant" typeface="新細明體"/>
+ <a:font script="Arab" typeface="Times New Roman"/>
+ <a:font script="Hebr" typeface="Times New Roman"/>
+ <a:font script="Thai" typeface="Angsana New"/>
+ <a:font script="Ethi" typeface="Nyala"/>
+ <a:font script="Beng" typeface="Vrinda"/>
+ <a:font script="Gujr" typeface="Shruti"/>
+ <a:font script="Khmr" typeface="MoolBoran"/>
+ <a:font script="Knda" typeface="Tunga"/>
+ <a:font script="Guru" typeface="Raavi"/>
+ <a:font script="Cans" typeface="Euphemia"/>
+ <a:font script="Cher" typeface="Plantagenet Cherokee"/>
+ <a:font script="Yiii" typeface="Microsoft Yi Baiti"/>
+ <a:font script="Tibt" typeface="Microsoft Himalaya"/>
+ <a:font script="Thaa" typeface="MV Boli"/>
+ <a:font script="Deva" typeface="Mangal"/>
+ <a:font script="Telu" typeface="Gautami"/>
+ <a:font script="Taml" typeface="Latha"/>
+ <a:font script="Syrc" typeface="Estrangelo Edessa"/>
+ <a:font script="Orya" typeface="Kalinga"/>
+ <a:font script="Mlym" typeface="Kartika"/>
+ <a:font script="Laoo" typeface="DokChampa"/>
+ <a:font script="Sinh" typeface="Iskoola Pota"/>
+ <a:font script="Mong" typeface="Mongolian Baiti"/>
+ <a:font script="Viet" typeface="Times New Roman"/>
+ <a:font script="Uigh" typeface="Microsoft Uighur"/>
+ </a:majorFont>
+ <a:minorFont>
+ <a:latin typeface="Calibri"/>
+ <a:ea typeface=""/>
+ <a:cs typeface=""/>
+ <a:font script="Jpan" typeface="ï¼­ï¼³ 明æœ"/>
+ <a:font script="Hang" typeface="ë§‘ì€ ê³ ë”•"/>
+ <a:font script="Hans" typeface="宋体"/>
+ <a:font script="Hant" typeface="新細明體"/>
+ <a:font script="Arab" typeface="Arial"/>
+ <a:font script="Hebr" typeface="Arial"/>
+ <a:font script="Thai" typeface="Cordia New"/>
+ <a:font script="Ethi" typeface="Nyala"/>
+ <a:font script="Beng" typeface="Vrinda"/>
+ <a:font script="Gujr" typeface="Shruti"/>
+ <a:font script="Khmr" typeface="DaunPenh"/>
+ <a:font script="Knda" typeface="Tunga"/>
+ <a:font script="Guru" typeface="Raavi"/>
+ <a:font script="Cans" typeface="Euphemia"/>
+ <a:font script="Cher" typeface="Plantagenet Cherokee"/>
+ <a:font script="Yiii" typeface="Microsoft Yi Baiti"/>
+ <a:font script="Tibt" typeface="Microsoft Himalaya"/>
+ <a:font script="Thaa" typeface="MV Boli"/>
+ <a:font script="Deva" typeface="Mangal"/>
+ <a:font script="Telu" typeface="Gautami"/>
+ <a:font script="Taml" typeface="Latha"/>
+ <a:font script="Syrc" typeface="Estrangelo Edessa"/>
+ <a:font script="Orya" typeface="Kalinga"/>
+ <a:font script="Mlym" typeface="Kartika"/>
+ <a:font script="Laoo" typeface="DokChampa"/>
+ <a:font script="Sinh" typeface="Iskoola Pota"/>
+ <a:font script="Mong" typeface="Mongolian Baiti"/>
+ <a:font script="Viet" typeface="Arial"/>
+ <a:font script="Uigh" typeface="Microsoft Uighur"/>
+ </a:minorFont>
+ </a:fontScheme>
+ <a:fmtScheme name="Office">
+ <a:fillStyleLst>
+ <a:solidFill>
+ <a:schemeClr val="phClr"/>
+ </a:solidFill>
+ <a:gradFill rotWithShape="1">
+ <a:gsLst>
+ <a:gs pos="0">
+ <a:schemeClr val="phClr">
+ <a:tint val="50000"/>
+ <a:satMod val="300000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="35000">
+ <a:schemeClr val="phClr">
+ <a:tint val="37000"/>
+ <a:satMod val="300000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="100000">
+ <a:schemeClr val="phClr">
+ <a:tint val="15000"/>
+ <a:satMod val="350000"/>
+ </a:schemeClr>
+ </a:gs>
+ </a:gsLst>
+ <a:lin ang="16200000" scaled="1"/>
+ </a:gradFill>
+ <a:gradFill rotWithShape="1">
+ <a:gsLst>
+ <a:gs pos="0">
+ <a:schemeClr val="phClr">
+ <a:shade val="51000"/>
+ <a:satMod val="130000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="80000">
+ <a:schemeClr val="phClr">
+ <a:shade val="93000"/>
+ <a:satMod val="130000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="100000">
+ <a:schemeClr val="phClr">
+ <a:shade val="94000"/>
+ <a:satMod val="135000"/>
+ </a:schemeClr>
+ </a:gs>
+ </a:gsLst>
+ <a:lin ang="16200000" scaled="0"/>
+ </a:gradFill>
+ </a:fillStyleLst>
+ <a:lnStyleLst>
+ <a:ln w="9525" cap="flat" cmpd="sng" algn="ctr">
+ <a:solidFill>
+ <a:schemeClr val="phClr">
+ <a:shade val="95000"/>
+ <a:satMod val="105000"/>
+ </a:schemeClr>
+ </a:solidFill>
+ <a:prstDash val="solid"/>
+ </a:ln>
+ <a:ln w="25400" cap="flat" cmpd="sng" algn="ctr">
+ <a:solidFill>
+ <a:schemeClr val="phClr"/>
+ </a:solidFill>
+ <a:prstDash val="solid"/>
+ </a:ln>
+ <a:ln w="38100" cap="flat" cmpd="sng" algn="ctr">
+ <a:solidFill>
+ <a:schemeClr val="phClr"/>
+ </a:solidFill>
+ <a:prstDash val="solid"/>
+ </a:ln>
+ </a:lnStyleLst>
+ <a:effectStyleLst>
+ <a:effectStyle>
+ <a:effectLst>
+ <a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0">
+ <a:srgbClr val="000000">
+ <a:alpha val="38000"/>
+ </a:srgbClr>
+ </a:outerShdw>
+ </a:effectLst>
+ </a:effectStyle>
+ <a:effectStyle>
+ <a:effectLst>
+ <a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0">
+ <a:srgbClr val="000000">
+ <a:alpha val="35000"/>
+ </a:srgbClr>
+ </a:outerShdw>
+ </a:effectLst>
+ </a:effectStyle>
+ <a:effectStyle>
+ <a:effectLst>
+ <a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0">
+ <a:srgbClr val="000000">
+ <a:alpha val="35000"/>
+ </a:srgbClr>
+ </a:outerShdw>
+ </a:effectLst>
+ <a:scene3d>
+ <a:camera prst="orthographicFront">
+ <a:rot lat="0" lon="0" rev="0"/>
+ </a:camera>
+ <a:lightRig rig="threePt" dir="t">
+ <a:rot lat="0" lon="0" rev="1200000"/>
+ </a:lightRig>
+ </a:scene3d>
+ <a:sp3d>
+ <a:bevelT w="63500" h="25400"/>
+ </a:sp3d>
+ </a:effectStyle>
+ </a:effectStyleLst>
+ <a:bgFillStyleLst>
+ <a:solidFill>
+ <a:schemeClr val="phClr"/>
+ </a:solidFill>
+ <a:gradFill rotWithShape="1">
+ <a:gsLst>
+ <a:gs pos="0">
+ <a:schemeClr val="phClr">
+ <a:tint val="40000"/>
+ <a:satMod val="350000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="40000">
+ <a:schemeClr val="phClr">
+ <a:tint val="45000"/>
+ <a:shade val="99000"/>
+ <a:satMod val="350000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="100000">
+ <a:schemeClr val="phClr">
+ <a:shade val="20000"/>
+ <a:satMod val="255000"/>
+ </a:schemeClr>
+ </a:gs>
+ </a:gsLst>
+ <a:path path="circle">
+ <a:fillToRect l="50000" t="-80000" r="50000" b="180000"/>
+ </a:path>
+ </a:gradFill>
+ <a:gradFill rotWithShape="1">
+ <a:gsLst>
+ <a:gs pos="0">
+ <a:schemeClr val="phClr">
+ <a:tint val="80000"/>
+ <a:satMod val="300000"/>
+ </a:schemeClr>
+ </a:gs>
+ <a:gs pos="100000">
+ <a:schemeClr val="phClr">
+ <a:shade val="30000"/>
+ <a:satMod val="200000"/>
+ </a:schemeClr>
+ </a:gs>
+ </a:gsLst>
+ <a:path path="circle">
+ <a:fillToRect l="50000" t="50000" r="50000" b="50000"/>
+ </a:path>
+ </a:gradFill>
+ </a:bgFillStyleLst>
+ </a:fmtScheme>
+ </a:themeElements>
+ <a:objectDefaults/>
+ <a:extraClrSchemeLst/>
+ </a:theme>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/settings.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml">
+ <pkg:xmlData>
+ <w:settings xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main">
+ <w:zoom w:percent="100"/>
+ <w:defaultTabStop w:val="708"/>
+ <w:hyphenationZone w:val="425"/>
+ <w:characterSpacingControl w:val="doNotCompress"/>
+ <w:compat/>
+ <w:rsids>
+ <w:rsidRoot w:val="009E60C2"/>
+ <w:rsid w:val="001D264D"/>
+ <w:rsid w:val="008B7467"/>
+ <w:rsid w:val="009E60C2"/>
+ <w:rsid w:val="00E36106"/>
+ </w:rsids>
+ <m:mathPr>
+ <m:mathFont m:val="Cambria Math"/>
+ <m:brkBin m:val="before"/>
+ <m:brkBinSub m:val="--"/>
+ <m:smallFrac m:val="off"/>
+ <m:dispDef/>
+ <m:lMargin m:val="0"/>
+ <m:rMargin m:val="0"/>
+ <m:defJc m:val="centerGroup"/>
+ <m:wrapIndent m:val="1440"/>
+ <m:intLim m:val="subSup"/>
+ <m:naryLim m:val="undOvr"/>
+ </m:mathPr>
+ <w:themeFontLang w:val="de-DE"/>
+ <w:clrSchemeMapping w:bg1="light1" w:t1="dark1" w:bg2="light2" w:t2="dark2" w:accent1="accent1" w:accent2="accent2" w:accent3="accent3" w:accent4="accent4" w:accent5="accent5" w:accent6="accent6" w:hyperlink="hyperlink" w:followedHyperlink="followedHyperlink"/>
+ <w:shapeDefaults>
+ <o:shapedefaults v:ext="edit" spidmax="1026"/>
+ <o:shapelayout v:ext="edit">
+ <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout>
+ </w:shapeDefaults>
+ <w:decimalSymbol w:val=","/>
+ <w:listSeparator w:val=";"/>
+ </w:settings>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/fontTable.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml">
+ <pkg:xmlData>
+ <w:fonts xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
+ <w:font w:name="Calibri">
+ <w:panose1 w:val="020F0502020204030204"/>
+ <w:charset w:val="00"/>
+ <w:family w:val="swiss"/>
+ <w:pitch w:val="variable"/>
+ <w:sig w:usb0="A00002EF" w:usb1="4000207B" w:usb2="00000000" w:usb3="00000000" w:csb0="0000009F" w:csb1="00000000"/>
+ </w:font>
+ <w:font w:name="Times New Roman">
+ <w:panose1 w:val="02020603050405020304"/>
+ <w:charset w:val="00"/>
+ <w:family w:val="roman"/>
+ <w:pitch w:val="variable"/>
+ <w:sig w:usb0="20002A87" w:usb1="80000000" w:usb2="00000008" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/>
+ </w:font>
+ <w:font w:name="Cambria">
+ <w:panose1 w:val="02040503050406030204"/>
+ <w:charset w:val="00"/>
+ <w:family w:val="roman"/>
+ <w:pitch w:val="variable"/>
+ <w:sig w:usb0="A00002EF" w:usb1="4000004B" w:usb2="00000000" w:usb3="00000000" w:csb0="0000009F" w:csb1="00000000"/>
+ </w:font>
+ </w:fonts>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/webSettings.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml">
+ <pkg:xmlData>
+ <w:webSettings xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
+ <w:optimizeForBrowser/>
+ </w:webSettings>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/docProps/app.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.extended-properties+xml" pkg:padding="256">
+ <pkg:xmlData>
+ <Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes">
+ <Template>Normal.dotm</Template>
+ <TotalTime>0</TotalTime>
+ <Pages>1</Pages>
+ <Words>0</Words>
+ <Characters>4</Characters>
+ <Application>Microsoft Office Word</Application>
+ <DocSecurity>0</DocSecurity>
+ <Lines>1</Lines>
+ <Paragraphs>1</Paragraphs>
+ <ScaleCrop>false</ScaleCrop>
+ <Company>Sun Microsystems GmbH</Company>
+ <LinksUpToDate>false</LinksUpToDate>
+ <CharactersWithSpaces>4</CharactersWithSpaces>
+ <SharedDoc>false</SharedDoc>
+ <HyperlinksChanged>false</HyperlinksChanged>
+ <AppVersion>12.0000</AppVersion>
+ </Properties>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/docProps/core.xml" pkg:contentType="application/vnd.openxmlformats-package.core-properties+xml" pkg:padding="256">
+ <pkg:xmlData>
+ <cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <dc:title/>
+ <dc:subject/>
+ <dc:creator>Administrator</dc:creator>
+ <cp:keywords/>
+ <dc:description/>
+ <cp:lastModifiedBy>Administrator</cp:lastModifiedBy>
+ <cp:revision>1</cp:revision>
+ <dcterms:created xsi:type="dcterms:W3CDTF">2007-04-02T14:46:00Z</dcterms:created>
+ <dcterms:modified xsi:type="dcterms:W3CDTF">2007-04-02T14:47:00Z</dcterms:modified>
+ </cp:coreProperties>
+ </pkg:xmlData>
+ </pkg:part>
+ <pkg:part pkg:name="/word/styles.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml">
+ <pkg:xmlData>
+ <w:styles xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
+ <w:docDefaults>
+ <w:rPrDefault>
+ <w:rPr>
+ <w:rFonts w:asciiTheme="minorHAnsi" w:eastAsiaTheme="minorHAnsi" w:hAnsiTheme="minorHAnsi" w:cstheme="minorBidi"/>
+ <w:sz w:val="22"/>
+ <w:szCs w:val="22"/>
+ <w:lang w:val="de-DE" w:eastAsia="en-US" w:bidi="ar-SA"/>
+ </w:rPr>
+ </w:rPrDefault>
+ <w:pPrDefault>
+ <w:pPr>
+ <w:spacing w:after="200" w:line="276" w:lineRule="auto"/>
+ </w:pPr>
+ </w:pPrDefault>
+ </w:docDefaults>
+ <w:latentStyles w:defLockedState="0" w:defUIPriority="99" w:defSemiHidden="1" w:defUnhideWhenUsed="1" w:defQFormat="0" w:count="267">
+ <w:lsdException w:name="Normal" w:semiHidden="0" w:uiPriority="0" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="heading 1" w:semiHidden="0" w:uiPriority="9" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="heading 2" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 3" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 4" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 5" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 6" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 7" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 8" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="heading 9" w:uiPriority="9" w:qFormat="1"/>
+ <w:lsdException w:name="toc 1" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 2" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 3" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 4" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 5" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 6" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 7" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 8" w:uiPriority="39"/>
+ <w:lsdException w:name="toc 9" w:uiPriority="39"/>
+ <w:lsdException w:name="caption" w:uiPriority="35" w:qFormat="1"/>
+ <w:lsdException w:name="Title" w:semiHidden="0" w:uiPriority="10" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Default Paragraph Font" w:uiPriority="1"/>
+ <w:lsdException w:name="Subtitle" w:semiHidden="0" w:uiPriority="11" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Strong" w:semiHidden="0" w:uiPriority="22" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Emphasis" w:semiHidden="0" w:uiPriority="20" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Table Grid" w:semiHidden="0" w:uiPriority="59" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Placeholder Text" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="No Spacing" w:semiHidden="0" w:uiPriority="1" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Light Shading" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 2" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Shading Accent 1" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List Accent 1" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid Accent 1" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1 Accent 1" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2 Accent 1" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1 Accent 1" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Revision" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="List Paragraph" w:semiHidden="0" w:uiPriority="34" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Quote" w:semiHidden="0" w:uiPriority="29" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Intense Quote" w:semiHidden="0" w:uiPriority="30" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Medium List 2 Accent 1" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1 Accent 1" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2 Accent 1" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3 Accent 1" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List Accent 1" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading Accent 1" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List Accent 1" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid Accent 1" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Shading Accent 2" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List Accent 2" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid Accent 2" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1 Accent 2" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2 Accent 2" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1 Accent 2" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 2 Accent 2" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1 Accent 2" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2 Accent 2" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3 Accent 2" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List Accent 2" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading Accent 2" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List Accent 2" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid Accent 2" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Shading Accent 3" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List Accent 3" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid Accent 3" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1 Accent 3" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2 Accent 3" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1 Accent 3" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 2 Accent 3" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1 Accent 3" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2 Accent 3" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3 Accent 3" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List Accent 3" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading Accent 3" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List Accent 3" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid Accent 3" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Shading Accent 4" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List Accent 4" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid Accent 4" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1 Accent 4" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2 Accent 4" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1 Accent 4" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 2 Accent 4" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1 Accent 4" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2 Accent 4" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3 Accent 4" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List Accent 4" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading Accent 4" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List Accent 4" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid Accent 4" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Shading Accent 5" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List Accent 5" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid Accent 5" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1 Accent 5" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2 Accent 5" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1 Accent 5" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 2 Accent 5" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1 Accent 5" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2 Accent 5" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3 Accent 5" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List Accent 5" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading Accent 5" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List Accent 5" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid Accent 5" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Shading Accent 6" w:semiHidden="0" w:uiPriority="60" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light List Accent 6" w:semiHidden="0" w:uiPriority="61" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Light Grid Accent 6" w:semiHidden="0" w:uiPriority="62" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 1 Accent 6" w:semiHidden="0" w:uiPriority="63" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Shading 2 Accent 6" w:semiHidden="0" w:uiPriority="64" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 1 Accent 6" w:semiHidden="0" w:uiPriority="65" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium List 2 Accent 6" w:semiHidden="0" w:uiPriority="66" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 1 Accent 6" w:semiHidden="0" w:uiPriority="67" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 2 Accent 6" w:semiHidden="0" w:uiPriority="68" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Medium Grid 3 Accent 6" w:semiHidden="0" w:uiPriority="69" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Dark List Accent 6" w:semiHidden="0" w:uiPriority="70" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Shading Accent 6" w:semiHidden="0" w:uiPriority="71" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful List Accent 6" w:semiHidden="0" w:uiPriority="72" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Colorful Grid Accent 6" w:semiHidden="0" w:uiPriority="73" w:unhideWhenUsed="0"/>
+ <w:lsdException w:name="Subtle Emphasis" w:semiHidden="0" w:uiPriority="19" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Intense Emphasis" w:semiHidden="0" w:uiPriority="21" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Subtle Reference" w:semiHidden="0" w:uiPriority="31" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Intense Reference" w:semiHidden="0" w:uiPriority="32" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Book Title" w:semiHidden="0" w:uiPriority="33" w:unhideWhenUsed="0" w:qFormat="1"/>
+ <w:lsdException w:name="Bibliography" w:uiPriority="37"/>
+ <w:lsdException w:name="TOC Heading" w:uiPriority="39" w:qFormat="1"/>
+ </w:latentStyles>
+ <w:style w:type="paragraph" w:default="1" w:styleId="Normal">
+ <w:name w:val="Normal"/>
+ <w:qFormat/>
+ <w:rsid w:val="008B7467"/>
+ </w:style>
+ <w:style w:type="character" w:default="1" w:styleId="DefaultParagraphFont">
+ <w:name w:val="Default Paragraph Font"/>
+ <w:uiPriority w:val="1"/>
+ <w:semiHidden/>
+ <w:unhideWhenUsed/>
+ </w:style>
+ <w:style w:type="table" w:default="1" w:styleId="TableNormal">
+ <w:name w:val="Normal Table"/>
+ <w:uiPriority w:val="99"/>
+ <w:semiHidden/>
+ <w:unhideWhenUsed/>
+ <w:qFormat/>
+ <w:tblPr>
+ <w:tblInd w:w="0" w:type="dxa"/>
+ <w:tblCellMar>
+ <w:top w:w="0" w:type="dxa"/>
+ <w:left w:w="108" w:type="dxa"/>
+ <w:bottom w:w="0" w:type="dxa"/>
+ <w:right w:w="108" w:type="dxa"/>
+ </w:tblCellMar>
+ </w:tblPr>
+ </w:style>
+ <w:style w:type="numbering" w:default="1" w:styleId="NoList">
+ <w:name w:val="No List"/>
+ <w:uiPriority w:val="99"/>
+ <w:semiHidden/>
+ <w:unhideWhenUsed/>
+ </w:style>
+ </w:styles>
+ </pkg:xmlData>
+ </pkg:part>
+</pkg:package>
+ </xsl:template>
+
+ <xsl:template match="rng:define" mode="attrvalue">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:element name="resource">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="resource">List</xsl:attribute>
+ <xsl:for-each select=".//rng:value">
+ <xsl:element name="value">
+ <xsl:attribute name="tokenid">
+ <xsl:text>ooxml:Value_</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="."/>
+ </xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="rng:define" mode="resourcesPropertySetValue">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:element name="resource">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="resource">
+ <xsl:text>Properties</xsl:text>
+ </xsl:attribute>
+ <xsl:for-each select=".//rng:element">
+ <xsl:element name="element">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="tokenid">
+ <xsl:text>ooxml:</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ </xsl:element>
+ </xsl:for-each>
+ <xsl:for-each select=".//rng:attribute">
+ <xsl:element name="attribute">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="tokenid">
+ <xsl:text>ooxml:</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="rng:define" mode="resourcevalues">
+ <xsl:variable name="definename" select="@name"/>
+ <xsl:element name="resource">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="resource">List</xsl:attribute>
+ <xsl:for-each select=".//rng:value">
+ <xsl:element name="value">
+ <xsl:attribute name="name">
+ <xsl:value-of select="."/>
+ </xsl:attribute>
+ <xsl:attribute name="tokenid">
+ <xsl:text>ooxml:Value_</xsl:text>
+ <xsl:value-of select="$definename"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="."/>
+ </xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="rng:define" mode="tabledoc" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
+ <xsl:for-each select=".//rng:element">
+ <w:tbl>
+ <w:tblPr>
+ <xsl:element name="w:{@name}"/>
+ </w:tblPr>
+ <w:tr>
+ <w:tc>
+ <w:tcPr/>
+ <w:p >
+ <w:pPr>
+ <w:rPr/>
+ </w:pPr>
+ <w:r><w:t><xsl:value-of select="@name"/></w:t></w:r>
+ </w:p>
+ </w:tc>
+ </w:tr>
+ </w:tbl>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:key name="resources" match="resource" use="@resource"/>
+
+ <xsl:template name="resources">
+ <xsl:for-each select="//resource">
+ <xsl:if test="generate-id(.) = generate-id(key('resources', @resource)[1])">
+ <xsl:element name="resource">
+ <xsl:attribute name="resource">
+ <xsl:value-of select="@resource"/>
+ </xsl:attribute>
+ </xsl:element>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="genfastresxsl">
+ <xsl:for-each select="//namespace[not(@name = 'wml')]">
+ <xsl:text>
+sed "s/wml/</xsl:text>
+<xsl:value-of select="@name"/>
+<xsl:text>/" &lt; fastresourcesimpl_wml.xsl &gt; fastresourcesimpl_</xsl:text>
+<xsl:value-of select="@name"/>
+<xsl:text>.xsl</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="genresxsl">
+ <xsl:for-each select="//namespace">
+ <xsl:text>
+sed "s/wml/</xsl:text>
+<xsl:value-of select="@name"/>
+<xsl:text>/;s/_WML_/_</xsl:text>
+<xsl:value-of select="translate(@name, 'abcdefghijklmnopqrstuvwxyz-', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_')"/>
+<xsl:text>_/" &lt; fastresources_.xsl &gt; fastresources_</xsl:text>
+<xsl:value-of select="@name"/>
+<xsl:text>.xsl</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="findpath">
+ <xsl:param name="path"/>
+ <xsl:variable name="name" select="@name"/>
+ <xsl:if test="not(contains($path, concat(@name, ',')))">
+ <xsl:for-each select="ancestor::rng:grammar//rng:ref[@name=$name]">
+ <xsl:for-each select="ancestor::rng:define">
+ <xsl:call-template name="findpath">
+ <xsl:with-param name="path" select="concat($path, @name, ',')"/>
+ </xsl:call-template>
+ <xsl:value-of select="@name"/>
+ <xsl:text> -> </xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template match="/">
+ <out>
+ <xsl:apply-templates select="//rng:define[@name='CT_DocGrid']"
+ mode='resourcesPropertySetValue'/>
+ </out>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/effort.xsl b/writerfilter/source/ooxml/effort.xsl
new file mode 100644
index 000000000000..3dfc102e0780
--- /dev/null
+++ b/writerfilter/source/ooxml/effort.xsl
@@ -0,0 +1,46 @@
+<?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">
+
+<xsl:output method="text"/>
+
+<xsl:template match="/">
+ <xsl:text>Namespace,Define,Name,Tag,Done,Planned,qname-count&#xa;</xsl:text>
+ <xsl:for-each select="/todo/attribute|/todo/element">
+ <xsl:variable name="namespace" select="@namespace"/>
+ <xsl:variable name="define" select="@define"/>
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="tag" select="@tag"/>
+
+ <xsl:for-each select=".//status">
+ <xsl:value-of select="$namespace"/>
+ <xsl:text>,</xsl:text>
+ <xsl:value-of select="$define"/>
+ <xsl:text>,</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>,</xsl:text>
+ <xsl:value-of select="$tag"/>
+ <xsl:text>,</xsl:text>
+ <xsl:value-of select="@done"/>
+ <xsl:text>,</xsl:text>
+ <xsl:value-of select="@planned"/>
+ <xsl:text>,</xsl:text>
+ <xsl:value-of select="@qname-count"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:if test="not(.//status)">
+ <xsl:value-of select="$namespace"/>
+ <xsl:text>,</xsl:text>
+ <xsl:value-of select="$define"/>
+ <xsl:text>,</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>,</xsl:text>
+ <xsl:value-of select="$tag"/>
+ <xsl:text>,0,0.5,1&#xa;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/efforts.sh b/writerfilter/source/ooxml/efforts.sh
new file mode 100755
index 000000000000..f42a30d5b2fd
--- /dev/null
+++ b/writerfilter/source/ooxml/efforts.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+./status.sh | xmllint --format - | xsltproc todo.xsl - | xsltproc effort.xsl -
diff --git a/writerfilter/source/ooxml/factory.xsl b/writerfilter/source/ooxml/factory.xsl
new file mode 100644
index 000000000000..544c150021c8
--- /dev/null
+++ b/writerfilter/source/ooxml/factory.xsl
@@ -0,0 +1,89 @@
+<!--
+/*************************************************************************
+ *
+ 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: fastresources_wml.xsl,v $
+
+ $Revision: 1.3 $
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="factorytools.xsl"/>
+
+ <xsl:template match="/">
+ <xsl:text>
+#include "OOXMLFactory.hxx"</xsl:text>
+ <xsl:call-template name="factoryincludes"/>
+ <xsl:text>
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="factoryfornamespace"/>
+ <xsl:text>
+/// @endcond
+}}
+</xsl:text>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/factory_ns.xsl b/writerfilter/source/ooxml/factory_ns.xsl
new file mode 100644
index 000000000000..0349d832128d
--- /dev/null
+++ b/writerfilter/source/ooxml/factory_ns.xsl
@@ -0,0 +1,164 @@
+<!--
+/*************************************************************************
+ *
+ 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: fastresources_wml.xsl,v $
+
+ $Revision: 1.3 $
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="factorytools.xsl"/>
+
+<xsl:template name="factoryactiondecls">
+ <xsl:variable name="ns" select="@name"/>
+ <xsl:for-each select="resource/action[not(@name='characters')]">
+ <xsl:sort select="@name"/>
+ <xsl:if test="generate-id(key('actions', @name)[ancestor::namespace/@name=$ns][1]) = generate-id(.)">
+ <xsl:text>
+ void </xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>Action(OOXMLFastContextHandler * pHandler</xsl:text>
+ <xsl:text>);</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+ virtual void charactersAction(OOXMLFastContextHandler * pHandler, const ::rtl::OUString &amp; sText);</xsl:text>
+</xsl:template>
+
+<!-- factorydecl -->
+<xsl:template name="factorydecl">
+ <xsl:variable name="classname">
+ <xsl:call-template name="factoryclassname"/>
+ </xsl:variable>
+ <xsl:text>
+class </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text> : public OOXMLFactory_ns
+{
+public:
+ typedef boost::shared_ptr &lt; OOXMLFactory_ns &gt; Pointer_t;
+
+ static Pointer_t getInstance();
+
+ virtual AttributeToResourceMapPointer createAttributeToResourceMap(Id nId);
+ virtual ListValueMapPointer createListValueMap(Id nId);
+ virtual CreateElementMapPointer createCreateElementMap(Id nId);
+ virtual TokenToIdMapPointer createTokenToIdMap(Id nId);
+ virtual string getDefineName(Id nId) const;</xsl:text>
+ <xsl:call-template name="factoryactiondecls"/>
+ virtual void attributeAction(OOXMLFastContextHandler * pHandler, Token_t nToken, OOXMLValue::Pointer_t pValue);
+
+#ifdef DEBUG_FACTORY
+ virtual string getName() const;
+#endif
+ <xsl:text>
+
+ virtual ~</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>();
+
+protected:
+ static Pointer_t m_pInstance;
+
+ </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>();
+};
+ </xsl:text>
+</xsl:template>
+
+ <xsl:template match="/">
+ <xsl:variable name="ns" select="substring-before(substring-after($file, 'OOXMLFactory_'), '.hxx')"/>
+ <xsl:variable name="incguard">
+ <xsl:text>INCLUDED_OOXML_FACTORY_</xsl:text>
+ <xsl:value-of select="translate($ns, 'abcdefghijklmnopqrstuvwxyz-', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_')"/>
+ <xsl:text>_HXX</xsl:text>
+ </xsl:variable>
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef </xsl:text>
+ <xsl:value-of select="$incguard"/>
+ <xsl:text>
+#define </xsl:text>
+ <xsl:value-of select="$incguard"/>
+ <xsl:text>
+#include "OOXMLFactory.hxx"
+#include "OOXMLFactory_generated.hxx"
+#include "OOXMLnamespaceids.hxx"
+#include "resourceids.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:for-each select="/model/namespace[@name=$ns]">
+ <xsl:call-template name="factorydecl"/>
+ </xsl:for-each>
+ <xsl:text>
+/// @endcond
+}}
+#endif //</xsl:text>
+ <xsl:value-of select="$incguard"/>
+ <xsl:text>&#xa;</xsl:text>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/factory_values.xsl b/writerfilter/source/ooxml/factory_values.xsl
new file mode 100644
index 000000000000..4960f58e6b67
--- /dev/null
+++ b/writerfilter/source/ooxml/factory_values.xsl
@@ -0,0 +1,100 @@
+<!--
+/*************************************************************************
+ *
+ 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: fastresources_wml.xsl,v $
+
+ $Revision: 1.3 $
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="factorytools.xsl"/>
+
+ <!--
+ Generates constant declarations for attribute values.
+ -->
+ <xsl:template name="valueconstantdecls">
+ <xsl:text>
+extern rtl::OUString
+ </xsl:text>
+ <xsl:call-template name="valuestringname">
+ <xsl:with-param name="string"></xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>;</xsl:text>
+ <xsl:for-each select="//rng:value[generate-id(key('value-with-content', text())[1]) = generate-id(.)]">
+ <xsl:text>
+extern rtl::OUString </xsl:text>
+ <xsl:call-template name="valuestringname">
+ <xsl:with-param name="string" select="."/>
+ </xsl:call-template>
+ <xsl:text>;</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template match="/">
+ <xsl:text>
+#ifndef INCLUDED_FACTORY_VALUES</xsl:text>
+#include &lt;rtl/ustring.hxx&gt;
+
+<xsl:call-template name="valueconstantdecls"/>
+<xsl:text>
+#endif // INCLUDED_FACTORY_VALUES&#xa;</xsl:text>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/factoryimpl.xsl b/writerfilter/source/ooxml/factoryimpl.xsl
new file mode 100644
index 000000000000..781883b761e5
--- /dev/null
+++ b/writerfilter/source/ooxml/factoryimpl.xsl
@@ -0,0 +1,392 @@
+<!--
+/*************************************************************************
+ *
+ 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: fastresources_wml.xsl,v $
+
+ $Revision: 1.3 $
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="factorytools.xsl"/>
+
+ <xsl:key name="resources-with-kind" match="//resource[kind]" use="kind/@name"/>
+ <xsl:key name="sprms-with-code" match="//resource/element[@tokenid]" use="@tokenid"/>
+
+<xsl:template name="factorycreatecontextfromfactory">
+ <xsl:text>
+uno::Reference&lt; xml::sax::XFastContextHandler &gt; OOXMLFactory::createFastChildContextFromFactory
+(OOXMLFastContextHandler * pHandler, OOXMLFactory_ns::Pointer_t pFactory, Token_t Element)
+{
+ uno::Reference &lt; xml::sax::XFastContextHandler &gt; aResult;
+ Id nDefine = pHandler->getDefine();
+
+#ifdef DEBUG_FACTORY
+ debug_logger->startElement("factory.createFastChildContextFromFactory");
+#endif
+
+ if (pFactory.get() != NULL)
+ {
+ CreateElementMapPointer pMap = pFactory-&gt;getCreateElementMap(nDefine);
+ TokenToIdMapPointer pTokenMap = pFactory-&gt;getTokenToIdMap(nDefine);
+
+ if (pMap.get() != NULL)
+ {
+ Id nId = (*pTokenMap)[Element];
+#ifdef DEBUG_FACTORY
+ string sFactoryName(pFactory->getName());
+ string sDefine(pFactory->getDefineName(nDefine));
+ string sElement(fastTokenToId(Element));
+ string sQName((*QNameToString::Instance())(nId));
+
+ debug_logger->attribute("factory-name", sFactoryName);
+ debug_logger->attribute("define", sDefine);
+ debug_logger->attribute("element", sElement);
+ debug_logger->attribute("qname", sQName);
+
+ static char buffer[16];
+ snprintf(buffer, sizeof(buffer), "0x%08" SAL_PRIuUINT32, nId);
+ debug_logger->attribute("idnum", buffer);
+
+ snprintf(buffer, sizeof(buffer), "0x%08" SAL_PRIuUINT32, nDefine);
+ debug_logger->attribute("definenum", buffer);
+#endif
+
+ CreateElement aCreateElement = (*pMap)[Element];
+
+ switch (aCreateElement.m_nResource)
+ {</xsl:text>
+ <xsl:for-each select="/model/namespace/resource">
+ <xsl:if test="generate-id(key('resources', @resource)) = generate-id(.)">
+ <xsl:if test="not(@resource = 'Hex' or
+ @resource = 'Integer' or
+ @resource = 'Boolean' or
+ @resource = 'List' or
+ @resource = 'String')">
+ <xsl:text>
+ case RT_</xsl:text>
+ <xsl:value-of select="@resource"/>
+ <xsl:text>:
+ aResult.set(OOXMLFastHelper&lt;OOXMLFastContextHandler</xsl:text>
+ <xsl:value-of select="@resource"/>
+ <xsl:text>&gt;::createAndSetParentAndDefine(pHandler, Element, nId, aCreateElement.m_nId));
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+ case RT_Any:
+ aResult.set(createFastChildContextFromStart(pHandler, Element));
+ break;
+ default:
+ break;
+ }
+
+ }
+ }
+
+#ifdef DEBUG_FACTORY
+ debug_logger->endElement("factory.createFastChildContextFromFactory");
+#endif
+
+ return aResult;
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:template name="factoryfornamespace">
+ <xsl:text>
+OOXMLFactory_ns::Pointer_t OOXMLFactory::getFactoryForNamespace(Id nId)
+{
+ OOXMLFactory_ns::Pointer_t pResult;
+
+ switch (nId &amp; 0xffff0000)
+ {</xsl:text>
+ <xsl:for-each select="/model/namespace">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name="idfornamespace"/>
+ <xsl:text>:
+ pResult = </xsl:text>
+ <xsl:call-template name="factoryclassname"/>
+ <xsl:text>::getInstance();
+ break;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ default:
+ break;
+ }
+
+ return pResult;
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:template name="factorycreatefromstart">
+ <xsl:text>
+uno::Reference&lt; xml::sax::XFastContextHandler &gt; OOXMLFactory::createFastChildContextFromStart
+(OOXMLFastContextHandler * pHandler, Token_t Element)
+{
+#ifdef DEBUG_FACTORY
+ debug_logger->startElement("factory.createFastChildContextFromStart");
+#endif
+
+ uno::Reference &lt; xml::sax::XFastContextHandler &gt; aResult;
+ OOXMLFactory_ns::Pointer_t pFactory;
+
+</xsl:text>
+ <xsl:for-each select="/model/namespace">
+ <xsl:text>
+ if (! aResult.is())
+ {
+ pFactory = getFactoryForNamespace(</xsl:text>
+ <xsl:call-template name="idfornamespace"/>
+ <xsl:text>);
+ aResult.set(createFastChildContextFromFactory(pHandler, pFactory, Element));
+ }</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+
+#ifdef DEBUG_FACTORY
+ debug_logger->endElement("factory.createFastChildContextFromStart");
+#endif
+ return aResult;
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:template name="fasttokentoid">
+ <xsl:text>
+namespace tokenmap {
+struct token { const char * name; Token_t nToken; };
+class Perfect_Hash
+{
+private:
+ static inline unsigned int hash (const char *str, unsigned int len);
+public:
+ static struct token *in_word_set (const char *str, unsigned int len);
+};
+}
+
+string fastTokenToId(sal_uInt32 nToken)
+{
+ </xsl:text>
+ <xsl:text>
+ string sResult;
+
+ switch (nToken &amp; 0xffff0000)
+ {</xsl:text>
+ <xsl:for-each select="//namespace-alias">
+ <xsl:text>
+ case NS_</xsl:text>
+ <xsl:value-of select="@alias"/>
+ <xsl:text>:
+ sResult += "</xsl:text>
+ <xsl:value-of select="@alias"/>
+ <xsl:text>:";
+ break;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ }
+
+ switch (nToken &amp; 0xffff)
+ {</xsl:text>
+ <xsl:for-each select=".//rng:element[@localname]|.//rng:attribute[@localname]">
+ <xsl:variable name="localname" select="@localname"/>
+ <xsl:if test="generate-id(.) = generate-id(key('same-token-name', $localname)[1])">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name="fastlocalname"/>
+ <xsl:text>:
+ sResult += "</xsl:text>
+ <xsl:value-of select="$localname"/>
+ <xsl:text>";
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+<xsl:text>
+ }
+
+ return sResult;
+}
+ </xsl:text>
+</xsl:template>
+
+ <!--
+ Generates case labels for mapping from token ids to a single kind
+ of sprm.
+
+ @param kind the sprm kind for which to generate the case labels
+ -->
+
+ <xsl:template name="sprmkindcase">
+ <xsl:param name="kind"/>
+ <xsl:for-each select="key('resources-with-kind', $kind)/element">
+ <xsl:if test="generate-id(.) = generate-id(key('sprms-with-code', @tokenid))">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ <xsl:text>: //</xsl:text>
+ <xsl:value-of select="ancestor::resource/@name"/>
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:template>
+
+ <!--
+ Generates SprmKind.
+ -->
+ <xsl:template name="sprmkind">
+ <xsl:text>
+Sprm::Kind SprmKind(sal_uInt32 nSprmCode)
+{
+ Sprm::Kind nResult = Sprm::UNKNOWN;
+
+ switch (nSprmCode)
+ {</xsl:text>
+ <xsl:call-template name="sprmkindcase">
+ <xsl:with-param name="kind">paragraph</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+ nResult = Sprm::PARAGRAPH;
+ break;</xsl:text>
+ <xsl:call-template name="sprmkindcase">
+ <xsl:with-param name="kind">character</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+ nResult = Sprm::CHARACTER;
+ break;</xsl:text>
+ <xsl:call-template name="sprmkindcase">
+ <xsl:with-param name="kind">table</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>
+ nResult = Sprm::TABLE;
+ break;</xsl:text>
+ <xsl:text>
+ default:
+ break;
+ }
+
+ return nResult;
+}</xsl:text>
+ </xsl:template>
+
+<xsl:template name="getfastparser">
+<xsl:text>
+uno::Reference &lt; xml::sax::XFastParser &gt; OOXMLStreamImpl::getFastParser()
+{
+ if (! mxFastParser.is())
+ {
+ uno::Reference &lt; lang::XMultiComponentFactory &gt; xFactory =
+ uno::Reference &lt; lang::XMultiComponentFactory &gt;
+ (mxContext->getServiceManager());
+
+ mxFastParser.set(xFactory->createInstanceWithContext
+ ( ::rtl::OUString::createFromAscii
+ ( "com.sun.star.xml.sax.FastParser" ),
+ mxContext ), uno::UNO_QUERY_THROW);
+</xsl:text>
+<xsl:for-each select="//namespace-alias">
+ <xsl:text>
+ mxFastParser->registerNamespace(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>")), </xsl:text>
+ <xsl:call-template name="namespaceid"/>
+ <xsl:text>);</xsl:text>
+</xsl:for-each>
+<xsl:text>
+ }
+
+ return mxFastParser;
+}
+</xsl:text>
+</xsl:template>
+
+ <xsl:template match="/">
+ <xsl:text>
+#include "OOXMLFactory.hxx"
+#include "OOXMLFastHelper.hxx"
+#include "OOXMLStreamImpl.hxx"
+#include "doctok/sprmids.hxx"
+#include "doctok/resourceids.hxx"
+</xsl:text>
+ <xsl:call-template name="factoryincludes"/>
+ <xsl:text>
+namespace writerfilter {
+namespace ooxml {
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="factorycreatecontextfromfactory"/>
+ <xsl:call-template name="factoryfornamespace"/>
+ <xsl:call-template name="factorycreatefromstart"/>
+ <xsl:call-template name="fasttokentoid"/>
+ <xsl:call-template name="sprmkind"/>
+ <xsl:call-template name="getfastparser"/>
+ <xsl:text>
+/// @endcond
+}}
+</xsl:text>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/factoryimpl_ns.xsl b/writerfilter/source/ooxml/factoryimpl_ns.xsl
new file mode 100644
index 000000000000..adc4c977e1f9
--- /dev/null
+++ b/writerfilter/source/ooxml/factoryimpl_ns.xsl
@@ -0,0 +1,945 @@
+<!--
+/*************************************************************************
+ *
+ 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: fastresources_wml.xsl,v $
+
+ $Revision: 1.3 $
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="factorytools.xsl"/>
+
+<xsl:template name="factorymutex">
+ <xsl:call-template name="factoryclassname"/>
+ <xsl:text>_Mutex</xsl:text>
+</xsl:template>
+
+<xsl:template name="factorymutexdecl">
+ <xsl:variable name="classname">
+ <xsl:call-template name="factoryclassname"/>
+ </xsl:variable>
+ <xsl:text>
+typedef rtl::Static &lt; osl::Mutex, </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text> &gt; </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>_Mutex;
+</xsl:text>
+</xsl:template>
+
+<xsl:template name="factoryconstructor">
+ <xsl:variable name="classname">
+ <xsl:call-template name="factoryclassname"/>
+ </xsl:variable>
+ <xsl:text>
+</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>()
+{
+ // multi-thread-safe mutex for all platforms
+
+ osl::MutexGuard aGuard(</xsl:text>
+ <xsl:call-template name="factorymutex"/>
+ <xsl:text>::get());
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:template name="factorydestructor">
+ <xsl:variable name="classname">
+ <xsl:call-template name="factoryclassname"/>
+ </xsl:variable>
+ <xsl:text>
+</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::~</xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>()
+{
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:template name="factorygetinstance">
+ <xsl:variable name="classname">
+ <xsl:call-template name="factoryclassname"/>
+ </xsl:variable>
+ <xsl:text>
+OOXMLFactory_ns::Pointer_t </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::m_pInstance;
+
+OOXMLFactory_ns::Pointer_t </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>::getInstance()
+{
+ if (m_pInstance.get() == NULL)
+ m_pInstance.reset(new </xsl:text>
+ <xsl:value-of select="$classname"/>
+ <xsl:text>());
+
+ return m_pInstance;
+}
+</xsl:text>
+</xsl:template>
+
+<!--
+ Returns resource for attribute.
+-->
+
+<xsl:template name="resourceforattribute">
+ <xsl:variable name="mynsid" select="generate-id(ancestor::namespace)"/>
+ <xsl:for-each select="rng:ref">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="resource1">
+ <xsl:for-each select="key('context-resource', @name)[generate-id(ancestor::namespace) = $mynsid]">
+ <xsl:value-of select="@resource"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($resource1) > 0">
+ <xsl:value-of select="$resource1"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+ <xsl:call-template name="resourceforattribute"/>
+ </xsl:for-each>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:for-each select=".//rng:text">
+ <xsl:text>String</xsl:text>
+ </xsl:for-each>
+ <xsl:for-each select=".//rng:data[@type='base64Binary']">
+ <xsl:text>String</xsl:text>
+ </xsl:for-each>
+ <xsl:for-each select=".//rng:data[@type='boolean']">
+ <xsl:text>Boolean</xsl:text>
+ </xsl:for-each>
+ <xsl:for-each select=".//rng:data[@type='unsignedInt']">
+ <xsl:text>Integer</xsl:text>
+ </xsl:for-each>
+ <xsl:for-each select=".//rng:data[@type='int']">
+ <xsl:text>Integer</xsl:text>
+ </xsl:for-each>
+</xsl:template>
+
+<!--
+
+creates code block in OOXMLFactory_<namespace>::createAttributeToResourceMap
+for a rng:define
+
+ -->
+<xsl:template name="factoryattributetoresourcemapinner">
+ <xsl:variable name="defname" select="@name"/>
+ <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+ <xsl:call-template name="factoryattributetoresourcemapinner"/>
+ </xsl:for-each>
+ </xsl:for-each>
+
+ <xsl:for-each select=".//rng:attribute">
+ <xsl:if test="position()=1">
+ <xsl:text>
+ // </xsl:text>
+ <xsl:value-of select="$defname"/>
+ </xsl:if>
+ <xsl:variable name="resource">
+ <xsl:call-template name="resourceforattribute"/>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="string-length($resource) > 0">
+ <xsl:variable name="refdefine1">
+ <xsl:for-each select="rng:ref">
+ <xsl:variable name="refname" select="@name"/>
+ <xsl:for-each select="ancestor::rng:grammar/rng:define[@name=$refname]">
+ <xsl:call-template name="idfordefine"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="refdefine">
+ <xsl:choose>
+ <xsl:when test="string-length($refdefine1) > 0">
+ <xsl:value-of select="$refdefine1"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>0</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:text>
+ (*pMap)[</xsl:text>
+ <xsl:call-template name="fasttoken"/>
+ <xsl:text>] = AttributeInfo(RT_</xsl:text>
+ <xsl:value-of select="$resource"/>
+ <xsl:text>, </xsl:text>
+ <xsl:value-of select="$refdefine"/>
+ <xsl:text>);</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>
+ // empty resource: </xsl:text>
+ <xsl:call-template name="fasttoken"/>
+ </xsl:otherwise>
+ </xsl:choose>
+
+ </xsl:for-each>
+</xsl:template>
+
+<!-- factoryattributetoresourcemap -->
+<xsl:template name="factoryattributetoresourcemap">
+ <xsl:text>
+AttributeToResourceMapPointer </xsl:text>
+ <xsl:call-template name="factoryclassname"/>
+ <xsl:text>::createAttributeToResourceMap(Id nId)
+{
+ AttributeToResourceMapPointer pMap(new AttributeToResourceMap());
+
+ switch (nId)
+ {</xsl:text>
+ <xsl:for-each select="rng:grammar/rng:define">
+ <xsl:variable name="inner">
+ <xsl:call-template name="factoryattributetoresourcemapinner"/>
+ </xsl:variable>
+ <xsl:if test="string-length($inner) > 0">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="caselabeldefine"/>
+ <xsl:value-of select="$inner"/>
+ <xsl:text>
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ default:
+ break;
+ }
+
+ return pMap;
+}
+</xsl:template>
+
+<!-- factorylistvaluemap -->
+<xsl:template name="factorylistvaluemap">
+ <xsl:text>
+ListValueMapPointer </xsl:text>
+ <xsl:call-template name="factoryclassname"/>
+ <xsl:text>::createListValueMap(Id nId)
+{
+ ListValueMapPointer pMap(new ListValueMap());
+
+ switch (nId)
+ {</xsl:text>
+ <xsl:for-each select="resource[@resource='List']">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="caselabeldefine"/>
+ <xsl:for-each select="value">
+ <xsl:text>
+ (*pMap)[</xsl:text>
+ <xsl:call-template name="valuestringname">
+ <xsl:with-param name="string" select="text()"/>
+ </xsl:call-template>
+ <xsl:text>] = </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ <xsl:text>;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ break;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+ default:
+ break;
+ }
+
+ return pMap;
+}</xsl:text>
+</xsl:template>
+
+<!-- factoryelementtoresorucemapinner -->
+<xsl:template name="factorycreateelementmapinner">
+ <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="block">
+ <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+ <xsl:call-template name="factorycreateelementmapinner"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="block1">
+ <xsl:choose>
+ <xsl:when test="string-length($block) = 0">
+ <xsl:for-each select="ancestor::model/namespace/rng:grammar/rng:define[@name=$name]">
+ <xsl:call-template name="factorycreateelementmapinner"/>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$block"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:if test="string-length($block1) > 0">
+ <xsl:text>
+ /* ref: </xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>*/</xsl:text>
+ <xsl:value-of select="$block1"/>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:for-each select=".//rng:element">
+ <xsl:variable name="resource">
+ <xsl:for-each select="rng:ref">
+ <xsl:call-template name="contextresource"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:if test="string-length($resource) > 0">
+ <xsl:text>
+ (*pMap)[</xsl:text>
+ <xsl:call-template name="fasttoken"/>
+ <xsl:text>] = CreateElement(RT_</xsl:text>
+ <xsl:value-of select="$resource"/>
+ <xsl:text>, </xsl:text>
+ <xsl:for-each select="rng:ref">
+ <xsl:call-template name="idforref"/>
+ </xsl:for-each>
+ <xsl:text>);</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="factorycreateelementmapfromstart">
+ <xsl:for-each select="start">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="block">
+ <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+ <xsl:call-template name="factorycreateelementmapinner">
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:text>
+ /* start: </xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>*/</xsl:text>
+ <xsl:if test="string-length($block) > 0">
+ <xsl:value-of select="$block"/>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<!-- factoryelementtoresourcemap -->
+<xsl:template name="factorycreateelementmap">
+ <xsl:text>
+CreateElementMapPointer </xsl:text>
+ <xsl:call-template name="factoryclassname"/>
+ <xsl:text>::createCreateElementMap(Id nId)
+{
+ CreateElementMapPointer pMap(new CreateElementMap());
+
+ switch (nId)
+ {</xsl:text>
+ <xsl:for-each select="rng:grammar/rng:define">
+ <xsl:variable name="inner">
+ <xsl:call-template name="factorycreateelementmapinner"/>
+ </xsl:variable>
+ <xsl:if test="string-length($inner) > 0">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="caselabeldefine"/>
+ <xsl:value-of select="$inner"/>
+ <xsl:text>
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+ default:</xsl:text>
+ <xsl:call-template name="factorycreateelementmapfromstart"/>
+ <xsl:text>
+ break;
+ }
+
+ return pMap;
+}</xsl:text>
+</xsl:template>
+
+ <!--
+ Chooses the action for the current <action> element.
+ -->
+ <xsl:template name="factorychooseaction">
+ <xsl:if test="@tokenid">
+ <xsl:text>
+ if (sal::static_int_cast&lt;Id&gt;(pHandler-&gt;getId()) == </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ <xsl:text>)
+ {</xsl:text>
+ </xsl:if>
+ <xsl:for-each select="./cond">
+ <xsl:text>
+ {
+ OOXMLPropertySetEntryToInteger aHandler(</xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ <xsl:text>);
+ dynamic_cast&lt;OOXMLFastContextHandlerStream*&gt;(pHandler)-&gt;getPropertySetAttrs()-&gt;resolve(aHandler);
+
+ if (sal::static_int_cast&lt;Id&gt;(aHandler.getValue()) == </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@value"/>
+ </xsl:call-template>
+ <xsl:text>)
+ {</xsl:text>
+ </xsl:for-each>
+ <xsl:choose>
+ <xsl:when test="@action='handleXNotes' or
+ @action='handleHdrFtr' or
+ @action='handleComment' or
+ @action='handlePicture' or
+ @action='handleBreak' or
+ @action='handleOLE'">
+ <xsl:text>
+ dynamic_cast&lt;OOXMLFastContextHandlerProperties*&gt;(pHandler)-&gt;</xsl:text>
+ <xsl:value-of select="@action"/>
+ <xsl:text>();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='propagateCharacterPropertiesAsSet'">
+ <xsl:text>
+ pHandler-&gt;propagateCharacterPropertiesAsSet(</xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@sendtokenid"/>
+ </xsl:call-template>
+ <xsl:text>);</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='startCell' or @action='endCell'">
+ <xsl:text>
+ dynamic_cast&lt;OOXMLFastContextHandlerTextTableCell*&gt;(pHandler)-&gt;</xsl:text>
+ <xsl:value-of select="@action"/>
+ <xsl:text>();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='startRow' or @action='endRow'">
+ <xsl:text>
+ dynamic_cast&lt;OOXMLFastContextHandlerTextTableRow*&gt;(pHandler)-&gt;</xsl:text>
+ <xsl:value-of select="@action"/>
+ <xsl:text>();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='sendProperty' or @action='handleHyperlink'">
+ <xsl:text>
+ dynamic_cast&lt;OOXMLFastContextHandlerStream*&gt;(pHandler)-&gt;</xsl:text>
+ <xsl:value-of select="@action"/>
+ <xsl:text>();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='fieldstart'">
+ <xsl:text>
+ pHandler-&gt;startField();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='fieldsep'">
+ <xsl:text>
+ pHandler-&gt;fieldSeparator();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='fieldend'">
+ <xsl:text>
+ pHandler-&gt;endField();</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='printproperty'">
+ <xsl:text>
+ dynamic_cast&lt;OOXMLFastContextHandlerStream*&gt;(pHandler)-&gt;sendProperty(</xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@sendtokenid"/>
+ </xsl:call-template>
+ <xsl:text>);</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='sendPropertiesWithId'">
+ <xsl:text>
+ pHandler-&gt;sendPropertiesWithId(</xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@sendtokenid"/>
+ </xsl:call-template>
+ <xsl:text>);</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='text'">
+ pHandler-&gt;text(sText);
+ </xsl:when>
+ <xsl:when test="@action='newProperty'">
+ <xsl:text>
+ OOXMLFastHelper&lt;OOXMLIntegerValue&gt;::newProperty(pHandler, </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ <xsl:text>, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("</xsl:text>
+ <xsl:value-of select="@value"/>
+ <xsl:text>")));</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='mark'">
+ <xsl:text>
+ OOXMLFastHelper&lt;OOXMLIntegerValue&gt;::mark(pHandler, </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@sendtokenid"/>
+ </xsl:call-template>
+ <xsl:text>, ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("</xsl:text>
+ <xsl:value-of select="@value"/>
+ <xsl:text>")));</xsl:text>
+ </xsl:when>
+ <xsl:when test="@action='tokenproperty'">
+ <xsl:text>
+ OOXMLFastHelper&lt;OOXMLIntegerValue&gt;::newProperty(pHandler, </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id">ooxml:token</xsl:with-param>
+ </xsl:call-template>
+ <xsl:text>, pHandler-&gt;getToken());</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>
+ pHandler-&gt;</xsl:text>
+ <xsl:value-of select="@action"/>
+ <xsl:text>();</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:for-each select="./cond">
+ <xsl:text>
+ }
+ }</xsl:text>
+ </xsl:for-each>
+ <xsl:if test="@tokenid">
+ <xsl:text>
+ }</xsl:text>
+ </xsl:if>
+ </xsl:template>
+
+<!-- factoryaction -->
+<xsl:template name="factoryaction">
+ <xsl:param name="action"/>
+ <xsl:variable name="switchblock1">
+ <xsl:for-each select="resource[action/@name=$action]">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="caselabeldefine"/>
+ <xsl:for-each select="action[@name=$action]">
+ <xsl:call-template name="factorychooseaction"/>
+ </xsl:for-each>
+ <xsl:text> break;&#xa;</xsl:text>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:variable name="switchblock2">
+ <xsl:if test="$action='characters'">
+ <xsl:for-each select="resource[@resource='Value']">
+ <xsl:if test="count(attribute) = 0">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:text> </xsl:text>
+ <xsl:call-template name="caselabeldefine"/>
+ <xsl:text>&#xa;</xsl:text>
+ <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+ <xsl:for-each select="rng:ref">
+ <xsl:call-template name="charactersactionforvalues"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ <xsl:text> break;&#xa;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:variable>
+ <xsl:text>&#xa;&#xa;</xsl:text>
+ <xsl:text>void </xsl:text>
+ <xsl:call-template name="factoryclassname"/>
+ <xsl:text>::</xsl:text>
+ <xsl:value-of select="$action"/>
+ <xsl:text>Action(OOXMLFastContextHandler*</xsl:text>
+ <xsl:if test="string-length($switchblock1) &gt; 0 or string-length($switchblock2) &gt; 0">
+ <xsl:text> pHandler</xsl:text>
+ </xsl:if>
+ <xsl:if test="$action='characters'">
+ <xsl:text>, const ::rtl::OUString &amp;</xsl:text>
+ <xsl:if test="contains($switchblock1, 'sText') or contains($switchblock2, 'sText')">
+ <xsl:text> sText</xsl:text>
+ </xsl:if>
+ </xsl:if>
+ <xsl:text>)&#xa;</xsl:text>
+ <xsl:text>{&#xa;</xsl:text>
+ <xsl:if test="string-length($switchblock1) > 0 or string-length($switchblock2) > 0">
+ <xsl:text> sal_uInt32 nDefine = pHandler->getDefine();&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:if test="string-length($switchblock1) > 0">
+ <xsl:text> switch (nDefine)&#xa;</xsl:text>
+ <xsl:text> {&#xa;</xsl:text>
+ <xsl:value-of select="$switchblock1"/>
+ <xsl:text> default:&#xa;</xsl:text>
+ <xsl:text> break;&#xa;</xsl:text>
+ <xsl:text> }&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:if test="string-length($switchblock2) > 0">
+ <xsl:text> OOXMLFastContextHandlerValue * pValueHandler = dynamic_cast&lt;OOXMLFastContextHandlerValue *&gt;(pHandler);&#xa;</xsl:text>
+ <xsl:text> switch (nDefine)&#xa;</xsl:text>
+ <xsl:text> {&#xa;</xsl:text>
+ <xsl:value-of select="$switchblock2"/>
+ <xsl:text> default:&#xa;</xsl:text>
+ <xsl:text> break;&#xa;</xsl:text>
+ <xsl:text> }&#xa;</xsl:text>
+ </xsl:if>
+ <xsl:text>}&#xa;</xsl:text>
+</xsl:template>
+
+<xsl:template name="charactersactionforvalues">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+ <xsl:text> {&#xa;</xsl:text>
+ <xsl:text> // </xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>&#xa;</xsl:text>
+ <xsl:for-each select="rng:data[@type='int']">
+ <xsl:text> OOXMLValue::Pointer_t pValue(new OOXMLIntegerValue(sText));&#xa;</xsl:text>
+ <xsl:text> pValueHandler->setValue(pValue);&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:for-each select="rng:list">
+ <xsl:text> ListValueMapPointer pListValueMap = getListValueMap(nDefine);&#xa;</xsl:text>
+ <xsl:text> if (pListValueMap.get() != NULL)&#xa;</xsl:text>
+ <xsl:text> {&#xa;</xsl:text>
+ <xsl:text> OOXMLValue::Pointer_t pValue(new OOXMLIntegerValue((*pListValueMap)[sText]));&#xa;</xsl:text>
+ <xsl:text> pValueHandler->setValue(pValue);</xsl:text>
+ <xsl:text> }&#xa;</xsl:text>
+ </xsl:for-each>
+ <xsl:text> }&#xa;</xsl:text>
+ </xsl:for-each>
+</xsl:template>
+
+<!-- factoryactions -->
+<xsl:template name="factoryactions">
+ <xsl:variable name="ns" select="@name"/>
+ <xsl:for-each select="resource/action[not(@name='characters')]">
+ <xsl:sort select="@name"/>
+ <xsl:if test="generate-id(key('actions', @name)[ancestor::namespace/@name=$ns][1]) = generate-id(.)">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select="ancestor::namespace">
+ <xsl:call-template name="factoryaction">
+ <xsl:with-param name="action" select="$name"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:call-template name="factoryaction">
+ <xsl:with-param name="action">characters</xsl:with-param>
+ </xsl:call-template>
+</xsl:template>
+
+<xsl:template name="factorygetdefinename">
+ <xsl:text>
+string </xsl:text>
+ <xsl:call-template name="factoryclassname"/>
+ <xsl:text>::getDefineName(Id nId) const
+{
+ static IdToStringMapPointer pMap;
+
+ if (pMap.get() == NULL)
+ {
+ pMap = IdToStringMapPointer(new IdToStringMap());
+
+</xsl:text>
+ <xsl:for-each select="rng:grammar/rng:define">
+ <xsl:text>
+ (*pMap)[</xsl:text>
+ <xsl:call-template name="idfordefine"/>
+ <xsl:text>] = "</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>";</xsl:text>
+ </xsl:for-each>
+ }
+
+ return (*pMap)[nId];
+}
+
+</xsl:template>
+
+<xsl:template name="factorytokentoidmapinner">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select=".//rng:ref[not(ancestor::rng:element or ancestor::rng:attribute)]">
+ <xsl:variable name="refname" select="@name"/>
+ <xsl:variable name="refblock1">
+ <xsl:for-each
+ select="ancestor::rng:grammar/rng:define[@name=$refname]">
+ <xsl:call-template name="factorytokentoidmapinner"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($refblock1) = 0">
+ <xsl:for-each select="ancestor::model/namespace/rng:grammar/rng:define[@name=$refname]">
+ <xsl:call-template name="factorytokentoidmapinner"/>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$refblock1"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ <xsl:variable name="body">
+ <xsl:for-each select="ancestor::namespace/resource[@name=$name]">
+ <xsl:for-each select="element[@tokenid]|attribute[@tokenid]">
+ <xsl:text>
+ (*pMap)[</xsl:text>
+ <xsl:call-template name="fasttoken"/>
+ <xsl:text>] = </xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="@tokenid"/>
+ </xsl:call-template>
+ <xsl:text>;</xsl:text>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:if test="string-length($body) > 0">
+ <xsl:text>
+ // </xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:value-of select="$body"/>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name="factorytokentoidmap">
+ <xsl:text>
+TokenToIdMapPointer </xsl:text>
+ <xsl:call-template name="factoryclassname"/>
+ <xsl:text>::createTokenToIdMap(Id nId)
+{
+ TokenToIdMapPointer pMap(new TokenToIdMap());
+
+ switch (nId)
+ {</xsl:text>
+ <xsl:for-each select="rng:grammar/rng:define">
+ <xsl:variable name="inner">
+ <xsl:call-template name="factorytokentoidmapinner"/>
+ </xsl:variable>
+ <xsl:if test="string-length($inner) > 0">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="caselabeldefine"/>
+ <xsl:value-of select="$inner"/>
+ <xsl:text>
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+ default:</xsl:text>
+ <xsl:for-each select="start">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:text>
+ // </xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+ <xsl:call-template name="factorytokentoidmapinner"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ <xsl:text>
+ break;
+ }
+
+ return pMap;
+}
+</xsl:text>
+</xsl:template>
+
+<xsl:template name="factoryattributeactiondefineinner">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="block">
+ <xsl:for-each select="ancestor::namespace/resource[@name=$name]">
+ <xsl:for-each select="attribute[@action]">
+ <xsl:text>
+ case </xsl:text>
+ <xsl:call-template name="fasttoken"/>
+ <xsl:text>:
+ pHandler-></xsl:text>
+ <xsl:value-of select="@action"/>
+ <xsl:text>(pValue);
+ break;</xsl:text>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:if test="string-length($block) > 0">
+ <xsl:variable name="handlertype">
+ <xsl:text>OOXMLFastContextHandler</xsl:text>
+ <xsl:for-each select="ancestor::namespace/resource[@name=$name]">
+ <xsl:value-of select="@resource"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:text>
+ {
+ </xsl:text>
+ <xsl:value-of select="$handlertype"/>
+ <xsl:text> * pHandler = dynamic_cast&lt;</xsl:text>
+ <xsl:value-of select="$handlertype"/>
+ <xsl:text> * &gt;(_pHandler);
+
+ switch(nToken)
+ {</xsl:text>
+ <xsl:value-of select="$block"/>
+ <xsl:text>
+ default:
+ break;
+ }
+ }</xsl:text>
+ </xsl:if>
+</xsl:template>
+
+<xsl:template name="factoryattributeactioninner">
+ <xsl:for-each select="rng:grammar/rng:define">
+ <xsl:variable name="inner">
+ <xsl:call-template name="factoryattributeactiondefineinner"/>
+ </xsl:variable>
+ <xsl:if test="string-length($inner) > 0">
+ <xsl:text>
+ </xsl:text>
+ <xsl:call-template name="caselabeldefine"/>
+ <xsl:value-of select="$inner"/>
+ <xsl:text>
+ break;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="factoryattributeaction">
+ <xsl:variable name="inner">
+ <xsl:call-template name="factoryattributeactioninner"/>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="string-length($inner) > 0">
+ <xsl:text>
+void </xsl:text>
+<xsl:call-template name="factoryclassname"/>
+<xsl:text>::attributeAction(OOXMLFastContextHandler * _pHandler, Token_t nToken, OOXMLValue::Pointer_t pValue)
+{
+ switch(_pHandler->getDefine())
+ {</xsl:text>
+ <xsl:value-of select="$inner"/>
+ <xsl:text>
+ default:
+ break;
+ }
+}
+</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>
+void </xsl:text>
+<xsl:call-template name="factoryclassname"/>
+<xsl:text>::attributeAction(OOXMLFastContextHandler *, Token_t, OOXMLValue::Pointer_t)
+{
+}
+</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="factorygetname">
+ <xsl:param name="ns"/>
+ <xsl:text>
+#ifdef DEBUG_FACTORY
+string </xsl:text>
+<xsl:call-template name="factoryclassname"/>
+<xsl:text>::getName() const
+{
+ return "</xsl:text>
+ <xsl:value-of select="$ns"/>
+ <xsl:text>";
+}
+#endif
+</xsl:text>
+</xsl:template>
+
+ <xsl:template match="/">
+ <xsl:variable name="ns" select="substring-before(substring-after($file, 'OOXMLFactory_'), '.cxx')"/>
+ <xsl:text>
+#include "doctok/sprmids.hxx"
+#include "doctok/resourceids.hxx"
+#include "ooxml/resourceids.hxx"
+#include "OOXMLFactory_values.hxx"
+#include "OOXMLFactory_</xsl:text>
+ <xsl:value-of select="$ns"/>
+ <xsl:text>.hxx"
+#include "OOXMLFastHelper.hxx"
+
+namespace writerfilter {
+namespace ooxml {
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:for-each select="/model/namespace[@name=$ns]">
+ <xsl:call-template name="factorymutexdecl"/>
+ <xsl:call-template name="factoryconstructor"/>
+ <xsl:call-template name="factorydestructor"/>
+ <xsl:call-template name="factorygetinstance"/>
+ <xsl:call-template name="factoryattributetoresourcemap"/>
+ <xsl:call-template name="factorylistvaluemap"/>
+ <xsl:call-template name="factorycreateelementmap"/>
+ <xsl:call-template name="factoryactions"/>
+ <xsl:call-template name="factorygetdefinename"/>
+ <xsl:call-template name="factorytokentoidmap"/>
+ <xsl:call-template name="factoryattributeaction"/>
+ <xsl:call-template name="factorygetname">
+ <xsl:with-param name="ns" select="$ns"/>
+ </xsl:call-template>
+ </xsl:for-each>
+ <xsl:text>
+/// @endcond
+}}
+</xsl:text>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/factoryimpl_values.xsl b/writerfilter/source/ooxml/factoryimpl_values.xsl
new file mode 100644
index 000000000000..465923d41769
--- /dev/null
+++ b/writerfilter/source/ooxml/factoryimpl_values.xsl
@@ -0,0 +1,98 @@
+<!--
+/*************************************************************************
+ *
+ 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: fastresources_wml.xsl,v $
+
+ $Revision: 1.3 $
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="factorytools.xsl"/>
+
+ <!--
+ Generates constant definitions for attribute values.
+ -->
+ <xsl:template name="valueconstants">
+ <xsl:text>
+rtl::OUString </xsl:text>
+<xsl:call-template name="valuestringname">
+ <xsl:with-param name="string"></xsl:with-param>
+</xsl:call-template>
+<xsl:text>(RTL_CONSTASCII_USTRINGPARAM(""));</xsl:text>
+<xsl:for-each select="//rng:value[generate-id(key('value-with-content', text())[1]) = generate-id(.)]">
+ <xsl:text>
+rtl::OUString </xsl:text>
+<xsl:call-template name="valuestringname">
+ <xsl:with-param name="string" select="."/>
+</xsl:call-template>
+<xsl:text>(RTL_CONSTASCII_USTRINGPARAM("</xsl:text>
+<xsl:value-of select="."/>
+<xsl:text>"));</xsl:text>
+</xsl:for-each>
+ </xsl:template>
+
+ <xsl:template match="/">
+ <xsl:text>
+#include "OOXMLFactory_values.hxx"</xsl:text>
+<xsl:call-template name="valueconstants"/>
+<xsl:text>&#xa;</xsl:text>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/factoryinc.xsl b/writerfilter/source/ooxml/factoryinc.xsl
new file mode 100644
index 000000000000..aa54a5c297ca
--- /dev/null
+++ b/writerfilter/source/ooxml/factoryinc.xsl
@@ -0,0 +1,112 @@
+<!--
+/*************************************************************************
+ *
+ 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: fastresources_wml.xsl,v $
+
+ $Revision: 1.3 $
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="factorytools.xsl"/>
+
+ <xsl:template name="factorynamespaceiddecls">
+ <xsl:for-each select="/model/namespace">
+ <xsl:sort select="@name"/>
+ <xsl:text>
+extern const Id </xsl:text>
+<xsl:call-template name="idfornamespace"/>
+<xsl:text>;</xsl:text>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="factorynamespaceidimpls">
+ <xsl:for-each select="/model/namespace">
+ <xsl:sort select="@name"/>
+ <xsl:text>
+const Id </xsl:text>
+<xsl:call-template name="idfornamespace"/>
+<xsl:text> = </xsl:text>
+<xsl:value-of select="position()"/>
+<xsl:text> &lt;&lt; 16;</xsl:text>
+ </xsl:for-each>
+</xsl:template>
+
+ <xsl:template match="/">
+ <xsl:text>
+#ifndef OOXML_FACTORY_GENERATED_HXX
+#define OOXML_FACTORY_GENERATED_HXX
+
+namespace writerfilter {
+namespace ooxml {
+
+/// @cond GENERATED
+ </xsl:text>
+ <xsl:call-template name="factorynamespaceidimpls"/>
+ <xsl:call-template name="factorydefineidimpls"/>
+ <xsl:text>
+/// @endcond
+}}
+
+#endif // OOXML_FACTORY_GENERATED_HXX
+</xsl:text>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/factorytools.xsl b/writerfilter/source/ooxml/factorytools.xsl
new file mode 100644
index 000000000000..a7b0af5f9dea
--- /dev/null
+++ b/writerfilter/source/ooxml/factorytools.xsl
@@ -0,0 +1,345 @@
+<!--
+/*************************************************************************
+ *
+ * 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: $
+ *
+ * $Revision: $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ xmlns:UML = 'org.omg.xmi.namespace.UML'
+ xmlns:common="http://exslt.org/common"
+ exclude-result-prefixes = "xalan"
+ xml:space="default">
+
+<!--
+ KEYS
+-->
+<xsl:key name="context-resource"
+ match="resource" use="@name"/>
+
+<xsl:key name="tokenids" match="@tokenid|@sendtokenid" use="."/>
+
+<xsl:key name="actions" match="/model/namespace/resource/action"
+ use="@name"/>
+
+<xsl:key name="definename" match="//rng:define" use="@name"/>
+
+<xsl:key name="resources" match="/model/namespace/resource" use="@resource"/>
+
+<xsl:key name="value-with-content" match="//rng:value"
+ use="text()"/>
+
+<xsl:key name="same-token-name" match="rng:element|rng:attribute" use="@localname"/>
+
+<!-- license header -->
+<xsl:template name="licenseheader">
+ <xsl:text>
+/*
+
+ THIS FILE IS GENERATED AUTOMATICALLY! DO NOT EDIT!
+
+*/
+&#xa;</xsl:text>
+</xsl:template>
+
+<!--
+IDENTIFIERs
+-->
+
+<!--
+
+generates token identifer for a namespace
+
+NN_<namespace/@name>
+
+-->
+<xsl:template name="fastnamespace">
+ <xsl:if test="string-length(@prefix) > 0">
+ <xsl:text>NS_</xsl:text>
+ <xsl:value-of select="@prefix"/>
+ </xsl:if>
+</xsl:template>
+
+<!--
+
+generates local part of token identifier for a rng:define
+
+OOXML_<rng:define/@localname>
+
+-->
+<xsl:template name="fastlocalname">
+ <xsl:text>OOXML_</xsl:text>
+ <xsl:value-of select="@localname"/>
+</xsl:template>
+
+<!--
+
+generates identifier for a token
+
+-->
+<xsl:template name="fasttoken">
+ <xsl:variable name="ns">
+ <xsl:call-template name="fastnamespace"/>
+ </xsl:variable>
+ <xsl:if test="string-length($ns) > 0">
+ <xsl:value-of select="$ns"/>
+ <xsl:text>|</xsl:text>
+ </xsl:if>
+ <xsl:call-template name="fastlocalname"/>
+</xsl:template>
+
+<!-- generates identifier for a namespace
+
+NN_<namespace/@name>
+
+-->
+<xsl:template name="idfornamespace">
+ <xsl:text>NN_</xsl:text>
+ <xsl:value-of select="translate(@name, '-', '_')"/>
+</xsl:template>
+
+<!-- generates local part of identier for rng:define
+
+DEFINE_<rng:define/@name>
+
+-->
+<xsl:template name="localidfordefine">
+ <xsl:text>DEFINE_</xsl:text>
+ <xsl:value-of select="@name"/>
+</xsl:template>
+
+<!-- generates id for a rng:define
+
+NN_<namespace/@name> | DEFINE_<rng:define/@name>
+
+-->
+<xsl:template name="idfordefine">
+ <xsl:for-each select="ancestor::namespace">
+ <xsl:call-template name="idfornamespace"/>
+ </xsl:for-each>
+ <xsl:text>|</xsl:text>
+ <xsl:call-template name="localidfordefine"/>
+</xsl:template>
+
+<!--
+
+creates case label for a rng:define:
+
+case NN_<namesapce/@name> | DEFINE_<rng:define/@name>:
+
+-->
+<xsl:template name="caselabeldefine">
+ <xsl:text>case </xsl:text>
+ <xsl:call-template name="idfordefine"/>
+ <xsl:text>:</xsl:text>
+</xsl:template>
+
+<!--
+ Generates name for a value string.
+
+ Value strings are possible values for attributes in OOXML.
+
+ @param string the string as present in the according <rng:value>
+-->
+<xsl:template name="valuestringname">
+ <xsl:param name="string"/>
+ <xsl:text>OOXMLValueString_</xsl:text>
+ <xsl:value-of select="translate($string, '-+ ,', 'mp__')"/>
+</xsl:template>
+
+<!--
+ Generates qname for id.
+
+ @param id the id to generate qname for
+
+ If id is of format <prefix>:<localname> the result is
+
+ NS_<prefix>::LN_<localname>
+
+ If id does not contain ":" the result is just id.
+-->
+<xsl:template name='idtoqname'>
+ <xsl:param name='id'/>
+ <xsl:choose>
+ <xsl:when test="contains($id, ':')">
+ <xsl:text>NS_</xsl:text>
+ <xsl:value-of select='substring-before($id, ":")'/>
+ <xsl:text>::LN_</xsl:text>
+ <xsl:value-of select='substring-after($id, ":")'/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$id"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!--
+ Returns the identifier for a namespace.
+
+NS_<namespace/@alias>
+
+-->
+<xsl:template name="namespaceid">
+ <xsl:text>NS_</xsl:text>
+ <xsl:value-of select="@alias"/>
+</xsl:template>
+
+<!--
+ Returns the value of the @resource attribute of the <resource>
+ node according to the current <define>.
+-->
+<xsl:template name="contextresource">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="nsid" select="generate-id(ancestor::namespace)"/>
+ <xsl:variable name="resourcesamens">
+ <xsl:for-each select="key('context-resource', @name)">
+ <xsl:if test="generate-id(ancestor::namespace) = $nsid">
+ <xsl:value-of select="@resource"/>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$name='BUILT_IN_ANY_TYPE'">
+ <xsl:text>Any</xsl:text>
+ </xsl:when>
+ <xsl:when test="string-length($resourcesamens) = 0">
+ <xsl:for-each select="key('context-resource', @name)[1]">
+ <xsl:value-of select="@resource"/>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$resourcesamens"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template name="idforref">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:variable name="result1">
+ <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+ <xsl:call-template name="idfordefine"/>
+ </xsl:for-each>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$name='BUILT_IN_ANY_TYPE'">
+ <xsl:text>0</xsl:text>
+ </xsl:when>
+ <xsl:when test="string-length($result1) = 0">
+ <xsl:for-each select="(ancestor::model/namespace/rng:grammar/rng:define[@name=$name])[1]">
+ <xsl:call-template name="idfordefine"/>
+ </xsl:for-each>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$result1"/>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<!-- factoryclassname -->
+<xsl:template name="factoryclassname">
+ <xsl:text>OOXMLFactory_</xsl:text>
+ <xsl:value-of select="translate(@name, '-', '_')"/>
+</xsl:template>
+
+<xsl:template name="factoryincludes">
+ <xsl:for-each select="/model/namespace">
+ <xsl:text>
+#include "OOXMLFactory_</xsl:text>
+ <xsl:value-of select="@name"/>
+ <xsl:text>.hxx"</xsl:text>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="factorydefineiddecls">
+ <xsl:for-each select="//rng:define">
+ <xsl:sort select="@name"/>
+ <xsl:if test="generate-id(key('definename', @name)[1]) = generate-id(.)">
+ <xsl:text>
+extern const Id </xsl:text>
+ <xsl:call-template name="localidfordefine"/>
+ <xsl:text>;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="factorydefineidimpls">
+ <xsl:for-each select="//rng:define">
+ <xsl:sort select="@name"/>
+ <xsl:if test="generate-id(key('definename', @name)[1]) = generate-id(.)">
+ <xsl:text>
+const Id </xsl:text>
+ <xsl:call-template name="localidfordefine"/>
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="position()"/>
+ <xsl:text>;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+<xsl:template name="resources">
+ <xsl:for-each select="/model/namespace/resource">
+ <xsl:if test="generate-id(key('resources', @resource)[1])=generate-id(.)">
+ <xsl:text>RT_</xsl:text>
+ <xsl:value-of select="@resource"/>
+ <xsl:text>,&#xa;</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/fasttokens.xsl b/writerfilter/source/ooxml/fasttokens.xsl
new file mode 100644
index 000000000000..4014df0eec91
--- /dev/null
+++ b/writerfilter/source/ooxml/fasttokens.xsl
@@ -0,0 +1,113 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="factorytools.xsl"/>
+
+ <xsl:template name="fasttokens">
+ <xsl:text>
+typedef sal_Int32 Token_t;
+ </xsl:text>
+ <xsl:for-each select="/model/fasttoken">
+ <xsl:text>
+const Token_t OOXML_</xsl:text>
+<xsl:value-of select="translate(., '-', '_')"/>
+<xsl:text> = </xsl:text>
+<xsl:value-of select="position() - 1"/>
+<xsl:text>;</xsl:text>
+ </xsl:for-each>
+ <xsl:text>
+const Token_t OOXML_FAST_TOKENS_END =</xsl:text>
+<xsl:value-of select="count(/model/fasttoken)"/>
+<xsl:text>;&#xa;</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_FAST_TOKENS_HXX
+#define INCLUDED_OOXML_FAST_TOKENS_HXX
+
+#include &lt;map&gt;
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+</xsl:text>
+<xsl:call-template name="fasttokens"/>
+<xsl:text>
+string fastTokenToId(sal_uInt32 nToken);
+
+static const sal_uInt32 F_Attribute = 1U &lt;&lt; 31;
+
+}}
+#endif //INCLUDED_OOXML_FAST_TOKENS_HXX&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/gperffasttokenhandler.xsl b/writerfilter/source/ooxml/gperffasttokenhandler.xsl
new file mode 100644
index 000000000000..d14db0486b5d
--- /dev/null
+++ b/writerfilter/source/ooxml/gperffasttokenhandler.xsl
@@ -0,0 +1,96 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ xmlns:UML = 'org.omg.xmi.namespace.UML'
+ exclude-result-prefixes = "xalan"
+ xml:space="default">
+ <xsl:output method="text" />
+
+ <xsl:include href="factorytools.xsl"/>
+
+ <!--
+ Generates input for gperf to genreate hash map for OOXMLFastTokenHandler
+ -->
+ <xsl:template name="gperfinputfasttokenhandler">
+ <xsl:text>
+%{
+#include "OOXMLFastTokens.hxx"
+
+namespace writerfilter { namespace ooxml { namespace tokenmap {
+%}
+struct token { const char * name; Token_t nToken; };
+%%</xsl:text>
+ <xsl:for-each select=".//rng:element|.//rng:attribute">
+ <xsl:if test="generate-id(.) = generate-id(key('same-token-name', @localname)[1])">
+ <xsl:text>&#xa;</xsl:text>
+ <xsl:value-of select="@localname"/>
+ <xsl:text>, </xsl:text>
+ <xsl:call-template name="fastlocalname"/>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+%%&#xa;</xsl:text>
+}}}&#xa;</xsl:template>
+
+ <xsl:template match="/">
+ <xsl:call-template name="gperfinputfasttokenhandler"/>
+ </xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/makefile.mk b/writerfilter/source/ooxml/makefile.mk
new file mode 100644
index 000000000000..c6a40b4cc5d1
--- /dev/null
+++ b/writerfilter/source/ooxml/makefile.mk
@@ -0,0 +1,256 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+PRJ=..$/..
+PRJNAME=writerfilter
+TARGET=ooxml
+#LIBTARGET=NO
+#USE_DEFFILE=TRUE
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/inc$/writerfilter.mk
+
+#CFLAGS+=-DISOLATION_AWARE_ENABLED -DWIN32_LEAN_AND_MEAN -DXML_UNICODE -D_NTSDK -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x0501
+#CFLAGS+=-wd4710 -wd4711 -wd4514 -wd4619 -wd4217 -wd4820
+
+NAMESPACES= \
+ wml \
+ dml-stylesheet \
+ dml-styleDefaults \
+ dml-shape3DLighting \
+ dml-shape3DScene \
+ dml-shape3DStyles \
+ dml-shape3DCamera \
+ dml-baseStylesheet \
+ dml-textCharacter \
+ dml-shapeEffects \
+ dml-shapeLineProperties \
+ dml-shapeProperties \
+ dml-baseTypes \
+ dml-documentProperties \
+ dml-graphicalObject \
+ dml-shapeGeometry \
+ dml-wordprocessingDrawing \
+ sml-customXmlMappings \
+ shared-math \
+ shared-relationshipReference \
+ dml-chartDrawing \
+ vml-main \
+ vml-officeDrawing \
+ vml-wordprocessingDrawing
+
+# --- Files --------------------------------------------------------
+
+SLOFACTORIESNAMESPACES= \
+ $(SLO)$/OOXMLFactory_{$(NAMESPACES)}.obj
+
+SLOFILES= \
+ $(SLOFACTORIESNAMESPACES) \
+ $(SLOFASTNAMESPACES) \
+ $(SLO)$/OOXMLFactory_generated.obj \
+ $(SLO)$/OOXMLFactory.obj \
+ $(SLO)$/OOXMLBinaryObjectReference.obj\
+ $(SLO)$/OOXMLFactory_values.obj \
+ $(SLO)$/OOXMLPropertySetImpl.obj \
+ $(SLO)$/OOXMLParserState.obj \
+ $(SLO)$/Handler.obj \
+ $(SLO)$/OOXMLDocumentImpl.obj \
+ $(SLO)$/OOXMLStreamImpl.obj \
+ $(SLO)$/OOXMLFastDocumentHandler.obj \
+ $(SLO)$/OOXMLFastContextHandler.obj \
+ $(SLO)$/OOXMLFastTokenHandler.obj
+
+SHL1TARGET=$(TARGET)
+
+.IF "$(GUI)"=="UNX" || "$(GUI)"=="MAC"
+RESOURCEMODELLIB=-lresourcemodel
+.ELIF "$(GUI)"=="OS2"
+RESOURCEMODELLIB=$(LB)$/iresourcemodel.lib
+.ELIF "$(GUI)"=="WNT"
+.IF "$(COM)"=="GCC"
+RESOURCEMODELLIB=-lresourcemodel
+.ELSE
+RESOURCEMODELLIB=$(LB)$/iresourcemodel.lib
+.ENDIF
+.ENDIF
+
+SHL1STDLIBS=$(SALLIB)\
+ $(CPPULIB)\
+ $(CPPUHELPERLIB) \
+ $(COMPHELPERLIB) \
+ $(RESOURCEMODELLIB)
+SHL1IMPLIB=i$(SHL1TARGET)
+SHL1USE_EXPORTS=name
+
+SHL1OBJS=$(SLOFILES)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+DEF1NAME=$(SHL1TARGET)
+DEFLIB1NAME=$(TARGET)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+.PHONY : test
+
+test:
+ echo $(SLOFILES)
+
+OOXMLCXXOUTDIR=$(MISC)
+OOXMLHXXOUTDIR=$(INCCOM)/ooxml
+OOXMLHXXOUTDIRCREATED=$(OOXMLHXXOUTDIR)/created
+
+OOXMLFACTORYCXXS=$(OOXMLCXXOUTDIR)$/OOXMLFactory_{$(NAMESPACES)}.cxx
+OOXMLFACTORYHXXS=$(OOXMLHXXOUTDIR)$/OOXMLFactory_{$(NAMESPACES)}.hxx
+
+OOXMLMODEL=model.xml
+OOXMLPREPROCESSXSL=modelpreprocess.xsl
+OOXMLFACTORYTOOLSXSL=factorytools.xsl
+OOXMLRESORUCETOKENSXSL=resourcestokens.xsl
+OOXMLFASTTOKENSXSL=fasttokens.xsl
+OOXMLRESOURCESIMPLXSL=resourcesimpl.xsl
+OOXMLNAMESPACEIDSXSL=namespaceids.xsl
+OOXMLFACTORYVALUESXSL=factory_values.xsl
+OOXMLFACTORYVALUESIMPLXSL=factoryimpl_values.xsl
+OOXMLRESOURCEIDSXSL=resourceids.xsl
+OOXMLGPERFFASTTOKENXSL=gperffasttokenhandler.xsl
+
+OOXMLRESOURCEIDSHXX=$(OOXMLHXXOUTDIR)$/resourceids.hxx
+
+TOKENXML=$(OOXMLCXXOUTDIR)$/token.xml
+TOKENXMLTMP=$(OOXMLCXXOUTDIR)$/token.tmp
+
+OOXMLFACTORYGENERATEDHXX=$(OOXMLHXXOUTDIR)$/OOXMLFactory_generated.hxx
+OOXMLFACTORYGENERATEDCXX=$(OOXMLCXXOUTDIR)$/OOXMLFactory_generated.cxx
+OOXMLFASTTOKENSHXX=$(OOXMLHXXOUTDIR)$/OOXMLFastTokens.hxx
+OOXMLNAMESPACEIDSHXX=$(OOXMLHXXOUTDIR)$/OOXMLnamespaceids.hxx
+OOXMLFACTORYVALUESHXX=$(OOXMLCXXOUTDIR)$/OOXMLFactory_values.hxx
+OOXMLFACTORYVALUESCXX=$(OOXMLCXXOUTDIR)$/OOXMLFactory_values.cxx
+GPERFFASTTOKENHXX=$(OOXMLHXXOUTDIR)$/gperffasttoken.hxx
+MODELPROCESSED=$(MISC)$/model_preprocessed.xml
+
+OOXMLGENHEADERS= \
+ $(OOXMLFACTORYGENERATEDHXX) \
+ $(OOXMLFACTORYHXXS) \
+ $(OOXMLFASTTOKENSHXX) \
+ $(OOXMLFACTORYVALUESHXX) \
+ $(GPERFFASTTOKENHXX) \
+ $(OOXMLRESOURCEIDSHXX) \
+ $(OOXMLNAMESPACEIDSHXX)
+
+GENERATEDFILES= \
+ $(OOXMLGENHEADERS) \
+ $(OOXMLFACTORYGENERATEDCXX) \
+ $(OOXMLFACTORYCXXS) \
+ $(OOXMLFACTORYVALUESCXX) \
+ $(TOKENXMLTMP) \
+ $(TOKENXML)
+
+$(TOKENXMLTMP): $(SOLARVER)$/$(INPATH)$/inc$(UPDMINOREXT)$/oox$/token.txt
+ @$(TYPE) $(SOLARVER)$/$(INPATH)$/inc$(UPDMINOREXT)$/oox$/token.txt | $(SED) "s#\(.*\)#<fasttoken>\1</fasttoken>#" > $@
+
+$(TOKENXML): tokenxmlheader $(TOKENXMLTMP) tokenxmlfooter
+ @$(TYPE) tokenxmlheader $(TOKENXMLTMP) tokenxmlfooter > $@
+
+$(OOXMLHXXOUTDIRCREATED):
+ $(MKDIRHIER) $(OOXMLHXXOUTDIR)
+ @$(TOUCH) $@
+
+$(OOXMLGENHEADERS): $(OOXMLHXXOUTDIRCREATED)
+
+$(OOXMLFASTTOKENSHXX): $(OOXMLFASTTOKENSXSL) $(TOKENXML)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLFASTTOKENSXSL) $(TOKENXML) > $@
+
+$(OOXMLFACTORYGENERATEDHXX): factoryinc.xsl
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $< $(MODELPROCESSED) > $@
+
+$(OOXMLFACTORYGENERATEDCXX): factoryimpl.xsl
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $< $(MODELPROCESSED) > $@
+
+$(OOXMLFACTORYGENERATEDCXX): $(MODELPROCESSED)
+
+$(OOXMLFACTORYGENERATEDHXX): $(MODELPROCESSED)
+
+$(OOXMLFACTORYCXXS): $(MODELPROCESSED)
+
+$(OOXMLFACTORYHXXS): $(MODELPROCESSED)
+
+$(OOXMLCXXOUTDIR)$/OOXMLFactory%.cxx: factoryimpl_ns.xsl
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) --stringparam file $@ $< $(MODELPROCESSED) > $@
+
+$(OOXMLHXXOUTDIR)$/OOXMLFactory%.hxx: factory_ns.xsl
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) --stringparam file $@ $< $(MODELPROCESSED) > $@
+
+$(OOXMLFACTORYVALUESHXX): $(OOXMLFACTORYVALUESXSL) $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLFACTORYVALUESXSL) $(MODELPROCESSED) > $@
+
+$(OOXMLFACTORYVALUESCXX): $(OOXMLFACTORYVALUESIMPLXSL) $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLFACTORYVALUESIMPLXSL) $(MODELPROCESSED) > $@
+
+$(OOXMLRESOURCEIDSHXX): $(OOXMLHXXOUTDIRCREATED) $(OOXMLRESOURCEIDSXSL) \
+ $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLRESOURCEIDSXSL) $(MODELPROCESSED) > $@
+
+$(OOXMLNAMESPACEIDSHXX): $(OOXMLHXXOUTDIRCREATED) $(OOXMLNAMESPACEIDSXSL) \
+ $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLNAMESPACEIDSXSL) $(MODELPROCESSED) > $@
+
+$(GPERFFASTTOKENHXX): $(OOXMLGPERFFASTTOKENXSL) $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLGPERFFASTTOKENXSL) $(MODELPROCESSED) | tr -d '\r' | gperf -I -t -E -S1 -c -G -LC++ > $@
+
+$(SLOFACTORIESNAMESPACES): $(OOXMLFACTORYSCXXS) $(OOXMLGENHEADERS)
+
+$(GENERATEDFILES): $(OOXMLFACTORYTOOLSXSL)
+
+$(SLOFILES): $(OOXMLGENHEADERS)
+
+$(SLO)/OOXMLFactory_values.obj: $(OOXMLFACTORYVALUESCXX) $(OOXMLFACTORYVALUESHXX)
+
+$(SLO)$/OOXMLFactory_generated.obj: $(OOXMLFACTORYGENERATEDCXX) $(OOXMLGENHEADERS)
+
+.PHONY: genclean genmake genheaders
+
+genclean:
+ rm -f $(GENERATEDFILES)
+
+genmake: $(GENERATEDFILES)
+
+genheaders: $(GENHEADERS)
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
new file mode 100644
index 000000000000..49998622e65d
--- /dev/null
+++ b/writerfilter/source/ooxml/model.xml
@@ -0,0 +1,23471 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<model xmlns:rng="http://relaxng.org/ns/structure/1.0">
+ <namespace-alias name="http://www.w3.org/XML/1998/namespace" alias="xml" id="xml"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/officeDocument/2006/relationships" alias="relationships" id="officeRel"/>
+ <namespace-alias name="urn:schemas-microsoft-com:office:office" alias="office" id="vmlOffice"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" alias="theme" id="officeRelTheme"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" alias="wordprocessingDrawing" id="dmlWordDr"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/drawingml/2006/main" alias="drawingml" id="dml"/>
+ <namespace-alias name="urn:schemas-microsoft-com:vml" alias="vml" id="vml"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/drawingml/2006/picture" alias="picture" id="dmlPicture"/>
+ <namespace-alias name="urn:schemas-microsoft-com:office:word" alias="vml_wordprocessingDrawing" id="vmlWord"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/wordprocessingml/2006/main" alias="wordprocessingml" id="doc"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/officeDocument/2006/math" alias="math" id="officeMath"/>
+ <namespace-alias name="http://schemas.openxmlformats.org/schemaLibrary/2006/main" alias="schemaLibrary" id="schema"/>
+ <namespace-alias name="http://sprm" alias="sprm" id="sprm"/>
+ <token tokenid="ooxml:shape"/>
+ <token tokenid="ooxml:token"/>
+ <token tokenid="ooxml:inputstream"/>
+ <token tokenid="ooxml:trackchange"/>
+ <token tokenid="ooxml:object"/>
+ <token tokenid="ooxml:tblStart"/>
+ <token tokenid="ooxml:ffdata"/>
+ <namespace name="dml-stylesheet" url="http://schemas.openxmlformats.org/drawingml/2006/main" file="dml-stylesheet.rng">
+ <start name="theme"/>
+ <start name="themeOverride"/>
+ <start name="themeManager"/>
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-baseStylesheet.rng"/>
+ <include href="dml-styleDefaults.rng"/>
+ <!-- start = theme | themeOverride | themeManager -->
+ <define name="CT_EmptyElement">
+ <empty/>
+ </define>
+ <define name="CT_ColorMapping">
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ <attribute name="bg1">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Background 1</xs:documentation>
+ </attribute>
+ <attribute name="tx1">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Text 1</xs:documentation>
+ </attribute>
+ <attribute name="bg2">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Background 2</xs:documentation>
+ </attribute>
+ <attribute name="tx2">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Text 2</xs:documentation>
+ </attribute>
+ <attribute name="accent1">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Accent 1</xs:documentation>
+ </attribute>
+ <attribute name="accent2">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Accent 2</xs:documentation>
+ </attribute>
+ <attribute name="accent3">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Accent 3</xs:documentation>
+ </attribute>
+ <attribute name="accent4">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Accent 4</xs:documentation>
+ </attribute>
+ <attribute name="accent5">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Accent 5</xs:documentation>
+ </attribute>
+ <attribute name="accent6">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Accent 6</xs:documentation>
+ </attribute>
+ <attribute name="hlink">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Hyperlink</xs:documentation>
+ </attribute>
+ <attribute name="folHlink">
+ <ref name="ST_ColorSchemeIndex"/>
+ <xs:documentation>Followed Hyperlink</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_ColorMappingOverride">
+ <choice>
+ <element name="masterClrMapping">
+ <ref name="CT_EmptyElement"/>
+ </element>
+ <element name="overrideClrMapping">
+ <ref name="CT_ColorMapping"/>
+ </element>
+ </choice>
+ </define>
+ <define name="CT_ColorSchemeAndMapping">
+ <element name="clrScheme">
+ <ref name="CT_ColorScheme"/>
+ </element>
+ <optional>
+ <element name="clrMap">
+ <ref name="CT_ColorMapping"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_ColorSchemeList">
+ <zeroOrMore>
+ <element name="extraClrScheme">
+ <ref name="CT_ColorSchemeAndMapping"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_OfficeStyleSheet">
+ <group>
+ <element name="themeElements">
+ <ref name="CT_BaseStyles"/>
+ </element>
+ <optional>
+ <element name="objectDefaults">
+ <ref name="CT_ObjectStyleDefaults"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extraClrSchemeLst">
+ <ref name="CT_ColorSchemeList"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="custClrLst">
+ <ref name="CT_CustomColorList"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_BaseStylesOverride">
+ <optional>
+ <element name="clrScheme">
+ <ref name="CT_ColorScheme"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="fontScheme">
+ <ref name="CT_FontScheme"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="fmtScheme">
+ <ref name="CT_StyleMatrix"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_ClipboardStyleSheet">
+ <element name="themeElements">
+ <ref name="CT_BaseStyles"/>
+ </element>
+ <element name="clrMap">
+ <ref name="CT_ColorMapping"/>
+ </element>
+ </define>
+ <define name="theme">
+ <element name="theme">
+ <ref name="CT_OfficeStyleSheet"/>
+ </element>
+ </define>
+ <define name="themeOverride">
+ <element name="themeOverride">
+ <ref name="CT_BaseStylesOverride"/>
+ </element>
+ </define>
+ <define name="themeManager">
+ <element name="themeManager">
+ <ref name="CT_EmptyElement"/>
+ </element>
+ </define>
+ </grammar>
+ <resource name="CT_OfficeStyleSheet" resource="Table" tokenid="ooxml:THEMETABLE"/>
+ <resource name="theme" resource="Stream" tag="theme">
+ <element name="theme" tokenid="ooxml:THEMETABLE"/>
+ </resource>
+ <resource name="themeOverride" resource="Stream" tag="theme"/>
+ <resource name="themeManager" resource="Stream" tag="theme"/>
+ </namespace>
+ <namespace name="dml-styleDefaults" file="dml-styleDefaults">
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-shapeProperties.rng"/>
+ <include href="dml-shapeStyle.rng"/>
+ <include href="dml-text.rng"/>
+ <define name="CT_DefaultShapeDefinition">
+ <element name="spPr">
+ <ref name="CT_ShapeProperties"/>
+ </element>
+ <element name="bodyPr">
+ <ref name="CT_TextBodyProperties"/>
+ </element>
+ <element name="lstStyle">
+ <ref name="CT_TextListStyle"/>
+ </element>
+ <optional>
+ <element name="style">
+ <ref name="CT_ShapeStyle"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_ObjectStyleDefaults">
+ <optional>
+ <element name="spDef">
+ <ref name="CT_DefaultShapeDefinition"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lnDef">
+ <ref name="CT_DefaultShapeDefinition"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="txDef">
+ <ref name="CT_DefaultShapeDefinition"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ </grammar>
+ </namespace>
+ <namespace name="dml-shape3DLighting" file="dml-shape3DLighting.rng">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-baseTypes.rng"/>
+ <define name="ST_LightRigDirection">
+ <list>
+ <xs:documentation>Light Rig Direction</xs:documentation>
+ <choice>
+ <!-- Top Left -->
+ <value>tl</value>
+ <!-- Top -->
+ <value>t</value>
+ <!-- Top Right -->
+ <value>tr</value>
+ <!-- Left -->
+ <value>l</value>
+ <!-- Right -->
+ <value>r</value>
+ <!-- Bottom Left -->
+ <value>bl</value>
+ <!-- Bottom -->
+ <value>b</value>
+ <!-- Bottom Right -->
+ <value>br</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_LightRigType">
+ <list>
+ <xs:documentation>Light Rig Type</xs:documentation>
+ <choice>
+ <!-- Legacy Flat 1 -->
+ <value>legacyFlat1</value>
+ <!-- Legacy Flat 2 -->
+ <value>legacyFlat2</value>
+ <!-- Legacy Flat 3 -->
+ <value>legacyFlat3</value>
+ <!-- Legacy Flat 4 -->
+ <value>legacyFlat4</value>
+ <!-- Legacy Normal 1 -->
+ <value>legacyNormal1</value>
+ <!-- Legacy Normal 2 -->
+ <value>legacyNormal2</value>
+ <!-- Legacy Normal 3 -->
+ <value>legacyNormal3</value>
+ <!-- Legacy Normal 4 -->
+ <value>legacyNormal4</value>
+ <!-- Legacy Harsh 1 -->
+ <value>legacyHarsh1</value>
+ <!-- Legacy Harsh 2 -->
+ <value>legacyHarsh2</value>
+ <!-- Legacy Harsh 3 -->
+ <value>legacyHarsh3</value>
+ <!-- Legacy Harsh 4 -->
+ <value>legacyHarsh4</value>
+ <!-- Three Point -->
+ <value>threePt</value>
+ <!-- Light Rig Enum ( Balanced ) -->
+ <value>balanced</value>
+ <!-- Soft -->
+ <value>soft</value>
+ <!-- Harsh -->
+ <value>harsh</value>
+ <!-- Flood -->
+ <value>flood</value>
+ <!-- Contrasting -->
+ <value>contrasting</value>
+ <!-- Morning -->
+ <value>morning</value>
+ <!-- Sunrise -->
+ <value>sunrise</value>
+ <!-- Sunset -->
+ <value>sunset</value>
+ <!-- Chilly -->
+ <value>chilly</value>
+ <!-- Freezing -->
+ <value>freezing</value>
+ <!-- Flat -->
+ <value>flat</value>
+ <!-- Two Point -->
+ <value>twoPt</value>
+ <!-- Glow -->
+ <value>glow</value>
+ <!-- Bright Room -->
+ <value>brightRoom</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_LightRig">
+ <optional>
+ <element name="rot">
+ <ref name="CT_SphereCoords"/>
+ </element>
+ </optional>
+ <attribute name="rig">
+ <ref name="ST_LightRigType"/>
+ <xs:documentation>Rig Preset</xs:documentation>
+ </attribute>
+ <attribute name="dir">
+ <ref name="ST_LightRigDirection"/>
+ <xs:documentation>Direction</xs:documentation>
+ </attribute>
+ </define>
+ </grammar>
+ <resource name="ST_LightRigDirection" resource="List" generated="yes">
+ <value name="tl" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_tl">tl</value>
+ <value name="t" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_t">t</value>
+ <value name="tr" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_tr">tr</value>
+ <value name="l" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_l">l</value>
+ <value name="r" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_r">r</value>
+ <value name="bl" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_bl">bl</value>
+ <value name="b" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_b">b</value>
+ <value name="br" tokenid="ooxml:Value_drawingml_ST_LightRigDirection_br">br</value>
+ </resource>
+ <resource name="ST_LightRigType" resource="List" generated="yes">
+ <value name="legacyFlat1" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat1">legacyFlat1</value>
+ <value name="legacyFlat2" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat2">legacyFlat2</value>
+ <value name="legacyFlat3" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat3">legacyFlat3</value>
+ <value name="legacyFlat4" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyFlat4">legacyFlat4</value>
+ <value name="legacyNormal1" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal1">legacyNormal1</value>
+ <value name="legacyNormal2" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal2">legacyNormal2</value>
+ <value name="legacyNormal3" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal3">legacyNormal3</value>
+ <value name="legacyNormal4" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyNormal4">legacyNormal4</value>
+ <value name="legacyHarsh1" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh1">legacyHarsh1</value>
+ <value name="legacyHarsh2" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh2">legacyHarsh2</value>
+ <value name="legacyHarsh3" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh3">legacyHarsh3</value>
+ <value name="legacyHarsh4" tokenid="ooxml:Value_drawingml_ST_LightRigType_legacyHarsh4">legacyHarsh4</value>
+ <value name="threePt" tokenid="ooxml:Value_drawingml_ST_LightRigType_threePt">threePt</value>
+ <value name="balanced" tokenid="ooxml:Value_drawingml_ST_LightRigType_balanced">balanced</value>
+ <value name="soft" tokenid="ooxml:Value_drawingml_ST_LightRigType_soft">soft</value>
+ <value name="harsh" tokenid="ooxml:Value_drawingml_ST_LightRigType_harsh">harsh</value>
+ <value name="flood" tokenid="ooxml:Value_drawingml_ST_LightRigType_flood">flood</value>
+ <value name="contrasting" tokenid="ooxml:Value_drawingml_ST_LightRigType_contrasting">contrasting</value>
+ <value name="morning" tokenid="ooxml:Value_drawingml_ST_LightRigType_morning">morning</value>
+ <value name="sunrise" tokenid="ooxml:Value_drawingml_ST_LightRigType_sunrise">sunrise</value>
+ <value name="sunset" tokenid="ooxml:Value_drawingml_ST_LightRigType_sunset">sunset</value>
+ <value name="chilly" tokenid="ooxml:Value_drawingml_ST_LightRigType_chilly">chilly</value>
+ <value name="freezing" tokenid="ooxml:Value_drawingml_ST_LightRigType_freezing">freezing</value>
+ <value name="flat" tokenid="ooxml:Value_drawingml_ST_LightRigType_flat">flat</value>
+ <value name="twoPt" tokenid="ooxml:Value_drawingml_ST_LightRigType_twoPt">twoPt</value>
+ <value name="glow" tokenid="ooxml:Value_drawingml_ST_LightRigType_glow">glow</value>
+ <value name="brightRoom" tokenid="ooxml:Value_drawingml_ST_LightRigType_brightRoom">brightRoom</value>
+ </resource>
+ </namespace>
+ <namespace name="dml-shape3DScene" file="dml-shape3DScene.rng">
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-shape3DCamera.rng"/>
+ <include href="dml-shape3DLighting.rng"/>
+ <include href="dml-shape3DScenePlane.rng"/>
+ <define name="CT_Scene3D">
+ <element name="camera">
+ <ref name="CT_Camera"/>
+ </element>
+ <element name="lightRig">
+ <ref name="CT_LightRig"/>
+ </element>
+ <optional>
+ <element name="backdrop">
+ <ref name="CT_Backdrop"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ </grammar>
+ </namespace>
+ <namespace name="dml-shape3DStyles" file="dml-shape3DStyles.rng">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-shapeGeometry.rng"/>
+ <define name="ST_BevelPresetType">
+ <list>
+ <xs:documentation>Bevel Presets</xs:documentation>
+ <choice>
+ <!-- Relaxed Inset -->
+ <value>relaxedInset</value>
+ <!-- Circle -->
+ <value>circle</value>
+ <!-- Slope -->
+ <value>slope</value>
+ <!-- Cross -->
+ <value>cross</value>
+ <!-- Angle -->
+ <value>angle</value>
+ <!-- Soft Round -->
+ <value>softRound</value>
+ <!-- Convex -->
+ <value>convex</value>
+ <!-- Cool Slant -->
+ <value>coolSlant</value>
+ <!-- Divot -->
+ <value>divot</value>
+ <!-- Riblet -->
+ <value>riblet</value>
+ <!-- Hard Edge -->
+ <value>hardEdge</value>
+ <!-- Art Deco -->
+ <value>artDeco</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Bevel">
+ <optional>
+ <attribute name="w">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="h">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Height</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="prst">
+ <ref name="ST_BevelPresetType"/>
+ <xs:documentation>Preset Bevel</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_PresetMaterialType">
+ <list>
+ <xs:documentation>Preset Material Type</xs:documentation>
+ <choice>
+ <!-- Legacy Matte -->
+ <value>legacyMatte</value>
+ <!-- Legacy Plastic -->
+ <value>legacyPlastic</value>
+ <!-- Legacy Metal -->
+ <value>legacyMetal</value>
+ <!-- Legacy Wireframe -->
+ <value>legacyWireframe</value>
+ <!-- Matte -->
+ <value>matte</value>
+ <!-- Plastic -->
+ <value>plastic</value>
+ <!-- Metal -->
+ <value>metal</value>
+ <!-- Warm Matte -->
+ <value>warmMatte</value>
+ <!-- Translucent Powder -->
+ <value>translucentPowder</value>
+ <!-- Powder -->
+ <value>powder</value>
+ <!-- Dark Edge -->
+ <value>dkEdge</value>
+ <!-- Soft Edge -->
+ <value>softEdge</value>
+ <!-- Clear -->
+ <value>clear</value>
+ <!-- Flat -->
+ <value>flat</value>
+ <!-- Soft Metal -->
+ <value>softmetal</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Shape3D">
+ <group>
+ <optional>
+ <element name="bevelT">
+ <ref name="CT_Bevel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bevelB">
+ <ref name="CT_Bevel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extrusionClr">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="contourClr">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="z">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Shape Depth</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="extrusionH">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Extrusion Height</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="contourW">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Contour Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="prstMaterial">
+ <ref name="ST_PresetMaterialType"/>
+ <xs:documentation>Preset Material Type</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_FlatText">
+ <optional>
+ <attribute name="z">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Z Coordinate</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="EG_Text3D">
+ <choice>
+ <element name="sp3d">
+ <ref name="CT_Shape3D"/>
+ </element>
+ <element name="flatTx">
+ <ref name="CT_FlatText"/>
+ </element>
+ </choice>
+ </define>
+ </grammar>
+ <resource name="ST_BevelPresetType" resource="List" generated="yes">
+ <value name="relaxedInset" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_relaxedInset">relaxedInset</value>
+ <value name="circle" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_circle">circle</value>
+ <value name="slope" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_slope">slope</value>
+ <value name="cross" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_cross">cross</value>
+ <value name="angle" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_angle">angle</value>
+ <value name="softRound" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_softRound">softRound</value>
+ <value name="convex" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_convex">convex</value>
+ <value name="coolSlant" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_coolSlant">coolSlant</value>
+ <value name="divot" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_divot">divot</value>
+ <value name="riblet" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_riblet">riblet</value>
+ <value name="hardEdge" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_hardEdge">hardEdge</value>
+ <value name="artDeco" tokenid="ooxml:Value_drawingml_ST_BevelPresetType_artDeco">artDeco</value>
+ </resource>
+ <resource name="ST_PresetMaterialType" resource="List" generated="yes">
+ <value name="legacyMatte" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyMatte">legacyMatte</value>
+ <value name="legacyPlastic" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyPlastic">legacyPlastic</value>
+ <value name="legacyMetal" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyMetal">legacyMetal</value>
+ <value name="legacyWireframe" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_legacyWireframe">legacyWireframe</value>
+ <value name="matte" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_matte">matte</value>
+ <value name="plastic" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_plastic">plastic</value>
+ <value name="metal" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_metal">metal</value>
+ <value name="warmMatte" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_warmMatte">warmMatte</value>
+ <value name="translucentPowder" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_translucentPowder">translucentPowder</value>
+ <value name="powder" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_powder">powder</value>
+ <value name="dkEdge" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_dkEdge">dkEdge</value>
+ <value name="softEdge" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_softEdge">softEdge</value>
+ <value name="clear" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_clear">clear</value>
+ <value name="flat" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_flat">flat</value>
+ <value name="softmetal" tokenid="ooxml:Value_drawingml_ST_PresetMaterialType_softmetal">softmetal</value>
+ </resource>
+ </namespace>
+ <namespace name="dml-shape3DCamera" file="dml-shape3DCamera.rng">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-baseTypes.rng"/>
+ <define name="ST_PresetCameraType">
+ <list>
+ <xs:documentation>Preset Camera Type</xs:documentation>
+ <choice>
+ <!-- Legacy Oblique Top Left -->
+ <value>legacyObliqueTopLeft</value>
+ <!-- Legacy Oblique Top -->
+ <value>legacyObliqueTop</value>
+ <!-- Legacy Oblique Top Right -->
+ <value>legacyObliqueTopRight</value>
+ <!-- Legacy Oblique Left -->
+ <value>legacyObliqueLeft</value>
+ <!-- Legacy Oblique Front -->
+ <value>legacyObliqueFront</value>
+ <!-- Legacy Oblique Right -->
+ <value>legacyObliqueRight</value>
+ <!-- Legacy Oblique Bottom Left -->
+ <value>legacyObliqueBottomLeft</value>
+ <!-- Legacy Oblique Bottom -->
+ <value>legacyObliqueBottom</value>
+ <!-- Legacy Oblique Bottom Right -->
+ <value>legacyObliqueBottomRight</value>
+ <!-- Legacy Perspective Top Left -->
+ <value>legacyPerspectiveTopLeft</value>
+ <!-- Legacy Perspective Top -->
+ <value>legacyPerspectiveTop</value>
+ <!-- Legacy Perspective Top Right -->
+ <value>legacyPerspectiveTopRight</value>
+ <!-- Legacy Perspective Left -->
+ <value>legacyPerspectiveLeft</value>
+ <!-- Legacy Perspective Front -->
+ <value>legacyPerspectiveFront</value>
+ <!-- Legacy Perspective Right -->
+ <value>legacyPerspectiveRight</value>
+ <!-- Legacy Perspective Bottom Left -->
+ <value>legacyPerspectiveBottomLeft</value>
+ <!-- Legacy Perspective Bottom -->
+ <value>legacyPerspectiveBottom</value>
+ <!-- Legacy Perspective Bottom Right -->
+ <value>legacyPerspectiveBottomRight</value>
+ <!-- Orthographic Front -->
+ <value>orthographicFront</value>
+ <!-- Isometric Top Up -->
+ <value>isometricTopUp</value>
+ <!-- Isometric Top Down -->
+ <value>isometricTopDown</value>
+ <!-- Isometric Bottom Up -->
+ <value>isometricBottomUp</value>
+ <!-- Isometric Bottom Down -->
+ <value>isometricBottomDown</value>
+ <!-- Isometric Left Up -->
+ <value>isometricLeftUp</value>
+ <!-- Isometric Left Down -->
+ <value>isometricLeftDown</value>
+ <!-- Isometric Right Up -->
+ <value>isometricRightUp</value>
+ <!-- Isometric Right Down -->
+ <value>isometricRightDown</value>
+ <!-- Isometric Off Axis 1 Left -->
+ <value>isometricOffAxis1Left</value>
+ <!-- Isometric Off Axis 1 Right -->
+ <value>isometricOffAxis1Right</value>
+ <!-- Isometric Off Axis 1 Top -->
+ <value>isometricOffAxis1Top</value>
+ <!-- Isometric Off Axis 2 Left -->
+ <value>isometricOffAxis2Left</value>
+ <!-- Isometric Off Axis 2 Right -->
+ <value>isometricOffAxis2Right</value>
+ <!-- Isometric Off Axis 2 Top -->
+ <value>isometricOffAxis2Top</value>
+ <!-- Isometric Off Axis 3 Left -->
+ <value>isometricOffAxis3Left</value>
+ <!-- Isometric Off Axis 3 Right -->
+ <value>isometricOffAxis3Right</value>
+ <!-- Isometric Off Axis 3 Bottom -->
+ <value>isometricOffAxis3Bottom</value>
+ <!-- Isometric Off Axis 4 Left -->
+ <value>isometricOffAxis4Left</value>
+ <!-- Isometric Off Axis 4 Right -->
+ <value>isometricOffAxis4Right</value>
+ <!-- Isometric Off Axis 4 Bottom -->
+ <value>isometricOffAxis4Bottom</value>
+ <!-- Oblique Top Left -->
+ <value>obliqueTopLeft</value>
+ <!-- Oblique Top -->
+ <value>obliqueTop</value>
+ <!-- Oblique Top Right -->
+ <value>obliqueTopRight</value>
+ <!-- Oblique Left -->
+ <value>obliqueLeft</value>
+ <!-- Oblique Right -->
+ <value>obliqueRight</value>
+ <!-- Oblique Bottom Left -->
+ <value>obliqueBottomLeft</value>
+ <!-- Oblique Bottom -->
+ <value>obliqueBottom</value>
+ <!-- Oblique Bottom Right -->
+ <value>obliqueBottomRight</value>
+ <!-- Perspective Front -->
+ <value>perspectiveFront</value>
+ <!-- Perspective Left -->
+ <value>perspectiveLeft</value>
+ <!-- Perspective Right -->
+ <value>perspectiveRight</value>
+ <!-- Orthographic Above -->
+ <value>perspectiveAbove</value>
+ <!-- Perspective Below -->
+ <value>perspectiveBelow</value>
+ <!-- Perspective Above Left Facing -->
+ <value>perspectiveAboveLeftFacing</value>
+ <!-- Perspective Above Right Facing -->
+ <value>perspectiveAboveRightFacing</value>
+ <!-- Perspective Contrasting Left Facing -->
+ <value>perspectiveContrastingLeftFacing</value>
+ <!-- Perspective Contrasting Right Facing -->
+ <value>perspectiveContrastingRightFacing</value>
+ <!-- Perspective Heroic Left Facing -->
+ <value>perspectiveHeroicLeftFacing</value>
+ <!-- Perspective Heroic Right Facing -->
+ <value>perspectiveHeroicRightFacing</value>
+ <!-- Perspective Heroic Extreme Left Facing -->
+ <value>perspectiveHeroicExtremeLeftFacing</value>
+ <!-- Perspective Heroic Extreme Right Facing -->
+ <value>perspectiveHeroicExtremeRightFacing</value>
+ <!-- Perspective Relaxed -->
+ <value>perspectiveRelaxed</value>
+ <!-- Perspective Relaxed Moderately -->
+ <value>perspectiveRelaxedModerately</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_FOVAngle">
+ <empty/>
+ </define>
+ <define name="CT_Camera">
+ <optional>
+ <element name="rot">
+ <ref name="CT_SphereCoords"/>
+ </element>
+ </optional>
+ <attribute name="prst">
+ <ref name="ST_PresetCameraType"/>
+ <xs:documentation>Preset Camera Type</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="fov">
+ <ref name="ST_FOVAngle"/>
+ <xs:documentation>Field of View</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="zoom">
+ <ref name="ST_PositivePercentage"/>
+ <xs:documentation>Zoom</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ </grammar>
+ <resource name="ST_PresetCameraType" resource="List" generated="yes">
+ <value name="legacyObliqueTopLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueTopLeft">legacyObliqueTopLeft</value>
+ <value name="legacyObliqueTop" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueTop">legacyObliqueTop</value>
+ <value name="legacyObliqueTopRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueTopRight">legacyObliqueTopRight</value>
+ <value name="legacyObliqueLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueLeft">legacyObliqueLeft</value>
+ <value name="legacyObliqueFront" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueFront">legacyObliqueFront</value>
+ <value name="legacyObliqueRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueRight">legacyObliqueRight</value>
+ <value name="legacyObliqueBottomLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueBottomLeft">legacyObliqueBottomLeft</value>
+ <value name="legacyObliqueBottom" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueBottom">legacyObliqueBottom</value>
+ <value name="legacyObliqueBottomRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyObliqueBottomRight">legacyObliqueBottomRight</value>
+ <value name="legacyPerspectiveTopLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveTopLeft">legacyPerspectiveTopLeft</value>
+ <value name="legacyPerspectiveTop" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveTop">legacyPerspectiveTop</value>
+ <value name="legacyPerspectiveTopRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveTopRight">legacyPerspectiveTopRight</value>
+ <value name="legacyPerspectiveLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveLeft">legacyPerspectiveLeft</value>
+ <value name="legacyPerspectiveFront" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveFront">legacyPerspectiveFront</value>
+ <value name="legacyPerspectiveRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveRight">legacyPerspectiveRight</value>
+ <value name="legacyPerspectiveBottomLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveBottomLeft">legacyPerspectiveBottomLeft</value>
+ <value name="legacyPerspectiveBottom" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveBottom">legacyPerspectiveBottom</value>
+ <value name="legacyPerspectiveBottomRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_legacyPerspectiveBottomRight">legacyPerspectiveBottomRight</value>
+ <value name="orthographicFront" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_orthographicFront">orthographicFront</value>
+ <value name="isometricTopUp" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricTopUp">isometricTopUp</value>
+ <value name="isometricTopDown" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricTopDown">isometricTopDown</value>
+ <value name="isometricBottomUp" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricBottomUp">isometricBottomUp</value>
+ <value name="isometricBottomDown" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricBottomDown">isometricBottomDown</value>
+ <value name="isometricLeftUp" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricLeftUp">isometricLeftUp</value>
+ <value name="isometricLeftDown" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricLeftDown">isometricLeftDown</value>
+ <value name="isometricRightUp" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricRightUp">isometricRightUp</value>
+ <value name="isometricRightDown" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricRightDown">isometricRightDown</value>
+ <value name="isometricOffAxis1Left" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis1Left">isometricOffAxis1Left</value>
+ <value name="isometricOffAxis1Right" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis1Right">isometricOffAxis1Right</value>
+ <value name="isometricOffAxis1Top" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis1Top">isometricOffAxis1Top</value>
+ <value name="isometricOffAxis2Left" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis2Left">isometricOffAxis2Left</value>
+ <value name="isometricOffAxis2Right" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis2Right">isometricOffAxis2Right</value>
+ <value name="isometricOffAxis2Top" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis2Top">isometricOffAxis2Top</value>
+ <value name="isometricOffAxis3Left" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis3Left">isometricOffAxis3Left</value>
+ <value name="isometricOffAxis3Right" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis3Right">isometricOffAxis3Right</value>
+ <value name="isometricOffAxis3Bottom" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis3Bottom">isometricOffAxis3Bottom</value>
+ <value name="isometricOffAxis4Left" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis4Left">isometricOffAxis4Left</value>
+ <value name="isometricOffAxis4Right" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis4Right">isometricOffAxis4Right</value>
+ <value name="isometricOffAxis4Bottom" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_isometricOffAxis4Bottom">isometricOffAxis4Bottom</value>
+ <value name="obliqueTopLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueTopLeft">obliqueTopLeft</value>
+ <value name="obliqueTop" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueTop">obliqueTop</value>
+ <value name="obliqueTopRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueTopRight">obliqueTopRight</value>
+ <value name="obliqueLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueLeft">obliqueLeft</value>
+ <value name="obliqueRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueRight">obliqueRight</value>
+ <value name="obliqueBottomLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueBottomLeft">obliqueBottomLeft</value>
+ <value name="obliqueBottom" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueBottom">obliqueBottom</value>
+ <value name="obliqueBottomRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_obliqueBottomRight">obliqueBottomRight</value>
+ <value name="perspectiveFront" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveFront">perspectiveFront</value>
+ <value name="perspectiveLeft" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveLeft">perspectiveLeft</value>
+ <value name="perspectiveRight" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveRight">perspectiveRight</value>
+ <value name="perspectiveAbove" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveAbove">perspectiveAbove</value>
+ <value name="perspectiveBelow" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveBelow">perspectiveBelow</value>
+ <value name="perspectiveAboveLeftFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveAboveLeftFacing">perspectiveAboveLeftFacing</value>
+ <value name="perspectiveAboveRightFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveAboveRightFacing">perspectiveAboveRightFacing</value>
+ <value name="perspectiveContrastingLeftFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveContrastingLeftFacing">perspectiveContrastingLeftFacing</value>
+ <value name="perspectiveContrastingRightFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveContrastingRightFacing">perspectiveContrastingRightFacing</value>
+ <value name="perspectiveHeroicLeftFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicLeftFacing">perspectiveHeroicLeftFacing</value>
+ <value name="perspectiveHeroicRightFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicRightFacing">perspectiveHeroicRightFacing</value>
+ <value name="perspectiveHeroicExtremeLeftFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicExtremeLeftFacing">perspectiveHeroicExtremeLeftFacing</value>
+ <value name="perspectiveHeroicExtremeRightFacing" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveHeroicExtremeRightFacing">perspectiveHeroicExtremeRightFacing</value>
+ <value name="perspectiveRelaxed" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveRelaxed">perspectiveRelaxed</value>
+ <value name="perspectiveRelaxedModerately" tokenid="ooxml:Value_drawingml_ST_PresetCameraType_perspectiveRelaxedModerately">perspectiveRelaxedModerately</value>
+ </resource>
+ </namespace>
+ <namespace name="dml-baseStylesheet" file="dml-baseStylesheet.rng" todo="ignore">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- ISO RELAX NG Schema -->
+ <define name="ST_StyleMatrixColumnIndex">
+ <data type="unsignedInt">
+ <xs:documentation>Style Matrix Column Index</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_FontCollectionIndex">
+ <list>
+ <xs:documentation>Font Collection Index</xs:documentation>
+ <choice>
+ <!-- Major Font -->
+ <value>major</value>
+ <!-- Minor Font -->
+ <value>minor</value>
+ <!-- None -->
+ <value>none</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ColorSchemeIndex">
+ <list>
+ <xs:documentation>Theme Color Reference</xs:documentation>
+ <choice>
+ <!-- Dark 1 -->
+ <value>dk1</value>
+ <!-- Light 1 -->
+ <value>lt1</value>
+ <!-- Dark 2 -->
+ <value>dk2</value>
+ <!-- Light 2 -->
+ <value>lt2</value>
+ <!-- Accent 1 -->
+ <value>accent1</value>
+ <!-- Accent 2 -->
+ <value>accent2</value>
+ <!-- Accent 3 -->
+ <value>accent3</value>
+ <!-- Accent 4 -->
+ <value>accent4</value>
+ <!-- Accent 5 -->
+ <value>accent5</value>
+ <!-- Accent 6 -->
+ <value>accent6</value>
+ <!-- Hyperlink -->
+ <value>hlink</value>
+ <!-- Followed Hyperlink -->
+ <value>folHlink</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_ColorScheme">
+ <group>
+ <element name="dk1">
+ <ref name="CT_Color"/>
+ </element>
+ <element name="lt1">
+ <ref name="CT_Color"/>
+ </element>
+ <element name="dk2">
+ <ref name="CT_Color"/>
+ </element>
+ <element name="lt2">
+ <ref name="CT_Color"/>
+ </element>
+ <element name="accent1">
+ <ref name="CT_Color"/>
+ </element>
+ <element name="accent2">
+ <ref name="CT_Color"/>
+ </element>
+ <element name="accent3">
+ <ref name="CT_Color"/>
+ </element>
+ <element name="accent4">
+ <ref name="CT_Color"/>
+ </element>
+ <element name="accent5">
+ <ref name="CT_Color"/>
+ </element>
+ <element name="accent6">
+ <ref name="CT_Color"/>
+ </element>
+ <element name="hlink">
+ <ref name="CT_Color"/>
+ </element>
+ <element name="folHlink">
+ <ref name="CT_Color"/>
+ </element>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomColor">
+ <ref name="EG_ColorChoice"/>
+ <optional>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_SupplementalFont">
+ <attribute name="script">
+ <data type="string">
+ <xs:documentation>Script</xs:documentation>
+ </data>
+ <xs:documentation>Script</xs:documentation>
+ </attribute>
+ <attribute name="typeface">
+ <ref name="ST_TextTypeface"/>
+ <xs:documentation>Typeface</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomColorList">
+ <zeroOrMore>
+ <element name="custClr">
+ <ref name="CT_CustomColor"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_FontCollection">
+ <element name="latin">
+ <ref name="CT_TextFont"/>
+ </element>
+ <element name="ea">
+ <ref name="CT_TextFont"/>
+ </element>
+ <element name="cs">
+ <ref name="CT_TextFont"/>
+ </element>
+ <zeroOrMore>
+ <element name="font">
+ <ref name="CT_SupplementalFont"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_EffectStyleItem">
+ <ref name="EG_EffectProperties"/>
+ <optional>
+ <element name="scene3d">
+ <ref name="CT_Scene3D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sp3d">
+ <ref name="CT_Shape3D"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_FontScheme">
+ <group>
+ <element name="majorFont">
+ <ref name="CT_FontCollection"/>
+ </element>
+ <element name="minorFont">
+ <ref name="CT_FontCollection"/>
+ </element>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FillStyleList">
+ <oneOrMore>
+ <ref name="EG_FillProperties"/>
+ </oneOrMore>
+ </define>
+ <define name="CT_LineStyleList">
+ <oneOrMore>
+ <element name="ln">
+ <ref name="CT_LineProperties"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_EffectStyleList">
+ <oneOrMore>
+ <element name="effectStyle">
+ <ref name="CT_EffectStyleItem"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_BackgroundFillStyleList">
+ <oneOrMore>
+ <ref name="EG_FillProperties"/>
+ </oneOrMore>
+ </define>
+ <define name="CT_StyleMatrix">
+ <group>
+ <element name="fillStyleLst">
+ <ref name="CT_FillStyleList"/>
+ </element>
+ <element name="lnStyleLst">
+ <ref name="CT_LineStyleList"/>
+ </element>
+ <element name="effectStyleLst">
+ <ref name="CT_EffectStyleList"/>
+ </element>
+ <element name="bgFillStyleLst">
+ <ref name="CT_BackgroundFillStyleList"/>
+ </element>
+ </group>
+ <optional>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_BaseStyles">
+ <element name="clrScheme">
+ <ref name="CT_ColorScheme"/>
+ </element>
+ <element name="fontScheme">
+ <ref name="CT_FontScheme"/>
+ </element>
+ <element name="fmtScheme">
+ <ref name="CT_StyleMatrix"/>
+ </element>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ </grammar>
+ <resource name="ST_StyleMatrixColumnIndex" resource="Integer" generated="yes"/>
+ <resource name="ST_FontCollectionIndex" resource="List" generated="yes">
+ <value name="major" tokenid="ooxml:Value_drawingml_ST_FontCollectionIndex_major">major</value>
+ <value name="minor" tokenid="ooxml:Value_drawingml_ST_FontCollectionIndex_minor">minor</value>
+ <value name="none" tokenid="ooxml:Value_drawingml_ST_FontCollectionIndex_none">none</value>
+ </resource>
+ <resource name="ST_ColorSchemeIndex" resource="List" generated="yes">
+ <value name="dk1" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_dk1">dk1</value>
+ <value name="lt1" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_lt1">lt1</value>
+ <value name="dk2" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_dk2">dk2</value>
+ <value name="lt2" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_lt2">lt2</value>
+ <value name="accent1" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent1">accent1</value>
+ <value name="accent2" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent2">accent2</value>
+ <value name="accent3" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent3">accent3</value>
+ <value name="accent4" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent4">accent4</value>
+ <value name="accent5" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent5">accent5</value>
+ <value name="accent6" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_accent6">accent6</value>
+ <value name="hlink" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_hlink">hlink</value>
+ <value name="folHlink" tokenid="ooxml:Value_drawingml_ST_ColorSchemeIndex_folHlink">folHlink</value>
+ </resource>
+ <resource name="CT_ColorScheme" resource="Properties" tag="theme">
+ <element name="dk1" tokenid="ooxml:CT_ColorScheme_dk1"/>
+ <element name="lt1" tokenid="ooxml:CT_ColorScheme_lt1"/>
+ <element name="dk2" tokenid="ooxml:CT_ColorScheme_dk2"/>
+ <element name="lt2" tokenid="ooxml:CT_ColorScheme_lt2"/>
+ <element name="accent1" tokenid="ooxml:CT_ColorScheme_accent1"/>
+ <element name="accent2" tokenid="ooxml:CT_ColorScheme_accent2"/>
+ <element name="accent3" tokenid="ooxml:CT_ColorScheme_accent3"/>
+ <element name="accent4" tokenid="ooxml:CT_ColorScheme_accent4"/>
+ <element name="accent5" tokenid="ooxml:CT_ColorScheme_accent5"/>
+ <element name="accent6" tokenid="ooxml:CT_ColorScheme_accent6"/>
+ <element name="hlink" tokenid="ooxml:CT_ColorScheme_hlink"/>
+ <element name="folHlink" tokenid="ooxml:CT_ColorScheme_folHlink"/>
+ <element name="extLst" tokenid="ooxml:CT_ColorScheme_extLst"/>
+ <attribute name="name" tokenid="ooxml:CT_ColorScheme_name"/>
+ </resource>
+ <resource name="CT_SupplementalFont" resource="Properties" tag="theme">
+ <attribute name="script" tokenid="ooxml:CT_SupplementalFont_script"/>
+ <attribute name="typeface" tokenid="ooxml:CT_SupplementalFont_typeface"/>
+ </resource>
+ <resource name="CT_FontCollection" resource="Properties" tag="theme">
+ <element name="latin" tokenid="ooxml:CT_FontCollection_latin"/>
+ <element name="ea" tokenid="ooxml:CT_FontCollection_ea"/>
+ <element name="cs" tokenid="ooxml:CT_FontCollection_cs"/>
+ <element name="font" tokenid="ooxml:CT_FontCollection_font"/>
+ <element name="extLst" tokenid="ooxml:CT_FontCollection_extLst"/>
+ </resource>
+ <resource name="CT_FontScheme" resource="Properties" tag="theme">
+ <element name="majorFont" tokenid="ooxml:CT_FontScheme_majorFont"/>
+ <element name="minorFont" tokenid="ooxml:CT_FontScheme_minorFont"/>
+ <element name="extLst" tokenid="ooxml:CT_FontScheme_extLst"/>
+ <attribute name="name" tokenid="ooxml:CT_FontScheme_name"/>
+ </resource>
+ <resource name="CT_FillStyleList" resource="Properties" tag="theme"/>
+ <resource name="CT_LineStyleList" resource="Properties" tag="theme">
+ <element name="ln" tokenid="ooxml:CT_LineStyleList_ln"/>
+ </resource>
+ <resource name="CT_EffectStyleList" resource="Properties" tag="theme">
+ <element name="effectStyle" tokenid="ooxml:CT_EffectStyleList_effectStyle"/>
+ </resource>
+ <resource name="CT_BackgroundFillStyleList" resource="Properties" tag="theme"/>
+ <resource name="CT_StyleMatrix" resource="Properties" tag="theme">
+ <element name="fillStyleLst" tokenid="ooxml:CT_StyleMatrix_fillStyleLst"/>
+ <element name="lnStyleLst" tokenid="ooxml:CT_StyleMatrix_lnStyleLst"/>
+ <element name="effectStyleLst" tokenid="ooxml:CT_StyleMatrix_effectStyleLst"/>
+ <element name="bgFillStyleLst" tokenid="ooxml:CT_StyleMatrix_bgFillStyleLst"/>
+ <attribute name="name" tokenid="ooxml:CT_StyleMatrix_name"/>
+ </resource>
+ <resource name="CT_BaseStyles" resource="Properties" tag="theme">
+ <element name="clrScheme" tokenid="ooxml:CT_BaseStyles_clrScheme"/>
+ <element name="fontScheme" tokenid="ooxml:CT_BaseStyles_fontScheme"/>
+ <element name="fmtScheme" tokenid="ooxml:CT_BaseStyles_fmtScheme"/>
+ <element name="extLst" tokenid="ooxml:CT_BaseStyles_extLst"/>
+ </resource>
+ </namespace>
+ <namespace name="dml-textCharacter" file="dml-textCharacter.rng" todo="ignore">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-baseTypes.rng"/>
+ <include href="dml-shapeEffects.rng"/>
+ <include href="dml-shapeLineProperties.rng"/>
+ <define name="ST_TextPoint">
+ <data type="int">
+ <xs:documentation>Text Point</xs:documentation>
+ <param name="minInclusive">-400000</param>
+ <param name="maxInclusive">400000</param>
+ </data>
+ </define>
+ <define name="ST_TextNonNegativePoint">
+ <data type="int">
+ <xs:documentation>Text Non-Negative Point</xs:documentation>
+ <param name="minInclusive">0</param>
+ <param name="maxInclusive">400000</param>
+ </data>
+ </define>
+ <define name="ST_TextFontSize">
+ <data type="int">
+ <xs:documentation>Text Font Size</xs:documentation>
+ <param name="minInclusive">100</param>
+ <param name="maxInclusive">400000</param>
+ </data>
+ </define>
+ <define name="ST_Panose">
+ <data type="hexBinary">
+ <xs:documentation>Panose Type</xs:documentation>
+ <param name="length">10</param>
+ </data>
+ </define>
+ <define name="ST_TextTypeface">
+ <data type="string">
+ <xs:documentation>Text Typeface</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_TextFont">
+ <attribute name="typeface">
+ <ref name="ST_TextTypeface"/>
+ <xs:documentation>Text Typeface</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="panose">
+ <ref name="ST_Panose"/>
+ <xs:documentation>Panose Setting</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="pitchFamily">
+ <data type="byte">
+ <xs:documentation>Similar Font Family</xs:documentation>
+ </data>
+ <xs:documentation>Similar Font Family</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="charset">
+ <data type="byte">
+ <xs:documentation>Similar Character Set</xs:documentation>
+ </data>
+ <xs:documentation>Similar Character Set</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_TextLanguageID">
+ <data type="string">
+ <xs:documentation>Language ID</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_TextUnderlineType">
+ <list>
+ <xs:documentation>Text Underline Types</xs:documentation>
+ <choice>
+ <!-- Text Underline Enum ( None ) -->
+ <value>none</value>
+ <!-- Text Underline Enum ( Words ) -->
+ <value>words</value>
+ <!-- Text Underline Enum ( Single ) -->
+ <value>sng</value>
+ <!-- Text Underline Enum ( Double ) -->
+ <value>dbl</value>
+ <!-- Text Underline Enum ( Heavy ) -->
+ <value>heavy</value>
+ <!-- Text Underline Enum ( Dotted ) -->
+ <value>dotted</value>
+ <!-- Text Underline Enum ( Heavy Dotted ) -->
+ <value>dottedHeavy</value>
+ <!-- Text Underline Enum ( Dashed ) -->
+ <value>dash</value>
+ <!-- Text Underline Enum ( Heavy Dashed ) -->
+ <value>dashHeavy</value>
+ <!-- Text Underline Enum ( Long Dashed ) -->
+ <value>dashLong</value>
+ <!-- Text Underline Enum ( Heavy Long Dashed ) -->
+ <value>dashLongHeavy</value>
+ <!-- Text Underline Enum ( Dot Dash ) -->
+ <value>dotDash</value>
+ <!-- Text Underline Enum ( Heavy Dot Dash ) -->
+ <value>dotDashHeavy</value>
+ <!-- Text Underline Enum ( Dot Dot Dash ) -->
+ <value>dotDotDash</value>
+ <!-- Text Underline Enum ( Heavy Dot Dot Dash ) -->
+ <value>dotDotDashHeavy</value>
+ <!-- Text Underline Enum ( Wavy ) -->
+ <value>wavy</value>
+ <!-- Text Underline Enum ( Heavy Wavy ) -->
+ <value>wavyHeavy</value>
+ <!-- Text Underline Enum ( Double Wavy ) -->
+ <value>wavyDbl</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TextUnderlineLineFollowText">
+ <empty/>
+ </define>
+ <define name="CT_TextUnderlineFillFollowText">
+ <empty/>
+ </define>
+ <define name="CT_TextUnderlineFillGroupWrapper">
+ <ref name="EG_FillProperties"/>
+ </define>
+ <define name="EG_TextUnderlineLine">
+ <choice>
+ <element name="uLnTx">
+ <ref name="CT_TextUnderlineLineFollowText"/>
+ </element>
+ <optional>
+ <element name="uLn">
+ <ref name="CT_LineProperties"/>
+ </element>
+ </optional>
+ </choice>
+ </define>
+ <define name="EG_TextUnderlineFill">
+ <choice>
+ <element name="uFillTx">
+ <ref name="CT_TextUnderlineFillFollowText"/>
+ </element>
+ <element name="uFill">
+ <ref name="CT_TextUnderlineFillGroupWrapper"/>
+ </element>
+ </choice>
+ </define>
+ <define name="ST_TextStrikeType">
+ <list>
+ <xs:documentation>Text Strike Type</xs:documentation>
+ <choice>
+ <!-- Text Strike Enum ( No Strike ) -->
+ <value>noStrike</value>
+ <!-- Text Strike Enum ( Single Strike ) -->
+ <value>sngStrike</value>
+ <!-- Text Strike Enum ( Double Strike ) -->
+ <value>dblStrike</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_TextCapsType">
+ <list>
+ <xs:documentation>Text Cap Types</xs:documentation>
+ <choice>
+ <!-- Text Caps Enum ( None ) -->
+ <value>none</value>
+ <!-- Text Caps Enum ( Small ) -->
+ <value>small</value>
+ <!-- Text Caps Enum ( All ) -->
+ <value>all</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TextCharacterProperties">
+ <group>
+ <optional>
+ <element name="ln">
+ <ref name="CT_LineProperties"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_FillProperties"/>
+ </optional>
+ <optional>
+ <ref name="EG_EffectProperties"/>
+ </optional>
+ <optional>
+ <element name="highlight">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_TextUnderlineLine"/>
+ </optional>
+ <optional>
+ <ref name="EG_TextUnderlineFill"/>
+ </optional>
+ <optional>
+ <element name="latin">
+ <ref name="CT_TextFont"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ea">
+ <ref name="CT_TextFont"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cs">
+ <ref name="CT_TextFont"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sym">
+ <ref name="CT_TextFont"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hlinkClick">
+ <ref name="CT_Hyperlink"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hlinkMouseOver">
+ <ref name="CT_Hyperlink"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="kumimoji">
+ <data type="boolean">
+ <xs:documentation>Kumimoji</xs:documentation>
+ </data>
+ <xs:documentation>Kumimoji</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lang">
+ <ref name="ST_TextLanguageID"/>
+ <xs:documentation>Language ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="altLang">
+ <ref name="ST_TextLanguageID"/>
+ <xs:documentation>Alternative Language</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sz">
+ <ref name="ST_TextFontSize"/>
+ <xs:documentation>Font Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="b">
+ <data type="boolean">
+ <xs:documentation>Bold</xs:documentation>
+ </data>
+ <xs:documentation>Bold</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="i">
+ <data type="boolean">
+ <xs:documentation>Italics</xs:documentation>
+ </data>
+ <xs:documentation>Italics</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="u">
+ <ref name="ST_TextUnderlineType"/>
+ <xs:documentation>Underline</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="strike">
+ <ref name="ST_TextStrikeType"/>
+ <xs:documentation>Strikethrough</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="kern">
+ <ref name="ST_TextNonNegativePoint"/>
+ <xs:documentation>Kerning</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cap">
+ <ref name="ST_TextCapsType"/>
+ <xs:documentation>Capitalization</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="spc">
+ <ref name="ST_TextPoint"/>
+ <xs:documentation>Spacing</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="normalizeH">
+ <data type="boolean">
+ <xs:documentation>Normalize Heights</xs:documentation>
+ </data>
+ <xs:documentation>Normalize Heights</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="baseline">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Baseline</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noProof">
+ <data type="boolean">
+ <xs:documentation>No Proofing</xs:documentation>
+ </data>
+ <xs:documentation>No Proofing</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dirty">
+ <data type="boolean">
+ <xs:documentation>Dirty</xs:documentation>
+ </data>
+ <xs:documentation>Dirty</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="err">
+ <data type="boolean">
+ <xs:documentation>Spelling Error</xs:documentation>
+ </data>
+ <xs:documentation>Spelling Error</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="smtClean">
+ <data type="boolean">
+ <xs:documentation>SmartTag Clean</xs:documentation>
+ </data>
+ <xs:documentation>SmartTag Clean</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="smtId">
+ <data type="unsignedInt">
+ <xs:documentation>SmartTag ID</xs:documentation>
+ </data>
+ <xs:documentation>SmartTag ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="bmk">
+ <data type="string">
+ <xs:documentation>Bookmark Link Target</xs:documentation>
+ </data>
+ <xs:documentation>Bookmark Link Target</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ </grammar>
+ <resource name="ST_TextPoint" resource="Integer" generated="yes"/>
+ <resource name="ST_TextNonNegativePoint" resource="Integer" generated="yes"/>
+ <resource name="ST_TextFontSize" resource="Integer" generated="yes"/>
+ <resource name="ST_Panose" resource="Hex" generated="yes"/>
+ <resource name="ST_TextTypeface" resource="String" generated="yes"/>
+ <resource name="CT_TextFont" resource="Properties" tag="character">
+ <attribute name="typeface" tokenid="ooxml:CT_TextFont_typeface"/>
+ <attribute name="panose" tokenid="ooxml:CT_TextFont_panose"/>
+ <attribute name="pitchFamily" tokenid="ooxml:CT_TextFont_pitchFamily"/>
+ <attribute name="charset" tokenid="ooxml:CT_TextFont_charset"/>
+ </resource>
+ <resource name="ST_TextLanguageID" resource="String" generated="yes"/>
+ <resource name="ST_TextUnderlineType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_none">none</value>
+ <value name="words" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_words">words</value>
+ <value name="sng" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_sng">sng</value>
+ <value name="dbl" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dbl">dbl</value>
+ <value name="heavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_heavy">heavy</value>
+ <value name="dotted" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotted">dotted</value>
+ <value name="dottedHeavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dottedHeavy">dottedHeavy</value>
+ <value name="dash" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dash">dash</value>
+ <value name="dashHeavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dashHeavy">dashHeavy</value>
+ <value name="dashLong" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dashLong">dashLong</value>
+ <value name="dashLongHeavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dashLongHeavy">dashLongHeavy</value>
+ <value name="dotDash" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDash">dotDash</value>
+ <value name="dotDashHeavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDashHeavy">dotDashHeavy</value>
+ <value name="dotDotDash" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDotDash">dotDotDash</value>
+ <value name="dotDotDashHeavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_dotDotDashHeavy">dotDotDashHeavy</value>
+ <value name="wavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_wavy">wavy</value>
+ <value name="wavyHeavy" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_wavyHeavy">wavyHeavy</value>
+ <value name="wavyDbl" tokenid="ooxml:Value_drawingml_ST_TextUnderlineType_wavyDbl">wavyDbl</value>
+ </resource>
+ <resource name="ST_TextStrikeType" resource="List" generated="yes">
+ <value name="noStrike" tokenid="ooxml:Value_drawingml_ST_TextStrikeType_noStrike">noStrike</value>
+ <value name="sngStrike" tokenid="ooxml:Value_drawingml_ST_TextStrikeType_sngStrike">sngStrike</value>
+ <value name="dblStrike" tokenid="ooxml:Value_drawingml_ST_TextStrikeType_dblStrike">dblStrike</value>
+ </resource>
+ <resource name="ST_TextCapsType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_drawingml_ST_TextCapsType_none">none</value>
+ <value name="small" tokenid="ooxml:Value_drawingml_ST_TextCapsType_small">small</value>
+ <value name="all" tokenid="ooxml:Value_drawingml_ST_TextCapsType_all">all</value>
+ </resource>
+ </namespace>
+ <namespace name="dml-shapeEffects" file="dml-shapeEffects.rng" todo="ignore">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-baseTypes.rng"/>
+ <!-- start = blip -->
+ <define name="CT_AlphaBiLevelEffect">
+ <attribute name="thresh">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Threshold</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_AlphaCeilingEffect">
+ <empty/>
+ </define>
+ <define name="CT_AlphaFloorEffect">
+ <empty/>
+ </define>
+ <define name="CT_AlphaInverseEffect">
+ <optional>
+ <ref name="EG_ColorChoice"/>
+ </optional>
+ </define>
+ <define name="CT_AlphaModulateFixedEffect">
+ <optional>
+ <attribute name="amt">
+ <ref name="ST_PositivePercentage"/>
+ <xs:documentation>Amount</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_AlphaOutsetEffect">
+ <optional>
+ <attribute name="rad">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Radius</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_AlphaReplaceEffect">
+ <attribute name="a">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Alpha</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_BiLevelEffect">
+ <attribute name="thresh">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Threshold</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_BlurEffect">
+ <optional>
+ <attribute name="rad">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Radius</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="grow">
+ <data type="boolean">
+ <xs:documentation>Grow Bounds</xs:documentation>
+ </data>
+ <xs:documentation>Grow Bounds</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_ColorChangeEffect">
+ <group>
+ <element name="clrFrom">
+ <ref name="CT_Color"/>
+ </element>
+ <element name="clrTo">
+ <ref name="CT_Color"/>
+ </element>
+ </group>
+ <optional>
+ <attribute name="useA">
+ <data type="boolean">
+ <xs:documentation>Consider Alpha Values</xs:documentation>
+ </data>
+ <xs:documentation>Consider Alpha Values</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_ColorReplaceEffect">
+ <ref name="EG_ColorChoice"/>
+ </define>
+ <define name="CT_DuotoneEffect">
+ <oneOrMore>
+ <ref name="EG_ColorChoice"/>
+ </oneOrMore>
+ </define>
+ <define name="CT_GlowEffect">
+ <ref name="EG_ColorChoice"/>
+ <optional>
+ <attribute name="rad">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Radius</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_GrayscaleEffect">
+ <empty/>
+ </define>
+ <define name="CT_HSLEffect">
+ <optional>
+ <attribute name="hue">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Hue</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sat">
+ <ref name="ST_FixedPercentage"/>
+ <xs:documentation>Saturation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lum">
+ <ref name="ST_FixedPercentage"/>
+ <xs:documentation>Luminance</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_InnerShadowEffect">
+ <ref name="EG_ColorChoice"/>
+ <optional>
+ <attribute name="blurRad">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Blur Radius</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dist">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Distance</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dir">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Direction</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_LuminanceEffect">
+ <optional>
+ <attribute name="bright">
+ <ref name="ST_FixedPercentage"/>
+ <xs:documentation>Brightness</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="contrast">
+ <ref name="ST_FixedPercentage"/>
+ <xs:documentation>Contrast</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_OuterShadowEffect">
+ <ref name="EG_ColorChoice"/>
+ <optional>
+ <attribute name="blurRad">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Blur Radius</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dist">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Shadow Offset Distance</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dir">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Shadow Direction</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sx">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Horizontal Scaling Factor</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sy">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Vertical Scaling Factor</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="kx">
+ <ref name="ST_FixedAngle"/>
+ <xs:documentation>Horizontal Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ky">
+ <ref name="ST_FixedAngle"/>
+ <xs:documentation>Vertical Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="algn">
+ <ref name="ST_RectAlignment"/>
+ <xs:documentation>Shadow Alignment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotWithShape">
+ <data type="boolean">
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </data>
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_PresetShadowVal">
+ <list>
+ <xs:documentation>Preset Shadow Type</xs:documentation>
+ <choice>
+ <!-- Top Left Drop Shadow -->
+ <value>shdw1</value>
+ <!-- Top Right Drop Shadow -->
+ <value>shdw2</value>
+ <!-- Back Left Perspective Shadow -->
+ <value>shdw3</value>
+ <!-- Back Right Perspective Shadow -->
+ <value>shdw4</value>
+ <!-- Bottom Left Drop Shadow -->
+ <value>shdw5</value>
+ <!-- Bottom Right Drop Shadow -->
+ <value>shdw6</value>
+ <!-- Front Left Perspective Shadow -->
+ <value>shdw7</value>
+ <!-- Front Right Perspective Shadow -->
+ <value>shdw8</value>
+ <!-- Top Left Small Drop Shadow -->
+ <value>shdw9</value>
+ <!-- Top Left Large Drop Shadow -->
+ <value>shdw10</value>
+ <!-- Back Left Long Perspective Shadow -->
+ <value>shdw11</value>
+ <!-- Back Right Long Perspective Shadow -->
+ <value>shdw12</value>
+ <!-- Top Left Double Drop Shadow -->
+ <value>shdw13</value>
+ <!-- Bottom Right Small Drop Shadow -->
+ <value>shdw14</value>
+ <!-- Front Left Long Perspective Shadow -->
+ <value>shdw15</value>
+ <!-- Front Right LongPerspective Shadow -->
+ <value>shdw16</value>
+ <!-- 3D Outer Box Shadow -->
+ <value>shdw17</value>
+ <!-- 3D Inner Box Shadow -->
+ <value>shdw18</value>
+ <!-- Back Center Perspective Shadow -->
+ <value>shdw19</value>
+ <!-- Front Bottom Shadow -->
+ <value>shdw20</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PresetShadowEffect">
+ <ref name="EG_ColorChoice"/>
+ <attribute name="prst">
+ <ref name="ST_PresetShadowVal"/>
+ <xs:documentation>Preset Shadow</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="dist">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Distance</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dir">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Direction</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_ReflectionEffect">
+ <optional>
+ <attribute name="blurRad">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Blur Radius</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="stA">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Start Opacity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="stPos">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Start Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endA">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>End Alpha</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endPos">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>End Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dist">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Distance</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dir">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Direction</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fadeDir">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Fade Direction</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sx">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Horizontal Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sy">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Vertical Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="kx">
+ <ref name="ST_FixedAngle"/>
+ <xs:documentation>Horizontal Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ky">
+ <ref name="ST_FixedAngle"/>
+ <xs:documentation>Vertical Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="algn">
+ <ref name="ST_RectAlignment"/>
+ <xs:documentation>Shadow Alignment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotWithShape">
+ <data type="boolean">
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </data>
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_RelativeOffsetEffect">
+ <optional>
+ <attribute name="tx">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Offset X</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ty">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Offset Y</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_SoftEdgesEffect">
+ <attribute name="rad">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Radius</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TintEffect">
+ <optional>
+ <attribute name="hue">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Hue</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="amt">
+ <ref name="ST_FixedPercentage"/>
+ <xs:documentation>Amount</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_TransformEffect">
+ <optional>
+ <attribute name="sx">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Horizontal Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sy">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Vertical Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="kx">
+ <ref name="ST_FixedAngle"/>
+ <xs:documentation>Horizontal Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ky">
+ <ref name="ST_FixedAngle"/>
+ <xs:documentation>Vertical Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="tx">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Horizontal Shift</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ty">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Vertical Shift</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_NoFillProperties">
+ <empty/>
+ </define>
+ <define name="CT_SolidColorFillProperties">
+ <optional>
+ <ref name="EG_ColorChoice"/>
+ </optional>
+ </define>
+ <define name="CT_LinearShadeProperties">
+ <optional>
+ <attribute name="ang">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Angle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="scaled">
+ <data type="boolean">
+ <xs:documentation>Scaled</xs:documentation>
+ </data>
+ <xs:documentation>Scaled</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_PathShadeType">
+ <list>
+ <xs:documentation>Path Shade Type</xs:documentation>
+ <choice>
+ <!-- Shape -->
+ <value>shape</value>
+ <!-- Circle -->
+ <value>circle</value>
+ <!-- Rectangle -->
+ <value>rect</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PathShadeProperties">
+ <optional>
+ <element name="fillToRect">
+ <ref name="CT_RelativeRect"/>
+ </element>
+ </optional>
+ <optional>
+ <attribute name="path">
+ <ref name="ST_PathShadeType"/>
+ <xs:documentation>Gradient Fill Path</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="EG_ShadeProperties">
+ <choice>
+ <element name="lin">
+ <ref name="CT_LinearShadeProperties"/>
+ </element>
+ <element name="path">
+ <ref name="CT_PathShadeProperties"/>
+ </element>
+ </choice>
+ </define>
+ <define name="ST_TileFlipMode">
+ <list>
+ <xs:documentation>Tile Flip Mode</xs:documentation>
+ <choice>
+ <!-- None -->
+ <value>none</value>
+ <!-- Horizontal -->
+ <value>x</value>
+ <!-- Vertical -->
+ <value>y</value>
+ <!-- Horizontal and Vertical -->
+ <value>xy</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_GradientStop">
+ <ref name="EG_ColorChoice"/>
+ <attribute name="pos">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Position</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_GradientStopList">
+ <oneOrMore>
+ <element name="gs">
+ <ref name="CT_GradientStop"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_GradientFillProperties">
+ <group>
+ <optional>
+ <element name="gsLst">
+ <ref name="CT_GradientStopList"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_ShadeProperties"/>
+ </optional>
+ <optional>
+ <element name="tileRect">
+ <ref name="CT_RelativeRect"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="flip">
+ <ref name="ST_TileFlipMode"/>
+ <xs:documentation>Tile Flip</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotWithShape">
+ <data type="boolean">
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </data>
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_TileInfoProperties">
+ <optional>
+ <attribute name="tx">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Horizontal Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ty">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Vertical Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sx">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Horizontal Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sy">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Vertical Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="flip">
+ <ref name="ST_TileFlipMode"/>
+ <xs:documentation>Tile Flipping</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="algn">
+ <ref name="ST_RectAlignment"/>
+ <xs:documentation>Alignment</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_StretchInfoProperties">
+ <optional>
+ <element name="fillRect">
+ <ref name="CT_RelativeRect"/>
+ </element>
+ </optional>
+ </define>
+ <define name="EG_FillModeProperties">
+ <choice>
+ <element name="tile">
+ <ref name="CT_TileInfoProperties"/>
+ </element>
+ <element name="stretch">
+ <ref name="CT_StretchInfoProperties"/>
+ </element>
+ </choice>
+ </define>
+ <define name="ST_BlipCompression">
+ <list>
+ <xs:documentation>Blip Compression Type</xs:documentation>
+ <choice>
+ <!-- Email Compression -->
+ <value>email</value>
+ <!-- Screen Viewing Compression -->
+ <value>screen</value>
+ <!-- Printing Compression -->
+ <value>print</value>
+ <!-- High Quality Printing Compression -->
+ <value>hqprint</value>
+ <!-- No Compression -->
+ <value>none</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Blip">
+ <group>
+ <zeroOrMore>
+ <choice>
+ <element name="alphaBiLevel">
+ <ref name="CT_AlphaBiLevelEffect"/>
+ </element>
+ <element name="alphaCeiling">
+ <ref name="CT_AlphaCeilingEffect"/>
+ </element>
+ <element name="alphaFloor">
+ <ref name="CT_AlphaFloorEffect"/>
+ </element>
+ <element name="alphaInv">
+ <ref name="CT_AlphaInverseEffect"/>
+ </element>
+ <element name="alphaMod">
+ <ref name="CT_AlphaModulateEffect"/>
+ </element>
+ <element name="alphaModFix">
+ <ref name="CT_AlphaModulateFixedEffect"/>
+ </element>
+ <element name="alphaRepl">
+ <ref name="CT_AlphaReplaceEffect"/>
+ </element>
+ <element name="biLevel">
+ <ref name="CT_BiLevelEffect"/>
+ </element>
+ <element name="blur">
+ <ref name="CT_BlurEffect"/>
+ </element>
+ <element name="clrChange">
+ <ref name="CT_ColorChangeEffect"/>
+ </element>
+ <element name="clrRepl">
+ <ref name="CT_ColorReplaceEffect"/>
+ </element>
+ <element name="duotone">
+ <ref name="CT_DuotoneEffect"/>
+ </element>
+ <element name="fillOverlay">
+ <ref name="CT_FillOverlayEffect"/>
+ </element>
+ <element name="grayscl">
+ <ref name="CT_GrayscaleEffect"/>
+ </element>
+ <element name="hsl">
+ <ref name="CT_HSLEffect"/>
+ </element>
+ <element name="lum">
+ <ref name="CT_LuminanceEffect"/>
+ </element>
+ <element name="tint">
+ <ref name="CT_TintEffect"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <ref name="AG_Blob"/>
+ <optional>
+ <attribute name="cstate">
+ <ref name="ST_BlipCompression"/>
+ <xs:documentation>Compression State</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_BlipFillProperties">
+ <group>
+ <optional>
+ <element name="blip">
+ <ref name="CT_Blip"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="srcRect">
+ <ref name="CT_RelativeRect"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_FillModeProperties"/>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="dpi">
+ <data type="unsignedInt">
+ <xs:documentation>DPI Setting</xs:documentation>
+ </data>
+ <xs:documentation>DPI Setting</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotWithShape">
+ <data type="boolean">
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </data>
+ <xs:documentation>Rotate With Shape</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_PresetPatternVal">
+ <list>
+ <xs:documentation>Preset Pattern Value</xs:documentation>
+ <choice>
+ <!-- 5% -->
+ <value>pct5</value>
+ <!-- 10% -->
+ <value>pct10</value>
+ <!-- 20% -->
+ <value>pct20</value>
+ <!-- 25% -->
+ <value>pct25</value>
+ <!-- 30% -->
+ <value>pct30</value>
+ <!-- 40% -->
+ <value>pct40</value>
+ <!-- 50% -->
+ <value>pct50</value>
+ <!-- 60% -->
+ <value>pct60</value>
+ <!-- 70% -->
+ <value>pct70</value>
+ <!-- 75% -->
+ <value>pct75</value>
+ <!-- 80% -->
+ <value>pct80</value>
+ <!-- 90% -->
+ <value>pct90</value>
+ <!-- Horizontal -->
+ <value>horz</value>
+ <!-- Vertical -->
+ <value>vert</value>
+ <!-- Light Horizontal -->
+ <value>ltHorz</value>
+ <!-- Light Vertical -->
+ <value>ltVert</value>
+ <!-- Dark Horizontal -->
+ <value>dkHorz</value>
+ <!-- Dark Vertical -->
+ <value>dkVert</value>
+ <!-- Narrow Horizontal -->
+ <value>narHorz</value>
+ <!-- Narrow Vertical -->
+ <value>narVert</value>
+ <!-- Dashed Horizontal -->
+ <value>dashHorz</value>
+ <!-- Dashed Vertical -->
+ <value>dashVert</value>
+ <!-- Cross -->
+ <value>cross</value>
+ <!-- Downward Diagonal -->
+ <value>dnDiag</value>
+ <!-- Upward Diagonal -->
+ <value>upDiag</value>
+ <!-- Light Downward Diagonal -->
+ <value>ltDnDiag</value>
+ <!-- Light Upward Diagonal -->
+ <value>ltUpDiag</value>
+ <!-- Dark Downward Diagonal -->
+ <value>dkDnDiag</value>
+ <!-- Dark Upward Diagonal -->
+ <value>dkUpDiag</value>
+ <!-- Wide Downward Diagonal -->
+ <value>wdDnDiag</value>
+ <!-- Wide Upward Diagonal -->
+ <value>wdUpDiag</value>
+ <!-- Dashed Downward Diagonal -->
+ <value>dashDnDiag</value>
+ <!-- Dashed Upward DIagonal -->
+ <value>dashUpDiag</value>
+ <!-- Diagonal Cross -->
+ <value>diagCross</value>
+ <!-- Small Checker Board -->
+ <value>smCheck</value>
+ <!-- Large Checker Board -->
+ <value>lgCheck</value>
+ <!-- Small Grid -->
+ <value>smGrid</value>
+ <!-- Large Grid -->
+ <value>lgGrid</value>
+ <!-- Dotted Grid -->
+ <value>dotGrid</value>
+ <!-- Small Confetti -->
+ <value>smConfetti</value>
+ <!-- Large Confetti -->
+ <value>lgConfetti</value>
+ <!-- Horizontal Brick -->
+ <value>horzBrick</value>
+ <!-- Diagonal Brick -->
+ <value>diagBrick</value>
+ <!-- Solid Diamond -->
+ <value>solidDmnd</value>
+ <!-- Open Diamond -->
+ <value>openDmnd</value>
+ <!-- Dotted Diamond -->
+ <value>dotDmnd</value>
+ <!-- Plaid -->
+ <value>plaid</value>
+ <!-- Sphere -->
+ <value>sphere</value>
+ <!-- Weave -->
+ <value>weave</value>
+ <!-- Divot -->
+ <value>divot</value>
+ <!-- Shingle -->
+ <value>shingle</value>
+ <!-- Wave -->
+ <value>wave</value>
+ <!-- Trellis -->
+ <value>trellis</value>
+ <!-- Zig Zag -->
+ <value>zigZag</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PatternFillProperties">
+ <group>
+ <optional>
+ <element name="fgClr">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bgClr">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="prst">
+ <ref name="ST_PresetPatternVal"/>
+ <xs:documentation>Preset Pattern</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_GroupFillProperties">
+ <empty/>
+ </define>
+ <define name="EG_FillProperties">
+ <choice>
+ <element name="noFill">
+ <ref name="CT_NoFillProperties"/>
+ </element>
+ <element name="solidFill">
+ <ref name="CT_SolidColorFillProperties"/>
+ </element>
+ <element name="gradFill">
+ <ref name="CT_GradientFillProperties"/>
+ </element>
+ <element name="blipFill">
+ <ref name="CT_BlipFillProperties"/>
+ </element>
+ <element name="pattFill">
+ <ref name="CT_PatternFillProperties"/>
+ </element>
+ <element name="grpFill">
+ <ref name="CT_GroupFillProperties"/>
+ </element>
+ </choice>
+ </define>
+ <define name="CT_FillProperties">
+ <ref name="EG_FillProperties"/>
+ </define>
+ <define name="CT_FillEffect">
+ <ref name="EG_FillProperties"/>
+ </define>
+ <define name="ST_BlendMode">
+ <list>
+ <xs:documentation>Blend Mode</xs:documentation>
+ <choice>
+ <!-- Overlay -->
+ <value>over</value>
+ <!-- Multiply -->
+ <value>mult</value>
+ <!-- Screen -->
+ <value>screen</value>
+ <!-- Darken -->
+ <value>darken</value>
+ <!-- Lighten -->
+ <value>lighten</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FillOverlayEffect">
+ <ref name="EG_FillProperties"/>
+ <attribute name="blend">
+ <ref name="ST_BlendMode"/>
+ <xs:documentation>Blend</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_EffectReference">
+ <attribute name="ref">
+ <data type="token">
+ <xs:documentation>Reference</xs:documentation>
+ </data>
+ <xs:documentation>Reference</xs:documentation>
+ </attribute>
+ </define>
+ <define name="EG_Effect">
+ <choice>
+ <element name="cont">
+ <ref name="CT_EffectContainer"/>
+ </element>
+ <element name="effect">
+ <ref name="CT_EffectReference"/>
+ </element>
+ <element name="alphaBiLevel">
+ <ref name="CT_AlphaBiLevelEffect"/>
+ </element>
+ <element name="alphaCeiling">
+ <ref name="CT_AlphaCeilingEffect"/>
+ </element>
+ <element name="alphaFloor">
+ <ref name="CT_AlphaFloorEffect"/>
+ </element>
+ <element name="alphaInv">
+ <ref name="CT_AlphaInverseEffect"/>
+ </element>
+ <element name="alphaMod">
+ <ref name="CT_AlphaModulateEffect"/>
+ </element>
+ <element name="alphaModFix">
+ <ref name="CT_AlphaModulateFixedEffect"/>
+ </element>
+ <element name="alphaOutset">
+ <ref name="CT_AlphaOutsetEffect"/>
+ </element>
+ <element name="alphaRepl">
+ <ref name="CT_AlphaReplaceEffect"/>
+ </element>
+ <element name="biLevel">
+ <ref name="CT_BiLevelEffect"/>
+ </element>
+ <element name="blend">
+ <ref name="CT_BlendEffect"/>
+ </element>
+ <element name="blur">
+ <ref name="CT_BlurEffect"/>
+ </element>
+ <element name="clrChange">
+ <ref name="CT_ColorChangeEffect"/>
+ </element>
+ <element name="clrRepl">
+ <ref name="CT_ColorReplaceEffect"/>
+ </element>
+ <element name="duotone">
+ <ref name="CT_DuotoneEffect"/>
+ </element>
+ <element name="fill">
+ <ref name="CT_FillEffect"/>
+ </element>
+ <element name="fillOverlay">
+ <ref name="CT_FillOverlayEffect"/>
+ </element>
+ <element name="glow">
+ <ref name="CT_GlowEffect"/>
+ </element>
+ <element name="grayscl">
+ <ref name="CT_GrayscaleEffect"/>
+ </element>
+ <element name="hsl">
+ <ref name="CT_HSLEffect"/>
+ </element>
+ <element name="innerShdw">
+ <ref name="CT_InnerShadowEffect"/>
+ </element>
+ <element name="lum">
+ <ref name="CT_LuminanceEffect"/>
+ </element>
+ <element name="outerShdw">
+ <ref name="CT_OuterShadowEffect"/>
+ </element>
+ <element name="prstShdw">
+ <ref name="CT_PresetShadowEffect"/>
+ </element>
+ <element name="reflection">
+ <ref name="CT_ReflectionEffect"/>
+ </element>
+ <element name="relOff">
+ <ref name="CT_RelativeOffsetEffect"/>
+ </element>
+ <element name="softEdge">
+ <ref name="CT_SoftEdgesEffect"/>
+ </element>
+ <element name="tint">
+ <ref name="CT_TintEffect"/>
+ </element>
+ <element name="xfrm">
+ <ref name="CT_TransformEffect"/>
+ </element>
+ </choice>
+ </define>
+ <define name="ST_EffectContainerType">
+ <list>
+ <xs:documentation>Effect Container Type</xs:documentation>
+ <choice>
+ <!-- Sibling -->
+ <value>sib</value>
+ <!-- Tree -->
+ <value>tree</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_EffectContainer">
+ <zeroOrMore>
+ <ref name="EG_Effect"/>
+ </zeroOrMore>
+ <optional>
+ <attribute name="type">
+ <ref name="ST_EffectContainerType"/>
+ <xs:documentation>Effect Container Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="name">
+ <data type="token">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_AlphaModulateEffect">
+ <element name="cont">
+ <ref name="CT_EffectContainer"/>
+ </element>
+ </define>
+ <define name="CT_BlendEffect">
+ <element name="cont">
+ <ref name="CT_EffectContainer"/>
+ </element>
+ <attribute name="blend">
+ <ref name="ST_BlendMode"/>
+ <xs:documentation>Blend Mode</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_EffectList">
+ <optional>
+ <element name="blur">
+ <ref name="CT_BlurEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="fillOverlay">
+ <ref name="CT_FillOverlayEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="glow">
+ <ref name="CT_GlowEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="innerShdw">
+ <ref name="CT_InnerShadowEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="outerShdw">
+ <ref name="CT_OuterShadowEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="prstShdw">
+ <ref name="CT_PresetShadowEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="reflection">
+ <ref name="CT_ReflectionEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="softEdge">
+ <ref name="CT_SoftEdgesEffect"/>
+ </element>
+ </optional>
+ </define>
+ <define name="EG_EffectProperties">
+ <choice>
+ <element name="effectLst">
+ <ref name="CT_EffectList"/>
+ </element>
+ <element name="effectDag">
+ <ref name="CT_EffectContainer"/>
+ </element>
+ </choice>
+ </define>
+ <define name="CT_EffectProperties">
+ <ref name="EG_EffectProperties"/>
+ </define>
+ <define name="blip">
+ <element name="blip">
+ <ref name="CT_Blip"/>
+ </element>
+ </define>
+ </grammar>
+ <resource name="ST_PresetShadowVal" resource="List" generated="yes">
+ <value name="shdw1" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw1">shdw1</value>
+ <value name="shdw2" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw2">shdw2</value>
+ <value name="shdw3" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw3">shdw3</value>
+ <value name="shdw4" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw4">shdw4</value>
+ <value name="shdw5" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw5">shdw5</value>
+ <value name="shdw6" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw6">shdw6</value>
+ <value name="shdw7" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw7">shdw7</value>
+ <value name="shdw8" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw8">shdw8</value>
+ <value name="shdw9" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw9">shdw9</value>
+ <value name="shdw10" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw10">shdw10</value>
+ <value name="shdw11" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw11">shdw11</value>
+ <value name="shdw12" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw12">shdw12</value>
+ <value name="shdw13" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw13">shdw13</value>
+ <value name="shdw14" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw14">shdw14</value>
+ <value name="shdw15" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw15">shdw15</value>
+ <value name="shdw16" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw16">shdw16</value>
+ <value name="shdw17" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw17">shdw17</value>
+ <value name="shdw18" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw18">shdw18</value>
+ <value name="shdw19" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw19">shdw19</value>
+ <value name="shdw20" tokenid="ooxml:Value_drawingml_ST_PresetShadowVal_shdw20">shdw20</value>
+ </resource>
+ <resource name="CT_SolidColorFillProperties" resource="Properties" tag="shape"/>
+ <resource name="ST_PathShadeType" resource="List" generated="yes">
+ <value name="shape" tokenid="ooxml:Value_drawingml_ST_PathShadeType_shape">shape</value>
+ <value name="circle" tokenid="ooxml:Value_drawingml_ST_PathShadeType_circle">circle</value>
+ <value name="rect" tokenid="ooxml:Value_drawingml_ST_PathShadeType_rect">rect</value>
+ </resource>
+ <resource name="ST_TileFlipMode" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_drawingml_ST_TileFlipMode_none">none</value>
+ <value name="x" tokenid="ooxml:Value_drawingml_ST_TileFlipMode_x">x</value>
+ <value name="y" tokenid="ooxml:Value_drawingml_ST_TileFlipMode_y">y</value>
+ <value name="xy" tokenid="ooxml:Value_drawingml_ST_TileFlipMode_xy">xy</value>
+ </resource>
+ <resource name="CT_GradientStop" resource="Properties" tag="shape">
+ <attribute name="pos" tokenid="ooxml:CT_GradientStop_pos"/>
+ </resource>
+ <resource name="CT_TileInfoProperties" resource="Properties">
+ <attribute name="tx" tokenid="ooxml:CT_TileInfoProperties_tx"/>
+ <attribute name="ty" tokenid="ooxml:CT_TileInfoProperties_ty"/>
+ <attribute name="sx" tokenid="ooxml:CT_TileInfoProperties_sx"/>
+ <attribute name="sy" tokenid="ooxml:CT_TileInfoProperties_sy"/>
+ <attribute name="flip" tokenid="ooxml:CT_TileInfoProperties_flip"/>
+ <attribute name="algn" tokenid="ooxml:CT_TileInfoProperties_algn"/>
+ </resource>
+ <resource name="CT_StretchInfoProperties" resource="Properties" tag="shape">
+ <element name="fillRect" tokenid="ooxml:CT_StretchInfoProperties_fillRect"/>
+ </resource>
+ <resource name="EG_FillModeProperties" resource="Properties" tag="shape">
+ <element name="tile" tokenid="ooxml:EG_FillModeProperties_tile"/>
+ <element name="stretch" tokenid="ooxml:EG_FillModeProperties_stretch"/>
+ </resource>
+ <resource name="ST_BlipCompression" resource="List" generated="yes">
+ <value name="email" tokenid="ooxml:Value_drawingml_ST_BlipCompression_email">email</value>
+ <value name="screen" tokenid="ooxml:Value_drawingml_ST_BlipCompression_screen">screen</value>
+ <value name="print" tokenid="ooxml:Value_drawingml_ST_BlipCompression_print">print</value>
+ <value name="hqprint" tokenid="ooxml:Value_drawingml_ST_BlipCompression_hqprint">hqprint</value>
+ <value name="none" tokenid="ooxml:Value_drawingml_ST_BlipCompression_none">none</value>
+ </resource>
+ <resource name="CT_Blip" resource="Properties" tag="shape">
+ <element name="alphaBiLevel" tokenid="ooxml:CT_Blip_alphaBiLevel"/>
+ <element name="alphaCeiling" tokenid="ooxml:CT_Blip_alphaCeiling"/>
+ <element name="alphaFloor" tokenid="ooxml:CT_Blip_alphaFloor"/>
+ <element name="alphaInv" tokenid="ooxml:CT_Blip_alphaInv"/>
+ <element name="alphaMod" tokenid="ooxml:CT_Blip_alphaMod"/>
+ <element name="alphaModFix" tokenid="ooxml:CT_Blip_alphaModFix"/>
+ <element name="alphaRepl" tokenid="ooxml:CT_Blip_alphaRepl"/>
+ <element name="biLevel" tokenid="ooxml:CT_Blip_biLevel"/>
+ <element name="blur" tokenid="ooxml:CT_Blip_blur"/>
+ <element name="clrChange" tokenid="ooxml:CT_Blip_clrChange"/>
+ <element name="clrRepl" tokenid="ooxml:CT_Blip_clrRepl"/>
+ <element name="duotone" tokenid="ooxml:CT_Blip_duotone"/>
+ <element name="fillOverlay" tokenid="ooxml:CT_Blip_fillOverlay"/>
+ <element name="grayscl" tokenid="ooxml:CT_Blip_grayscl"/>
+ <element name="hsl" tokenid="ooxml:CT_Blip_hsl"/>
+ <element name="lum" tokenid="ooxml:CT_Blip_lum"/>
+ <element name="tint" tokenid="ooxml:CT_Blip_tint"/>
+ <element name="extLst" tokenid="ooxml:CT_Blip_extLst"/>
+ <attribute name="cstate" tokenid="ooxml:CT_Blip_cstate"/>
+ </resource>
+ <resource name="CT_BlipFillProperties" resource="Properties" tag="shape">
+ <element name="blip" tokenid="ooxml:CT_BlipFillProperties_blip"/>
+ <element name="srcRect" tokenid="ooxml:CT_BlipFillProperties_srcRect"/>
+ <attribute name="dpi" tokenid="ooxml:CT_BlipFillProperties_dpi"/>
+ <attribute name="rotWithShape" tokenid="ooxml:CT_BlipFillProperties_rotWithShape"/>
+ </resource>
+ <resource name="ST_PresetPatternVal" resource="List" generated="yes">
+ <value name="pct5" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct5">pct5</value>
+ <value name="pct10" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct10">pct10</value>
+ <value name="pct20" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct20">pct20</value>
+ <value name="pct25" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct25">pct25</value>
+ <value name="pct30" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct30">pct30</value>
+ <value name="pct40" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct40">pct40</value>
+ <value name="pct50" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct50">pct50</value>
+ <value name="pct60" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct60">pct60</value>
+ <value name="pct70" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct70">pct70</value>
+ <value name="pct75" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct75">pct75</value>
+ <value name="pct80" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct80">pct80</value>
+ <value name="pct90" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_pct90">pct90</value>
+ <value name="horz" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_horz">horz</value>
+ <value name="vert" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_vert">vert</value>
+ <value name="ltHorz" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltHorz">ltHorz</value>
+ <value name="ltVert" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltVert">ltVert</value>
+ <value name="dkHorz" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkHorz">dkHorz</value>
+ <value name="dkVert" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkVert">dkVert</value>
+ <value name="narHorz" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_narHorz">narHorz</value>
+ <value name="narVert" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_narVert">narVert</value>
+ <value name="dashHorz" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashHorz">dashHorz</value>
+ <value name="dashVert" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashVert">dashVert</value>
+ <value name="cross" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_cross">cross</value>
+ <value name="dnDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dnDiag">dnDiag</value>
+ <value name="upDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_upDiag">upDiag</value>
+ <value name="ltDnDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltDnDiag">ltDnDiag</value>
+ <value name="ltUpDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_ltUpDiag">ltUpDiag</value>
+ <value name="dkDnDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkDnDiag">dkDnDiag</value>
+ <value name="dkUpDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dkUpDiag">dkUpDiag</value>
+ <value name="wdDnDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_wdDnDiag">wdDnDiag</value>
+ <value name="wdUpDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_wdUpDiag">wdUpDiag</value>
+ <value name="dashDnDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashDnDiag">dashDnDiag</value>
+ <value name="dashUpDiag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dashUpDiag">dashUpDiag</value>
+ <value name="diagCross" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_diagCross">diagCross</value>
+ <value name="smCheck" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_smCheck">smCheck</value>
+ <value name="lgCheck" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_lgCheck">lgCheck</value>
+ <value name="smGrid" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_smGrid">smGrid</value>
+ <value name="lgGrid" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_lgGrid">lgGrid</value>
+ <value name="dotGrid" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dotGrid">dotGrid</value>
+ <value name="smConfetti" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_smConfetti">smConfetti</value>
+ <value name="lgConfetti" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_lgConfetti">lgConfetti</value>
+ <value name="horzBrick" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_horzBrick">horzBrick</value>
+ <value name="diagBrick" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_diagBrick">diagBrick</value>
+ <value name="solidDmnd" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_solidDmnd">solidDmnd</value>
+ <value name="openDmnd" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_openDmnd">openDmnd</value>
+ <value name="dotDmnd" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_dotDmnd">dotDmnd</value>
+ <value name="plaid" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_plaid">plaid</value>
+ <value name="sphere" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_sphere">sphere</value>
+ <value name="weave" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_weave">weave</value>
+ <value name="divot" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_divot">divot</value>
+ <value name="shingle" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_shingle">shingle</value>
+ <value name="wave" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_wave">wave</value>
+ <value name="trellis" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_trellis">trellis</value>
+ <value name="zigZag" tokenid="ooxml:Value_drawingml_ST_PresetPatternVal_zigZag">zigZag</value>
+ </resource>
+ <resource name="ST_BlendMode" resource="List" generated="yes">
+ <value name="over" tokenid="ooxml:Value_drawingml_ST_BlendMode_over">over</value>
+ <value name="mult" tokenid="ooxml:Value_drawingml_ST_BlendMode_mult">mult</value>
+ <value name="screen" tokenid="ooxml:Value_drawingml_ST_BlendMode_screen">screen</value>
+ <value name="darken" tokenid="ooxml:Value_drawingml_ST_BlendMode_darken">darken</value>
+ <value name="lighten" tokenid="ooxml:Value_drawingml_ST_BlendMode_lighten">lighten</value>
+ </resource>
+ <resource name="EG_Effect" resource="Properties" tag="shape">
+ <element name="cont" tokenid="ooxml:EG_Effect_cont"/>
+ <element name="effect" tokenid="ooxml:EG_Effect_effect"/>
+ <element name="alphaBiLevel" tokenid="ooxml:EG_Effect_alphaBiLevel"/>
+ <element name="alphaCeiling" tokenid="ooxml:EG_Effect_alphaCeiling"/>
+ <element name="alphaFloor" tokenid="ooxml:EG_Effect_alphaFloor"/>
+ <element name="alphaInv" tokenid="ooxml:EG_Effect_alphaInv"/>
+ <element name="alphaMod" tokenid="ooxml:EG_Effect_alphaMod"/>
+ <element name="alphaModFix" tokenid="ooxml:EG_Effect_alphaModFix"/>
+ <element name="alphaOutset" tokenid="ooxml:EG_Effect_alphaOutset"/>
+ <element name="alphaRepl" tokenid="ooxml:EG_Effect_alphaRepl"/>
+ <element name="biLevel" tokenid="ooxml:EG_Effect_biLevel"/>
+ <element name="blend" tokenid="ooxml:EG_Effect_blend"/>
+ <element name="blur" tokenid="ooxml:EG_Effect_blur"/>
+ <element name="clrChange" tokenid="ooxml:EG_Effect_clrChange"/>
+ <element name="clrRepl" tokenid="ooxml:EG_Effect_clrRepl"/>
+ <element name="duotone" tokenid="ooxml:EG_Effect_duotone"/>
+ <element name="fill" tokenid="ooxml:EG_Effect_fill"/>
+ <element name="fillOverlay" tokenid="ooxml:EG_Effect_fillOverlay"/>
+ <element name="glow" tokenid="ooxml:EG_Effect_glow"/>
+ <element name="grayscl" tokenid="ooxml:EG_Effect_grayscl"/>
+ <element name="hsl" tokenid="ooxml:EG_Effect_hsl"/>
+ <element name="innerShdw" tokenid="ooxml:EG_Effect_innerShdw"/>
+ <element name="lum" tokenid="ooxml:EG_Effect_lum"/>
+ <element name="outerShdw" tokenid="ooxml:EG_Effect_outerShdw"/>
+ <element name="prstShdw" tokenid="ooxml:EG_Effect_prstShdw"/>
+ <element name="reflection" tokenid="ooxml:EG_Effect_reflection"/>
+ <element name="relOff" tokenid="ooxml:EG_Effect_relOff"/>
+ <element name="softEdge" tokenid="ooxml:EG_Effect_softEdge"/>
+ <element name="tint" tokenid="ooxml:EG_Effect_tint"/>
+ <element name="xfrm" tokenid="ooxml:EG_Effect_xfrm"/>
+ </resource>
+ <resource name="ST_EffectContainerType" resource="List" generated="yes">
+ <value name="sib" tokenid="ooxml:Value_drawingml_ST_EffectContainerType_sib">sib</value>
+ <value name="tree" tokenid="ooxml:Value_drawingml_ST_EffectContainerType_tree">tree</value>
+ </resource>
+ <resource name="CT_EffectContainer" resource="Properties" tag="shape">
+ <attribute name="type" tokenid="ooxml:CT_EffectContainer_type"/>
+ <attribute name="name" tokenid="ooxml:CT_EffectContainer_name"/>
+ </resource>
+ </namespace>
+ <namespace name="dml-shapeLineProperties" file="dml-shapeLineProperties.rng" todo="ignore">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-shapeEffects.rng"/>
+ <define name="ST_LineEndType">
+ <list>
+ <xs:documentation>Line End Type</xs:documentation>
+ <choice>
+ <!-- None -->
+ <value>none</value>
+ <!-- Triangle Arrow Head -->
+ <value>triangle</value>
+ <!-- Stealth Arrow -->
+ <value>stealth</value>
+ <!-- Diamond -->
+ <value>diamond</value>
+ <!-- Oval -->
+ <value>oval</value>
+ <!-- Arrow Head -->
+ <value>arrow</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_LineEndWidth">
+ <list>
+ <xs:documentation>Line End Width</xs:documentation>
+ <choice>
+ <!-- Small -->
+ <value>sm</value>
+ <!-- Medium -->
+ <value>med</value>
+ <!-- Large -->
+ <value>lg</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_LineEndLength">
+ <list>
+ <xs:documentation>Line End Length</xs:documentation>
+ <choice>
+ <!-- Small -->
+ <value>sm</value>
+ <!-- Medium -->
+ <value>med</value>
+ <!-- Large -->
+ <value>lg</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_LineEndProperties">
+ <optional>
+ <attribute name="type">
+ <ref name="ST_LineEndType"/>
+ <xs:documentation>Line Head/End Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="w">
+ <ref name="ST_LineEndWidth"/>
+ <xs:documentation>Width of Head/End</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="len">
+ <ref name="ST_LineEndLength"/>
+ <xs:documentation>Length of Head/End</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="EG_LineFillProperties">
+ <choice>
+ <element name="noFill">
+ <ref name="CT_NoFillProperties"/>
+ </element>
+ <element name="solidFill">
+ <ref name="CT_SolidColorFillProperties"/>
+ </element>
+ <element name="gradFill">
+ <ref name="CT_GradientFillProperties"/>
+ </element>
+ <element name="pattFill">
+ <ref name="CT_PatternFillProperties"/>
+ </element>
+ </choice>
+ </define>
+ <define name="CT_LineJoinBevel">
+ <empty/>
+ </define>
+ <define name="CT_LineJoinRound">
+ <empty/>
+ </define>
+ <define name="CT_LineJoinMiterProperties">
+ <optional>
+ <attribute name="lim">
+ <ref name="ST_PositivePercentage"/>
+ <xs:documentation>Miter Join Limit</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="EG_LineJoinProperties">
+ <choice>
+ <element name="round">
+ <ref name="CT_LineJoinRound"/>
+ </element>
+ <element name="bevel">
+ <ref name="CT_LineJoinBevel"/>
+ </element>
+ <element name="miter">
+ <ref name="CT_LineJoinMiterProperties"/>
+ </element>
+ </choice>
+ </define>
+ <define name="ST_PresetLineDashVal">
+ <list>
+ <xs:documentation>Preset Line Dash Value</xs:documentation>
+ <choice>
+ <!-- Solid -->
+ <value>solid</value>
+ <!-- Dot -->
+ <value>dot</value>
+ <!-- Dash -->
+ <value>dash</value>
+ <!-- Large Dash -->
+ <value>lgDash</value>
+ <!-- Dash Dot -->
+ <value>dashDot</value>
+ <!-- Large Dash Dot -->
+ <value>lgDashDot</value>
+ <!-- Large Dash Dot Dot -->
+ <value>lgDashDotDot</value>
+ <!-- System Dash -->
+ <value>sysDash</value>
+ <!-- System Dot -->
+ <value>sysDot</value>
+ <!-- System Dash Dot -->
+ <value>sysDashDot</value>
+ <!-- System Dash Dot Dot -->
+ <value>sysDashDotDot</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PresetLineDashProperties">
+ <optional>
+ <attribute name="val">
+ <ref name="ST_PresetLineDashVal"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_DashStop">
+ <attribute name="d">
+ <ref name="ST_PositivePercentage"/>
+ <xs:documentation>Dash Length</xs:documentation>
+ </attribute>
+ <attribute name="sp">
+ <ref name="ST_PositivePercentage"/>
+ <xs:documentation>Space Length</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_DashStopList">
+ <zeroOrMore>
+ <element name="ds">
+ <ref name="CT_DashStop"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="EG_LineDashProperties">
+ <choice>
+ <element name="prstDash">
+ <ref name="CT_PresetLineDashProperties"/>
+ </element>
+ <element name="custDash">
+ <ref name="CT_DashStopList"/>
+ </element>
+ </choice>
+ </define>
+ <define name="ST_LineCap">
+ <list>
+ <xs:documentation>End Line Cap</xs:documentation>
+ <choice>
+ <!-- Round Line Cap -->
+ <value>rnd</value>
+ <!-- Square Line Cap -->
+ <value>sq</value>
+ <!-- Flat Line Cap -->
+ <value>flat</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_LineWidth">
+ <empty/>
+ </define>
+ <define name="ST_PenAlignment">
+ <list>
+ <xs:documentation>Alignment Type</xs:documentation>
+ <choice>
+ <!-- Center Alignment -->
+ <value>ctr</value>
+ <!-- Inset Alignment -->
+ <value>in</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_CompoundLine">
+ <list>
+ <xs:documentation>Compound Line Type</xs:documentation>
+ <choice>
+ <!-- Single Line -->
+ <value>sng</value>
+ <!-- Double Lines -->
+ <value>dbl</value>
+ <!-- Thick Thin Double Lines -->
+ <value>thickThin</value>
+ <!-- Thin Thick Double Lines -->
+ <value>thinThick</value>
+ <!-- Thin Thick Thin Triple Lines -->
+ <value>tri</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_LineProperties">
+ <group>
+ <optional>
+ <ref name="EG_LineFillProperties"/>
+ </optional>
+ <optional>
+ <ref name="EG_LineDashProperties"/>
+ </optional>
+ <optional>
+ <ref name="EG_LineJoinProperties"/>
+ </optional>
+ <optional>
+ <element name="headEnd">
+ <ref name="CT_LineEndProperties"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tailEnd">
+ <ref name="CT_LineEndProperties"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="w">
+ <ref name="ST_LineWidth"/>
+ <xs:documentation>Line Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cap">
+ <ref name="ST_LineCap"/>
+ <xs:documentation>Line Ending Cap Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cmpd">
+ <ref name="ST_CompoundLine"/>
+ <xs:documentation>Compound Line Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="algn">
+ <ref name="ST_PenAlignment"/>
+ <xs:documentation>Stroke Alignment</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ </grammar>
+ <resource name="ST_LineEndType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_drawingml_ST_LineEndType_none">none</value>
+ <value name="triangle" tokenid="ooxml:Value_drawingml_ST_LineEndType_triangle">triangle</value>
+ <value name="stealth" tokenid="ooxml:Value_drawingml_ST_LineEndType_stealth">stealth</value>
+ <value name="diamond" tokenid="ooxml:Value_drawingml_ST_LineEndType_diamond">diamond</value>
+ <value name="oval" tokenid="ooxml:Value_drawingml_ST_LineEndType_oval">oval</value>
+ <value name="arrow" tokenid="ooxml:Value_drawingml_ST_LineEndType_arrow">arrow</value>
+ </resource>
+ <resource name="ST_LineEndWidth" resource="List" generated="yes">
+ <value name="sm" tokenid="ooxml:Value_drawingml_ST_LineEndWidth_sm">sm</value>
+ <value name="med" tokenid="ooxml:Value_drawingml_ST_LineEndWidth_med">med</value>
+ <value name="lg" tokenid="ooxml:Value_drawingml_ST_LineEndWidth_lg">lg</value>
+ </resource>
+ <resource name="ST_LineEndLength" resource="List" generated="yes">
+ <value name="sm" tokenid="ooxml:Value_drawingml_ST_LineEndLength_sm">sm</value>
+ <value name="med" tokenid="ooxml:Value_drawingml_ST_LineEndLength_med">med</value>
+ <value name="lg" tokenid="ooxml:Value_drawingml_ST_LineEndLength_lg">lg</value>
+ </resource>
+ <resource name="CT_LineEndProperties" resource="Properties" tag="shape">
+ <attribute name="type" tokenid="ooxml:CT_LineEndProperties_type"/>
+ <attribute name="w" tokenid="ooxml:CT_LineEndProperties_w"/>
+ <attribute name="len" tokenid="ooxml:CT_LineEndProperties_len"/>
+ </resource>
+ <resource name="EG_LineFillProperties" resource="Properties" tag="shape">
+ <element name="noFill" tokenid="ooxml:EG_LineFillProperties_noFill"/>
+ <element name="solidFill" tokenid="ooxml:EG_LineFillProperties_solidFill"/>
+ <element name="gradFill" tokenid="ooxml:EG_LineFillProperties_gradFill"/>
+ <element name="pattFill" tokenid="ooxml:EG_LineFillProperties_pattFill"/>
+ </resource>
+ <resource name="ST_PresetLineDashVal" resource="List" generated="yes">
+ <value name="solid" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_solid">solid</value>
+ <value name="dot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_dot">dot</value>
+ <value name="dash" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_dash">dash</value>
+ <value name="lgDash" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_lgDash">lgDash</value>
+ <value name="dashDot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_dashDot">dashDot</value>
+ <value name="lgDashDot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_lgDashDot">lgDashDot</value>
+ <value name="lgDashDotDot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_lgDashDotDot">lgDashDotDot</value>
+ <value name="sysDash" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDash">sysDash</value>
+ <value name="sysDot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDot">sysDot</value>
+ <value name="sysDashDot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDashDot">sysDashDot</value>
+ <value name="sysDashDotDot" tokenid="ooxml:Value_drawingml_ST_PresetLineDashVal_sysDashDotDot">sysDashDotDot</value>
+ </resource>
+ <resource name="ST_LineCap" resource="List" generated="yes">
+ <value name="rnd" tokenid="ooxml:Value_drawingml_ST_LineCap_rnd">rnd</value>
+ <value name="sq" tokenid="ooxml:Value_drawingml_ST_LineCap_sq">sq</value>
+ <value name="flat" tokenid="ooxml:Value_drawingml_ST_LineCap_flat">flat</value>
+ </resource>
+ <resource name="ST_PenAlignment" resource="List" generated="yes">
+ <value name="ctr" tokenid="ooxml:Value_drawingml_ST_PenAlignment_ctr">ctr</value>
+ <value name="in" tokenid="ooxml:Value_drawingml_ST_PenAlignment_in">in</value>
+ </resource>
+ <resource name="ST_CompoundLine" resource="List" generated="yes">
+ <value name="sng" tokenid="ooxml:Value_drawingml_ST_CompoundLine_sng">sng</value>
+ <value name="dbl" tokenid="ooxml:Value_drawingml_ST_CompoundLine_dbl">dbl</value>
+ <value name="thickThin" tokenid="ooxml:Value_drawingml_ST_CompoundLine_thickThin">thickThin</value>
+ <value name="thinThick" tokenid="ooxml:Value_drawingml_ST_CompoundLine_thinThick">thinThick</value>
+ <value name="tri" tokenid="ooxml:Value_drawingml_ST_CompoundLine_tri">tri</value>
+ </resource>
+ <resource name="CT_LineProperties" resource="Properties" tag="shape">
+ <element name="headEnd" tokenid="ooxml:CT_LineProperties_headEnd"/>
+ <element name="tailEnd" tokenid="ooxml:CT_LineProperties_tailEnd"/>
+ <element name="extLst" tokenid="ooxml:CT_LineProperties_extLst"/>
+ <attribute name="w" tokenid="ooxml:CT_LineProperties_w"/>
+ <attribute name="cap" tokenid="ooxml:CT_LineProperties_cap"/>
+ <attribute name="cmpd" tokenid="ooxml:CT_LineProperties_cmpd"/>
+ <attribute name="algn" tokenid="ooxml:CT_LineProperties_algn"/>
+ </resource>
+ </namespace>
+ <namespace name="dml-shapeProperties" file="dml-shapeProperties.rng" todo="ignore">
+ <grammar xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-shape3DStyles.rng"/>
+ <include href="dml-shape3DScene.rng"/>
+ <include href="dml-shapeGeometry.rng"/>
+ <include href="dml-shapeEffects.rng"/>
+ <include href="dml-shapeLineProperties.rng"/>
+ <define name="CT_ShapeProperties">
+ <group>
+ <optional>
+ <element name="xfrm">
+ <ref name="CT_Transform2D"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_Geometry"/>
+ </optional>
+ <optional>
+ <ref name="EG_FillProperties"/>
+ </optional>
+ <optional>
+ <element name="ln">
+ <ref name="CT_LineProperties"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_EffectProperties"/>
+ </optional>
+ <optional>
+ <element name="scene3d">
+ <ref name="CT_Scene3D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sp3d">
+ <ref name="CT_Shape3D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="bwMode">
+ <ref name="ST_BlackWhiteMode"/>
+ <xs:documentation>Black and White Mode</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_GroupShapeProperties">
+ <group>
+ <optional>
+ <element name="xfrm">
+ <ref name="CT_GroupTransform2D"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_FillProperties"/>
+ </optional>
+ <optional>
+ <ref name="EG_EffectProperties"/>
+ </optional>
+ <optional>
+ <element name="scene3d">
+ <ref name="CT_Scene3D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="bwMode">
+ <ref name="ST_BlackWhiteMode"/>
+ <xs:documentation>Black and White Mode</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ </grammar>
+ <resource name="CT_ShapeProperties" resource="Properties" tag="shape">
+ <element name="xfrm" tokenid="ooxml:CT_ShapeProperties_xfrm"/>
+ <element name="ln" tokenid="ooxml:CT_ShapeProperties_ln"/>
+ <element name="scene3d" tokenid="ooxml:CT_ShapeProperties_scene3d"/>
+ <element name="sp3d" tokenid="ooxml:CT_ShapeProperties_sp3d"/>
+ <element name="extLst" tokenid="ooxml:CT_ShapeProperties_extLst"/>
+ <attribute name="bwMode" tokenid="ooxml:CT_ShapeProperties_bwMode"/>
+ </resource>
+ </namespace>
+ <namespace name="dml-baseTypes" file="dml-baseTypes">
+ <grammar xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- ISO RELAX NG Schema -->
+ <include href="shared-relationshipReference.rng"/>
+ <define name="CT_OfficeArtExtension">
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <attribute name="uri">
+ <data type="token">
+ <xs:documentation>Uniform Resource Identifier</xs:documentation>
+ </data>
+ <xs:documentation>Uniform Resource Identifier</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Coordinate">
+ <data type="long">
+ <xs:documentation>Coordinate</xs:documentation>
+ <param name="minInclusive">-27273042329600</param>
+ <param name="maxInclusive">27273042316900</param>
+ </data>
+ </define>
+ <define name="ST_Coordinate32">
+ <data type="int">
+ <xs:documentation>Coordinate Point</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_PositiveCoordinate">
+ <data type="long">
+ <xs:documentation>Positive Coordinate</xs:documentation>
+ <param name="minInclusive">0</param>
+ <param name="maxInclusive">27273042316900</param>
+ </data>
+ </define>
+ <define name="ST_PositiveCoordinate32">
+ <empty/>
+ </define>
+ <define name="ST_Angle">
+ <data type="int">
+ <xs:documentation>Angle</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_Angle">
+ <attribute name="val">
+ <ref name="ST_Angle"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_FixedAngle">
+ <empty/>
+ </define>
+ <define name="ST_PositiveFixedAngle">
+ <empty/>
+ </define>
+ <define name="CT_PositiveFixedAngle">
+ <attribute name="val">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Percentage">
+ <data type="int">
+ <xs:documentation>Percentage</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_Percentage">
+ <attribute name="val">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_PositivePercentage">
+ <empty/>
+ </define>
+ <define name="CT_PositivePercentage">
+ <attribute name="val">
+ <ref name="ST_PositivePercentage"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_FixedPercentage">
+ <empty/>
+ </define>
+ <define name="CT_FixedPercentage">
+ <attribute name="val">
+ <ref name="ST_FixedPercentage"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_PositiveFixedPercentage">
+ <empty/>
+ </define>
+ <define name="CT_PositiveFixedPercentage">
+ <attribute name="val">
+ <ref name="ST_PositiveFixedPercentage"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Ratio">
+ <attribute name="n">
+ <data type="long">
+ <xs:documentation>Numerator</xs:documentation>
+ </data>
+ <xs:documentation>Numerator</xs:documentation>
+ </attribute>
+ <attribute name="d">
+ <data type="long">
+ <xs:documentation>Denominator</xs:documentation>
+ </data>
+ <xs:documentation>Denominator</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Point2D">
+ <attribute name="x">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>X-Axis Coordinate</xs:documentation>
+ </attribute>
+ <attribute name="y">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Y-Axis Coordinate</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_PositiveSize2D">
+ <attribute name="cx">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Extent Length</xs:documentation>
+ </attribute>
+ <attribute name="cy">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Extent Width</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_ComplementTransform">
+ <empty/>
+ </define>
+ <define name="CT_InverseTransform">
+ <empty/>
+ </define>
+ <define name="CT_GrayscaleTransform">
+ <empty/>
+ </define>
+ <define name="CT_GammaTransform">
+ <empty/>
+ </define>
+ <define name="CT_InverseGammaTransform">
+ <empty/>
+ </define>
+ <define name="EG_ColorTransform">
+ <choice>
+ <element name="tint">
+ <ref name="CT_PositiveFixedPercentage"/>
+ </element>
+ <element name="shade">
+ <ref name="CT_PositiveFixedPercentage"/>
+ </element>
+ <element name="comp">
+ <ref name="CT_ComplementTransform"/>
+ </element>
+ <element name="inv">
+ <ref name="CT_InverseTransform"/>
+ </element>
+ <element name="gray">
+ <ref name="CT_GrayscaleTransform"/>
+ </element>
+ <element name="alpha">
+ <ref name="CT_PositiveFixedPercentage"/>
+ </element>
+ <element name="alphaOff">
+ <ref name="CT_FixedPercentage"/>
+ </element>
+ <element name="alphaMod">
+ <ref name="CT_PositivePercentage"/>
+ </element>
+ <element name="hue">
+ <ref name="CT_PositiveFixedAngle"/>
+ </element>
+ <element name="hueOff">
+ <ref name="CT_Angle"/>
+ </element>
+ <element name="hueMod">
+ <ref name="CT_PositivePercentage"/>
+ </element>
+ <element name="sat">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="satOff">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="satMod">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="lum">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="lumOff">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="lumMod">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="red">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="redOff">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="redMod">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="green">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="greenOff">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="greenMod">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="blue">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="blueOff">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="blueMod">
+ <ref name="CT_Percentage"/>
+ </element>
+ <element name="gamma">
+ <ref name="CT_GammaTransform"/>
+ </element>
+ <element name="invGamma">
+ <ref name="CT_InverseGammaTransform"/>
+ </element>
+ </choice>
+ </define>
+ <define name="CT_ScRgbColor">
+ <zeroOrMore>
+ <ref name="EG_ColorTransform"/>
+ </zeroOrMore>
+ <attribute name="r">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Red</xs:documentation>
+ </attribute>
+ <attribute name="g">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Green</xs:documentation>
+ </attribute>
+ <attribute name="b">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Blue</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_HexBinary3">
+ <data type="hexBinary">
+ <xs:documentation>Hex Binary of Length 3</xs:documentation>
+ <param name="length">3</param>
+ </data>
+ </define>
+ <define name="CT_SRgbColor">
+ <zeroOrMore>
+ <ref name="EG_ColorTransform"/>
+ </zeroOrMore>
+ <attribute name="val">
+ <ref name="ST_HexBinary3"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_HslColor">
+ <zeroOrMore>
+ <ref name="EG_ColorTransform"/>
+ </zeroOrMore>
+ <attribute name="hue">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Hue</xs:documentation>
+ </attribute>
+ <attribute name="sat">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Saturation</xs:documentation>
+ </attribute>
+ <attribute name="lum">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Luminance</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_SystemColorVal">
+ <list>
+ <xs:documentation>System Color Value</xs:documentation>
+ <choice>
+ <!-- Scroll Bar System Color -->
+ <value>scrollBar</value>
+ <!-- Background System Color -->
+ <value>background</value>
+ <!-- Active Caption System Color -->
+ <value>activeCaption</value>
+ <!-- Inactive Caption System Color -->
+ <value>inactiveCaption</value>
+ <!-- Menu System Color -->
+ <value>menu</value>
+ <!-- Window System Color -->
+ <value>window</value>
+ <!-- Window Frame System Color -->
+ <value>windowFrame</value>
+ <!-- Menu Text System Color -->
+ <value>menuText</value>
+ <!-- Window Text System Color -->
+ <value>windowText</value>
+ <!-- Caption Text System Color -->
+ <value>captionText</value>
+ <!-- Active Border System Color -->
+ <value>activeBorder</value>
+ <!-- Inactive Border System Color -->
+ <value>inactiveBorder</value>
+ <!-- Application Workspace System Color -->
+ <value>appWorkspace</value>
+ <!-- Highlight System Color -->
+ <value>highlight</value>
+ <!-- Highlight Text System Color -->
+ <value>highlightText</value>
+ <!-- Button Face System Color -->
+ <value>btnFace</value>
+ <!-- Button Shadow System Color -->
+ <value>btnShadow</value>
+ <!-- Gray Text System Color -->
+ <value>grayText</value>
+ <!-- Button Text System Color -->
+ <value>btnText</value>
+ <!-- Inactive Caption Text System Color -->
+ <value>inactiveCaptionText</value>
+ <!-- Button Highlight System Color -->
+ <value>btnHighlight</value>
+ <!-- 3D Dark System Color -->
+ <value>3dDkShadow</value>
+ <!-- 3D Light System Color -->
+ <value>3dLight</value>
+ <!-- Info Text System Color -->
+ <value>infoText</value>
+ <!-- Info Back System Color -->
+ <value>infoBk</value>
+ <!-- Hot Light System Color -->
+ <value>hotLight</value>
+ <!-- Gradient Active Caption System Color -->
+ <value>gradientActiveCaption</value>
+ <!-- Gradient Inactive Caption System Color -->
+ <value>gradientInactiveCaption</value>
+ <!-- Menu Highlight System Color -->
+ <value>menuHighlight</value>
+ <!-- Menu Bar System Color -->
+ <value>menuBar</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_SystemColor">
+ <zeroOrMore>
+ <ref name="EG_ColorTransform"/>
+ </zeroOrMore>
+ <attribute name="val">
+ <ref name="ST_SystemColorVal"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="lastClr">
+ <ref name="ST_HexBinary3"/>
+ <xs:documentation>Last Color</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_SchemeColorVal">
+ <list>
+ <xs:documentation>Scheme Color</xs:documentation>
+ <choice>
+ <!-- Background Color 1 -->
+ <value>bg1</value>
+ <!-- Text Color 1 -->
+ <value>tx1</value>
+ <!-- Background Color 2 -->
+ <value>bg2</value>
+ <!-- Text Color 2 -->
+ <value>tx2</value>
+ <!-- Accent Color 1 -->
+ <value>accent1</value>
+ <!-- Accent Color 2 -->
+ <value>accent2</value>
+ <!-- Accent Color 3 -->
+ <value>accent3</value>
+ <!-- Accent Color 4 -->
+ <value>accent4</value>
+ <!-- Accent Color 5 -->
+ <value>accent5</value>
+ <!-- Accent Color 6 -->
+ <value>accent6</value>
+ <!-- Hyperlink Color -->
+ <value>hlink</value>
+ <!-- Followed Hyperlink Color -->
+ <value>folHlink</value>
+ <!-- Style Color -->
+ <value>phClr</value>
+ <!-- Dark Color 1 -->
+ <value>dk1</value>
+ <!-- Light Color 1 -->
+ <value>lt1</value>
+ <!-- Dark Color 2 -->
+ <value>dk2</value>
+ <!-- Light Color 2 -->
+ <value>lt2</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_SchemeColor">
+ <zeroOrMore>
+ <ref name="EG_ColorTransform"/>
+ </zeroOrMore>
+ <attribute name="val">
+ <ref name="ST_SchemeColorVal"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_PresetColorVal">
+ <list>
+ <xs:documentation>Preset Color Value</xs:documentation>
+ <choice>
+ <!-- Alice Blue Preset Color -->
+ <value>aliceBlue</value>
+ <!-- Antique White Preset Color -->
+ <value>antiqueWhite</value>
+ <!-- Aqua Preset Color -->
+ <value>aqua</value>
+ <!-- Aquamarine Preset Color -->
+ <value>aquamarine</value>
+ <!-- Azure Preset Color -->
+ <value>azure</value>
+ <!-- Beige Preset Color -->
+ <value>beige</value>
+ <!-- Bisque Preset Color -->
+ <value>bisque</value>
+ <!-- Black Preset Color -->
+ <value>black</value>
+ <!-- Blanched Almond Preset Color -->
+ <value>blanchedAlmond</value>
+ <!-- Blue Preset Color -->
+ <value>blue</value>
+ <!-- Blue Violet Preset Color -->
+ <value>blueViolet</value>
+ <!-- Brown Preset Color -->
+ <value>brown</value>
+ <!-- Burly Wood Preset Color -->
+ <value>burlyWood</value>
+ <!-- Cadet Blue Preset Color -->
+ <value>cadetBlue</value>
+ <!-- Chartreuse Preset Color -->
+ <value>chartreuse</value>
+ <!-- Chocolate Preset Color -->
+ <value>chocolate</value>
+ <!-- Coral Preset Color -->
+ <value>coral</value>
+ <!-- Cornflower Blue Preset Color -->
+ <value>cornflowerBlue</value>
+ <!-- Cornsilk Preset Color -->
+ <value>cornsilk</value>
+ <!-- Crimson Preset Color -->
+ <value>crimson</value>
+ <!-- Cyan Preset Color -->
+ <value>cyan</value>
+ <!-- Dark Blue Preset Color -->
+ <value>dkBlue</value>
+ <!-- Dark Cyan Preset Color -->
+ <value>dkCyan</value>
+ <!-- Dark Goldenrod Preset Color -->
+ <value>dkGoldenrod</value>
+ <!-- Dark Gray Preset Color -->
+ <value>dkGray</value>
+ <!-- Dark Green Preset Color -->
+ <value>dkGreen</value>
+ <!-- Dark Khaki Preset Color -->
+ <value>dkKhaki</value>
+ <!-- Dark Magenta Preset Color -->
+ <value>dkMagenta</value>
+ <!-- Dark Olive Green Preset Color -->
+ <value>dkOliveGreen</value>
+ <!-- Dark Orange Preset Color -->
+ <value>dkOrange</value>
+ <!-- Dark Orchid Preset Color -->
+ <value>dkOrchid</value>
+ <!-- Dark Red Preset Color -->
+ <value>dkRed</value>
+ <!-- Dark Salmon Preset Color -->
+ <value>dkSalmon</value>
+ <!-- Dark Sea Green Preset Color -->
+ <value>dkSeaGreen</value>
+ <!-- Dark Slate Blue Preset Color -->
+ <value>dkSlateBlue</value>
+ <!-- Dark Slate Gray Preset Color -->
+ <value>dkSlateGray</value>
+ <!-- Dark Turquoise Preset Color -->
+ <value>dkTurquoise</value>
+ <!-- Dark Violet Preset Color -->
+ <value>dkViolet</value>
+ <!-- Deep Pink Preset Color -->
+ <value>deepPink</value>
+ <!-- Deep Sky Blue Preset Color -->
+ <value>deepSkyBlue</value>
+ <!-- Dim Gray Preset Color -->
+ <value>dimGray</value>
+ <!-- Dodger Blue Preset Color -->
+ <value>dodgerBlue</value>
+ <!-- Firebrick Preset Color -->
+ <value>firebrick</value>
+ <!-- Floral White Preset Color -->
+ <value>floralWhite</value>
+ <!-- Forest Green Preset Color -->
+ <value>forestGreen</value>
+ <!-- Fuchsia Preset Color -->
+ <value>fuchsia</value>
+ <!-- Gainsboro Preset Color -->
+ <value>gainsboro</value>
+ <!-- Ghost White Preset Color -->
+ <value>ghostWhite</value>
+ <!-- Gold Preset Color -->
+ <value>gold</value>
+ <!-- Goldenrod Preset Color -->
+ <value>goldenrod</value>
+ <!-- Gray Preset Color -->
+ <value>gray</value>
+ <!-- Green Preset Color -->
+ <value>green</value>
+ <!-- Green Yellow Preset Color -->
+ <value>greenYellow</value>
+ <!-- Honeydew Preset Color -->
+ <value>honeydew</value>
+ <!-- Hot Pink Preset Color -->
+ <value>hotPink</value>
+ <!-- Indian Red Preset Color -->
+ <value>indianRed</value>
+ <!-- Indigo Preset Color -->
+ <value>indigo</value>
+ <!-- Ivory Preset Color -->
+ <value>ivory</value>
+ <!-- Khaki Preset Color -->
+ <value>khaki</value>
+ <!-- Lavender Preset Color -->
+ <value>lavender</value>
+ <!-- Lavender Blush Preset Color -->
+ <value>lavenderBlush</value>
+ <!-- Lawn Green Preset Color -->
+ <value>lawnGreen</value>
+ <!-- Lemon Chiffon Preset Color -->
+ <value>lemonChiffon</value>
+ <!-- Light Blue Preset Color -->
+ <value>ltBlue</value>
+ <!-- Light Coral Preset Color -->
+ <value>ltCoral</value>
+ <!-- Light Cyan Preset Color -->
+ <value>ltCyan</value>
+ <!-- Light Goldenrod Yellow Preset Color -->
+ <value>ltGoldenrodYellow</value>
+ <!-- Light Gray Preset Color -->
+ <value>ltGray</value>
+ <!-- Light Green Preset Color -->
+ <value>ltGreen</value>
+ <!-- Light Pink Preset Color -->
+ <value>ltPink</value>
+ <!-- Light Salmon Preset Color -->
+ <value>ltSalmon</value>
+ <!-- Light Sea Green Preset Color -->
+ <value>ltSeaGreen</value>
+ <!-- Light Sky Blue Preset Color -->
+ <value>ltSkyBlue</value>
+ <!-- Light Slate Gray Preset Color -->
+ <value>ltSlateGray</value>
+ <!-- Light Steel Blue Preset Color -->
+ <value>ltSteelBlue</value>
+ <!-- Light Yellow Preset Color -->
+ <value>ltYellow</value>
+ <!-- Lime Preset Color -->
+ <value>lime</value>
+ <!-- Lime Green Preset Color -->
+ <value>limeGreen</value>
+ <!-- Linen Preset Color -->
+ <value>linen</value>
+ <!-- Magenta Preset Color -->
+ <value>magenta</value>
+ <!-- Maroon Preset Color -->
+ <value>maroon</value>
+ <!-- Medium Aquamarine Preset Color -->
+ <value>medAquamarine</value>
+ <!-- Medium Blue Preset Color -->
+ <value>medBlue</value>
+ <!-- Medium Orchid Preset Color -->
+ <value>medOrchid</value>
+ <!-- Medium Purple Preset Color -->
+ <value>medPurple</value>
+ <!-- Medium Sea Green Preset Color -->
+ <value>medSeaGreen</value>
+ <!-- Medium Slate Blue Preset Color -->
+ <value>medSlateBlue</value>
+ <!-- Medium Spring Green Preset Color -->
+ <value>medSpringGreen</value>
+ <!-- Medium Turquoise Preset Color -->
+ <value>medTurquoise</value>
+ <!-- Medium Violet Red Preset Color -->
+ <value>medVioletRed</value>
+ <!-- Midnight Blue Preset Color -->
+ <value>midnightBlue</value>
+ <!-- Mint Cream Preset Color -->
+ <value>mintCream</value>
+ <!-- Misty Rose Preset Color -->
+ <value>mistyRose</value>
+ <!-- Moccasin Preset Color -->
+ <value>moccasin</value>
+ <!-- Navajo White Preset Color -->
+ <value>navajoWhite</value>
+ <!-- Navy Preset Color -->
+ <value>navy</value>
+ <!-- Old Lace Preset Color -->
+ <value>oldLace</value>
+ <!-- Olive Preset Color -->
+ <value>olive</value>
+ <!-- Olive Drab Preset Color -->
+ <value>oliveDrab</value>
+ <!-- Orange Preset Color -->
+ <value>orange</value>
+ <!-- Orange Red Preset Color -->
+ <value>orangeRed</value>
+ <!-- Orchid Preset Color -->
+ <value>orchid</value>
+ <!-- Pale Goldenrod Preset Color -->
+ <value>paleGoldenrod</value>
+ <!-- Pale Green Preset Color -->
+ <value>paleGreen</value>
+ <!-- Pale Turquoise Preset Color -->
+ <value>paleTurquoise</value>
+ <!-- Pale Violet Red Preset Color -->
+ <value>paleVioletRed</value>
+ <!-- Papaya Whip Preset Color -->
+ <value>papayaWhip</value>
+ <!-- Peach Puff Preset Color -->
+ <value>peachPuff</value>
+ <!-- Peru Preset Color -->
+ <value>peru</value>
+ <!-- Pink Preset Color -->
+ <value>pink</value>
+ <!-- Plum Preset Color -->
+ <value>plum</value>
+ <!-- Powder Blue Preset Color -->
+ <value>powderBlue</value>
+ <!-- Purple Preset Color -->
+ <value>purple</value>
+ <!-- Red Preset Color -->
+ <value>red</value>
+ <!-- Rosy Brown Preset Color -->
+ <value>rosyBrown</value>
+ <!-- Royal Blue Preset Color -->
+ <value>royalBlue</value>
+ <!-- Saddle Brown Preset Color -->
+ <value>saddleBrown</value>
+ <!-- Salmon Preset Color -->
+ <value>salmon</value>
+ <!-- Sandy Brown Preset Color -->
+ <value>sandyBrown</value>
+ <!-- Sea Green Preset Color -->
+ <value>seaGreen</value>
+ <!-- Sea Shell Preset Color -->
+ <value>seaShell</value>
+ <!-- Sienna Preset Color -->
+ <value>sienna</value>
+ <!-- Silver Preset Color -->
+ <value>silver</value>
+ <!-- Sky Blue Preset Color -->
+ <value>skyBlue</value>
+ <!-- Slate Blue Preset Color -->
+ <value>slateBlue</value>
+ <!-- Slate Gray Preset Color -->
+ <value>slateGray</value>
+ <!-- Snow Preset Color -->
+ <value>snow</value>
+ <!-- Spring Green Preset Color -->
+ <value>springGreen</value>
+ <!-- Steel Blue Preset Color -->
+ <value>steelBlue</value>
+ <!-- Tan Preset Color -->
+ <value>tan</value>
+ <!-- Teal Preset Color -->
+ <value>teal</value>
+ <!-- Thistle Preset Color -->
+ <value>thistle</value>
+ <!-- Tomato Preset Color -->
+ <value>tomato</value>
+ <!-- Turquoise Preset Color -->
+ <value>turquoise</value>
+ <!-- Violet Preset Color -->
+ <value>violet</value>
+ <!-- Wheat Preset Color -->
+ <value>wheat</value>
+ <!-- White Preset Color -->
+ <value>white</value>
+ <!-- White Smoke Preset Color -->
+ <value>whiteSmoke</value>
+ <!-- Yellow Preset Color -->
+ <value>yellow</value>
+ <!-- Yellow Green Preset Color -->
+ <value>yellowGreen</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PresetColor">
+ <zeroOrMore>
+ <ref name="EG_ColorTransform"/>
+ </zeroOrMore>
+ <attribute name="val">
+ <ref name="ST_PresetColorVal"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="EG_OfficeArtExtensionList">
+ <zeroOrMore>
+ <element name="ext">
+ <ref name="CT_OfficeArtExtension"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_OfficeArtExtensionList">
+ <ref name="EG_OfficeArtExtensionList"/>
+ </define>
+ <define name="CT_Scale2D">
+ <element name="sx">
+ <ref name="CT_Ratio"/>
+ </element>
+ <element name="sy">
+ <ref name="CT_Ratio"/>
+ </element>
+ </define>
+ <define name="CT_Transform2D">
+ <group>
+ <optional>
+ <element name="off">
+ <ref name="CT_Point2D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ext">
+ <ref name="CT_PositiveSize2D"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="rot">
+ <ref name="ST_Angle"/>
+ <xs:documentation>Rotation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="flipH">
+ <data type="boolean">
+ <xs:documentation>Horizontal Flip</xs:documentation>
+ </data>
+ <xs:documentation>Horizontal Flip</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="flipV">
+ <data type="boolean">
+ <xs:documentation>Vertical Flip</xs:documentation>
+ </data>
+ <xs:documentation>Vertical Flip</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_GroupTransform2D">
+ <group>
+ <optional>
+ <element name="off">
+ <ref name="CT_Point2D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ext">
+ <ref name="CT_PositiveSize2D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="chOff">
+ <ref name="CT_Point2D"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="chExt">
+ <ref name="CT_PositiveSize2D"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="rot">
+ <ref name="ST_Angle"/>
+ <xs:documentation>Rotation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="flipH">
+ <data type="boolean">
+ <xs:documentation>Horizontal Flip</xs:documentation>
+ </data>
+ <xs:documentation>Horizontal Flip</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="flipV">
+ <data type="boolean">
+ <xs:documentation>Vertical Flip</xs:documentation>
+ </data>
+ <xs:documentation>Vertical Flip</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Point3D">
+ <attribute name="x">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>X-Coordinate in 3D</xs:documentation>
+ </attribute>
+ <attribute name="y">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Y-Coordinate in 3D</xs:documentation>
+ </attribute>
+ <attribute name="z">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Z-Coordinate in 3D</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Vector3D">
+ <attribute name="dx">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Distance along X-axis in 3D</xs:documentation>
+ </attribute>
+ <attribute name="dy">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Distance along Y-axis in 3D</xs:documentation>
+ </attribute>
+ <attribute name="dz">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Distance along Z-axis in 3D</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SphereCoords">
+ <attribute name="lat">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Latitude</xs:documentation>
+ </attribute>
+ <attribute name="lon">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Longitude</xs:documentation>
+ </attribute>
+ <attribute name="rev">
+ <ref name="ST_PositiveFixedAngle"/>
+ <xs:documentation>Revolution</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_RelativeRect">
+ <optional>
+ <attribute name="l">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Left Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="t">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Top Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="r">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Right Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="b">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Bottom Offset</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_RectAlignment">
+ <list>
+ <xs:documentation>Rectangle Alignments</xs:documentation>
+ <choice>
+ <!-- Rectangle Alignment Enum ( Top Left ) -->
+ <value>tl</value>
+ <!-- Rectangle Alignment Enum ( Top ) -->
+ <value>t</value>
+ <!-- Rectangle Alignment Enum ( Top Right ) -->
+ <value>tr</value>
+ <!-- Rectangle Alignment Enum ( Left ) -->
+ <value>l</value>
+ <!-- Rectangle Alignment Enum ( Center ) -->
+ <value>ctr</value>
+ <!-- Rectangle Alignment Enum ( Right ) -->
+ <value>r</value>
+ <!-- Rectangle Alignment Enum ( Bottom Left ) -->
+ <value>bl</value>
+ <!-- Rectangle Alignment Enum ( Bottom ) -->
+ <value>b</value>
+ <!-- Rectangle Alignment Enum ( Bottom Right ) -->
+ <value>br</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_Guid">
+ <data type="token">
+ <xs:documentation>GUID Method</xs:documentation>
+ <param name="pattern">\{[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}\}</param>
+ </data>
+ </define>
+ <define name="EG_ColorChoice">
+ <choice>
+ <element name="scrgbClr">
+ <ref name="CT_ScRgbColor"/>
+ </element>
+ <element name="srgbClr">
+ <ref name="CT_SRgbColor"/>
+ </element>
+ <element name="hslClr">
+ <ref name="CT_HslColor"/>
+ </element>
+ <element name="sysClr">
+ <ref name="CT_SystemColor"/>
+ </element>
+ <element name="schemeClr">
+ <ref name="CT_SchemeColor"/>
+ </element>
+ <element name="prstClr">
+ <ref name="CT_PresetColor"/>
+ </element>
+ </choice>
+ </define>
+ <define name="CT_Color">
+ <ref name="EG_ColorChoice"/>
+ </define>
+ <define name="CT_ColorMRU">
+ <zeroOrMore>
+ <ref name="EG_ColorChoice"/>
+ </zeroOrMore>
+ </define>
+ <define name="ST_BlackWhiteMode">
+ <list>
+ <xs:documentation>Black and White Mode</xs:documentation>
+ <choice>
+ <!-- Color -->
+ <value>clr</value>
+ <!-- Automatic -->
+ <value>auto</value>
+ <!-- Gray -->
+ <value>gray</value>
+ <!-- Light Gray -->
+ <value>ltGray</value>
+ <!-- Inverse Gray -->
+ <value>invGray</value>
+ <!-- Gray and White -->
+ <value>grayWhite</value>
+ <!-- Black and Gray -->
+ <value>blackGray</value>
+ <!-- Black and White -->
+ <value>blackWhite</value>
+ <!-- Black -->
+ <value>black</value>
+ <!-- White -->
+ <value>white</value>
+ <!-- Hidden -->
+ <value>hidden</value>
+ </choice>
+ </list>
+ </define>
+ <define name="AG_Blob">
+ <optional>
+ <attribute name="r:embed">
+ <text/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="r:link">
+ <text/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_EmbeddedWAVAudioFile">
+ <attribute name="r:embed"/>
+ <optional>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Sound Name</xs:documentation>
+ </data>
+ <xs:documentation>Sound Name</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="builtIn">
+ <data type="boolean">
+ <xs:documentation>Recognized Built-In Sound</xs:documentation>
+ </data>
+ <xs:documentation>Recognized Built-In Sound</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Hyperlink">
+ <group>
+ <optional>
+ <element name="snd">
+ <ref name="CT_EmbeddedWAVAudioFile"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="r:id"/>
+ </optional>
+ <optional>
+ <attribute name="invalidUrl">
+ <data type="string">
+ <xs:documentation>Invalid URL</xs:documentation>
+ </data>
+ <xs:documentation>Invalid URL</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="action">
+ <data type="string">
+ <xs:documentation>Action Setting</xs:documentation>
+ </data>
+ <xs:documentation>Action Setting</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="tgtFrame">
+ <data type="string">
+ <xs:documentation>Target Frame</xs:documentation>
+ </data>
+ <xs:documentation>Target Frame</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="tooltip">
+ <data type="string">
+ <xs:documentation>Hyperlink Tooltip</xs:documentation>
+ </data>
+ <xs:documentation>Hyperlink Tooltip</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="history">
+ <data type="boolean">
+ <xs:documentation>Add Hyperlink to Page History</xs:documentation>
+ </data>
+ <xs:documentation>Add Hyperlink to Page History</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="highlightClick">
+ <data type="boolean">
+ <xs:documentation>Highlight Click</xs:documentation>
+ </data>
+ <xs:documentation>Highlight Click</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endSnd">
+ <data type="boolean">
+ <xs:documentation>End Sounds</xs:documentation>
+ </data>
+ <xs:documentation>End Sounds</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_DrawingElementId">
+ <data type="unsignedInt">
+ <xs:documentation>Drawing Element ID</xs:documentation>
+ </data>
+ </define>
+ </grammar>
+ <resource name="ST_Coordinate" resource="Integer" generated="yes"/>
+ <resource name="ST_Coordinate32" resource="Integer" generated="yes"/>
+ <resource name="ST_PositiveCoordinate" resource="Integer" generated="yes"/>
+ <resource name="ST_Angle" resource="Integer" generated="yes"/>
+ <resource name="CT_Angle" resource="Value" generated="yes">
+ <attribute name="val" tokenid="ooxml:CT_Angle_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="CT_PositiveFixedAngle" resource="Value" generated="yes" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_PositiveFixedAngle_val" action="setValue"/>
+ </resource>
+ <resource name="ST_Percentage" resource="Integer" generated="yes"/>
+ <resource name="CT_Percentage" resource="Value" generated="yes" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_Percentage_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="CT_PositivePercentage" resource="Value" generated="yes" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_PositivePercentage_val" action="setValue"/>
+ </resource>
+ <resource name="CT_FixedPercentage" resource="Value" generated="yes" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_FixedPercentage_val" action="setValue"/>
+ </resource>
+ <resource name="CT_PositiveFixedPercentage" resource="Value" generated="yes" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_PositiveFixedPercentage_val" action="setValue"/>
+ </resource>
+ <resource name="CT_Point2D" resource="Properties" tag="shape">
+ <attribute name="x" tokenid="ooxml:CT_Point2D_x"/>
+ <attribute name="y" tokenid="ooxml:CT_Point2D_y"/>
+ </resource>
+ <resource name="CT_PositiveSize2D" resource="Properties" tag="shape">
+ <attribute name="cx" tokenid="ooxml:CT_PositiveSize2D_cx"/>
+ <attribute name="cy" tokenid="ooxml:CT_PositiveSize2D_cy"/>
+ </resource>
+ <resource name="CT_ScRgbColor" resource="Properties" tag="shape">
+ <attribute name="r" tokenid="ooxml:CT_ScRgbColor_r"/>
+ <attribute name="g" tokenid="ooxml:CT_ScRgbColor_g"/>
+ <attribute name="b" tokenid="ooxml:CT_ScRgbColor_b"/>
+ </resource>
+ <resource name="ST_HexBinary3" resource="Hex" generated="yes"/>
+ <resource name="CT_SRgbColor" resource="Properties" tag="shape">
+ <attribute name="val" tokenid="ooxml:CT_SRgbColor_val"/>
+ </resource>
+ <resource name="CT_HslColor" resource="Properties" tag="shape">
+ <attribute name="hue" tokenid="ooxml:CT_HslColor_hue"/>
+ <attribute name="sat" tokenid="ooxml:CT_HslColor_sat"/>
+ <attribute name="lum" tokenid="ooxml:CT_HslColor_lum"/>
+ </resource>
+ <resource name="ST_SystemColorVal" resource="List" generated="yes">
+ <value name="scrollBar" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_scrollBar">scrollBar</value>
+ <value name="background" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_background">background</value>
+ <value name="activeCaption" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_activeCaption">activeCaption</value>
+ <value name="inactiveCaption" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_inactiveCaption">inactiveCaption</value>
+ <value name="menu" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menu">menu</value>
+ <value name="window" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_window">window</value>
+ <value name="windowFrame" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_windowFrame">windowFrame</value>
+ <value name="menuText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menuText">menuText</value>
+ <value name="windowText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_windowText">windowText</value>
+ <value name="captionText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_captionText">captionText</value>
+ <value name="activeBorder" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_activeBorder">activeBorder</value>
+ <value name="inactiveBorder" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_inactiveBorder">inactiveBorder</value>
+ <value name="appWorkspace" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_appWorkspace">appWorkspace</value>
+ <value name="highlight" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_highlight">highlight</value>
+ <value name="highlightText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_highlightText">highlightText</value>
+ <value name="btnFace" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnFace">btnFace</value>
+ <value name="btnShadow" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnShadow">btnShadow</value>
+ <value name="grayText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_grayText">grayText</value>
+ <value name="btnText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnText">btnText</value>
+ <value name="inactiveCaptionText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_inactiveCaptionText">inactiveCaptionText</value>
+ <value name="btnHighlight" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_btnHighlight">btnHighlight</value>
+ <value name="3dDkShadow" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_3dDkShadow">3dDkShadow</value>
+ <value name="3dLight" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_3dLight">3dLight</value>
+ <value name="infoText" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_infoText">infoText</value>
+ <value name="infoBk" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_infoBk">infoBk</value>
+ <value name="hotLight" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_hotLight">hotLight</value>
+ <value name="gradientActiveCaption" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_gradientActiveCaption">gradientActiveCaption</value>
+ <value name="gradientInactiveCaption" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_gradientInactiveCaption">gradientInactiveCaption</value>
+ <value name="menuHighlight" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menuHighlight">menuHighlight</value>
+ <value name="menuBar" tokenid="ooxml:Value_drawingml_ST_SystemColorVal_menuBar">menuBar</value>
+ </resource>
+ <resource name="CT_SystemColor" resource="Properties" tag="shape">
+ <attribute name="val" tokenid="ooxml:CT_SystemColor_val"/>
+ <attribute name="lastClr" tokenid="ooxml:CT_SytemColor_lastClr"/>
+ </resource>
+ <resource name="ST_SchemeColorVal" resource="List" generated="yes">
+ <value name="bg1" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_bg1">bg1</value>
+ <value name="tx1" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_tx1">tx1</value>
+ <value name="bg2" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_bg2">bg2</value>
+ <value name="tx2" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_tx2">tx2</value>
+ <value name="accent1" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent1">accent1</value>
+ <value name="accent2" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent2">accent2</value>
+ <value name="accent3" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent3">accent3</value>
+ <value name="accent4" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent4">accent4</value>
+ <value name="accent5" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent5">accent5</value>
+ <value name="accent6" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_accent6">accent6</value>
+ <value name="hlink" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_hlink">hlink</value>
+ <value name="folHlink" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_folHlink">folHlink</value>
+ <value name="phClr" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_phClr">phClr</value>
+ <value name="dk1" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_dk1">dk1</value>
+ <value name="lt1" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_lt1">lt1</value>
+ <value name="dk2" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_dk2">dk2</value>
+ <value name="lt2" tokenid="ooxml:Value_drawingml_ST_SchemeColorVal_lt2">lt2</value>
+ </resource>
+ <resource name="CT_SchemeColor" resource="Properties" tag="shape">
+ <attribute name="val" tokenid="ooxml:CT_SchemeColor_val"/>
+ </resource>
+ <resource name="ST_PresetColorVal" resource="List">
+ <value tokenid="0xf0f8ff">aliceBlue</value>
+ <value tokenid="0xfaebd7">antiqueWhite</value>
+ <value tokenid="0x00ffff">aqua</value>
+ <value tokenid="0x7fffd4">aquamarine</value>
+ <value tokenid="0xf0ffff">azure</value>
+ <value tokenid="0xf5f5dc">beige</value>
+ <value tokenid="0xffe4c4">bisque</value>
+ <value tokenid="0x000000">black</value>
+ <value tokenid="0xffebcd">blanchedAlmond</value>
+ <value tokenid="0x0000ff">blue</value>
+ <value tokenid="0x8a2be2">blueViolet</value>
+ <value tokenid="0xa52a2a">brown</value>
+ <value tokenid="0xdeb887">burlyWood</value>
+ <value tokenid="0x5f9ea0">cadetBlue</value>
+ <value tokenid="0x7fff00">chartreuse</value>
+ <value tokenid="0xd2691e">chocolate</value>
+ <value tokenid="0xff7f50">coral</value>
+ <value tokenid="0x6495ed">cornflowerBlue</value>
+ <value tokenid="0xfff8dc">cornsilk</value>
+ <value tokenid="0xdc143c">crimson</value>
+ <value tokenid="0x00ffff">cyan</value>
+ <value tokenid="0xff1493">deepPink</value>
+ <value tokenid="0x00bfff">deepSkyBlue</value>
+ <value tokenid="0x696969">dimGray</value>
+ <value tokenid="0x00008b">dkBlue</value>
+ <value tokenid="0x008b8b">dkCyan</value>
+ <value tokenid="0xb8860b">dkGoldenrod</value>
+ <value tokenid="0xa9a9a9">dkGray</value>
+ <value tokenid="0x006400">dkGreen</value>
+ <value tokenid="0xbdb76b">dkKhaki</value>
+ <value tokenid="0x8b008b">dkMagenta</value>
+ <value tokenid="0x556b2f">dkOliveGreen</value>
+ <value tokenid="0xff8c00">dkOrange</value>
+ <value tokenid="0x9932cc">dkOrchid</value>
+ <value tokenid="0x8b0000">dkRed</value>
+ <value tokenid="0xe9967a">dkSalmon</value>
+ <value tokenid="0x8fbc8b">dkSeaGreen</value>
+ <value tokenid="0x483d8b">dkSlateBlue</value>
+ <value tokenid="0x2f4f4f">dkSlateGray</value>
+ <value tokenid="0x00ced1">dkTurquoise</value>
+ <value tokenid="0x9400d3">dkViolet</value>
+ <value tokenid="0x1e90ff">dodgerBlue</value>
+ <value tokenid="0xb22222">firebrick</value>
+ <value tokenid="0xfffaf0">floralWhite</value>
+ <value tokenid="0x228b22">forestGreen</value>
+ <value tokenid="0xff00ff">fuchsia</value>
+ <value tokenid="0xdcdcdc">gainsboro</value>
+ <value tokenid="0xf8f8ff">ghostWhite</value>
+ <value tokenid="0xffd700">gold</value>
+ <value tokenid="0xdaa520">goldenrod</value>
+ <value tokenid="0x808080">gray</value>
+ <value tokenid="0x008000">green</value>
+ <value tokenid="0xadff2f">greenYellow</value>
+ <value tokenid="0xf0fff0">honeydew</value>
+ <value tokenid="0xff69b4">hotPink</value>
+ <value tokenid="0xcd5c5c">indianRed</value>
+ <value tokenid="0x4b0082">indigo</value>
+ <value tokenid="0xfffff0">ivory</value>
+ <value tokenid="0xf0e68c">khaki</value>
+ <value tokenid="0xe6e6fa">lavender</value>
+ <value tokenid="0xfff0f5">lavenderBlush</value>
+ <value tokenid="0x7cfc00">lawnGreen</value>
+ <value tokenid="0xfffacd">lemonChiffon</value>
+ <value tokenid="0x00ff00">lime</value>
+ <value tokenid="0x32cd32">limeGreen</value>
+ <value tokenid="0xfaf0e6">linen</value>
+ <value tokenid="0xadd8e6">ltBlue</value>
+ <value tokenid="0xf08080">ltCoral</value>
+ <value tokenid="0xe0ffff">ltCyan</value>
+ <value tokenid="0xfafa78">ltGoldenrodYellow</value>
+ <value tokenid="0xd3d3d3">ltGray</value>
+ <value tokenid="0x90ee90">ltGreen</value>
+ <value tokenid="0xffb6c1">ltPink</value>
+ <value tokenid="0xffa07a">ltSalmon</value>
+ <value tokenid="0x20b2aa">ltSeaGreen</value>
+ <value tokenid="0x87cefa">ltSkyBlue</value>
+ <value tokenid="0x778899">ltSlateGray</value>
+ <value tokenid="0xb0c4de">ltSteelBlue</value>
+ <value tokenid="0xffffe0">ltYellow</value>
+ <value tokenid="0xff00ff">magenta</value>
+ <value tokenid="0x800000">maroon</value>
+ <value tokenid="0x66cdaa">medAquamarine</value>
+ <value tokenid="0x0000cd">medBlue</value>
+ <value tokenid="0xba55d3">medOrchid</value>
+ <value tokenid="0x9370db">medPurple</value>
+ <value tokenid="0x3cb371">medSeaGreen</value>
+ <value tokenid="0x7b68ee">medSlateBlue</value>
+ <value tokenid="0x00fa9a">medSpringGreen</value>
+ <value tokenid="0x48d1cc">medTurquoise</value>
+ <value tokenid="0xc71585">medVioletRed</value>
+ <value tokenid="0x191970">midnightBlue</value>
+ <value tokenid="0xf5fffa">mintCream</value>
+ <value tokenid="0xffe4e1">mistyRose</value>
+ <value tokenid="0xffe4b5">moccasin</value>
+ <value tokenid="0xffdead">navajoWhite</value>
+ <value tokenid="0x000080">navy</value>
+ <value tokenid="0xfdf5e6">oldLace</value>
+ <value tokenid="0x808000">olive</value>
+ <value tokenid="0x6b8e23">oliveDrab</value>
+ <value tokenid="0xffa500">orange</value>
+ <value tokenid="0xff4500">orangeRed</value>
+ <value tokenid="0xda70d6">orchid</value>
+ <value tokenid="0xeee8aa">paleGoldenrod</value>
+ <value tokenid="0x98fb98">paleGreen</value>
+ <value tokenid="0xafeeee">paleTurquoise</value>
+ <value tokenid="0xdb7093">paleVioletRed</value>
+ <value tokenid="0xffefd5">papayaWhip</value>
+ <value tokenid="0xffdab9">peachPuff</value>
+ <value tokenid="0xcd853f">peru</value>
+ <value tokenid="0xffc0cb">pink</value>
+ <value tokenid="0xdda0dd">plum</value>
+ <value tokenid="0xb0e0e6">powderBlue</value>
+ <value tokenid="0x800080">purple</value>
+ <value tokenid="0xff0000">red</value>
+ <value tokenid="0xbc8f8f">rosyBrown</value>
+ <value tokenid="0x4169e1">royalBlue</value>
+ <value tokenid="0x8b4513">saddleBrown</value>
+ <value tokenid="0xfa8072">salmon</value>
+ <value tokenid="0xf4a460">sandyBrown</value>
+ <value tokenid="0x2e8b57">seaGreen</value>
+ <value tokenid="0xfff5ee">seaShell</value>
+ <value tokenid="0xa0522d">sienna</value>
+ <value tokenid="0xc0c0c0">silver</value>
+ <value tokenid="0x87ceeb">skyBlue</value>
+ <value tokenid="0x6a5acd">slateBlue</value>
+ <value tokenid="0x708090">slateGray</value>
+ <value tokenid="0xfffafa">snow</value>
+ <value tokenid="0x00ff7f">springGreen</value>
+ <value tokenid="0x4682b4">steelBlue</value>
+ <value tokenid="0xd2b48c">tan</value>
+ <value tokenid="0x008080">teal</value>
+ <value tokenid="0xd8bfd8">thistle</value>
+ <value tokenid="0xff6347">tomato</value>
+ <value tokenid="0x40e0d0">turquoise</value>
+ <value tokenid="0xee82ee">violet</value>
+ <value tokenid="0xf5deb3">wheat</value>
+ <value tokenid="0xffffff">white</value>
+ <value tokenid="0xf5f5f5">whiteSmoke</value>
+ <value tokenid="0xffff00">yellow</value>
+ <value tokenid="0x9acd32">yellowGreen</value>
+ </resource>
+ <resource name="CT_PresetColor" resource="Properties" tag="shape">
+ <attribute name="val" tokenid="ooxml:CT_PresetColor_val"/>
+ </resource>
+ <resource name="CT_Transform2D" resource="Properties" tag="shape">
+ <element name="off" tokenid="ooxml:CT_Transform2D_off"/>
+ <element name="ext" tokenid="ooxml:CT_Transform2D_ext"/>
+ <attribute name="rot" tokenid="ooxml:CT_Transform2D_rot"/>
+ <attribute name="flipH" tokenid="ooxml:CT_Transform2D_flipH"/>
+ <attribute name="flipV" tokenid="ooxml:CT_Transform2D_flipV"/>
+ </resource>
+ <resource name="ST_RectAlignment" resource="List" generated="yes">
+ <value name="tl" tokenid="ooxml:Value_drawingml_ST_RectAlignment_tl">tl</value>
+ <value name="t" tokenid="ooxml:Value_drawingml_ST_RectAlignment_t">t</value>
+ <value name="tr" tokenid="ooxml:Value_drawingml_ST_RectAlignment_tr">tr</value>
+ <value name="l" tokenid="ooxml:Value_drawingml_ST_RectAlignment_l">l</value>
+ <value name="ctr" tokenid="ooxml:Value_drawingml_ST_RectAlignment_ctr">ctr</value>
+ <value name="r" tokenid="ooxml:Value_drawingml_ST_RectAlignment_r">r</value>
+ <value name="bl" tokenid="ooxml:Value_drawingml_ST_RectAlignment_bl">bl</value>
+ <value name="b" tokenid="ooxml:Value_drawingml_ST_RectAlignment_b">b</value>
+ <value name="br" tokenid="ooxml:Value_drawingml_ST_RectAlignment_br">br</value>
+ </resource>
+ <resource name="ST_Guid" resource="String" generated="yes"/>
+ <resource name="EG_ColorChoice" resource="Properties" tag="shape">
+ <element name="scrgbClr" tokenid="ooxml:EG_ColorChoice_scrgbClr"/>
+ <element name="srgbClr" tokenid="ooxml:EG_ColorChoice_srgbClr"/>
+ <element name="hslClr" tokenid="ooxml:EG_ColorChoice_hslClr"/>
+ <element name="sysClr" tokenid="ooxml:EG_ColorChoice_sysClr"/>
+ <element name="schemeClr" tokenid="ooxml:EG_ColorChoice_schemeClr"/>
+ <element name="prstClr" tokenid="ooxml:EG_ColorChoice_prstClr"/>
+ </resource>
+ <resource name="CT_Color" resource="Properties" tag="shape"/>
+ <resource name="CT_ColorMRU" resource="Properties" tag="shape"/>
+ <resource name="ST_BlackWhiteMode" resource="List" generated="yes">
+ <value name="clr" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_clr">clr</value>
+ <value name="auto" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_auto">auto</value>
+ <value name="gray" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_gray">gray</value>
+ <value name="ltGray" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_ltGray">ltGray</value>
+ <value name="invGray" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_invGray">invGray</value>
+ <value name="grayWhite" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_grayWhite">grayWhite</value>
+ <value name="blackGray" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_blackGray">blackGray</value>
+ <value name="blackWhite" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_blackWhite">blackWhite</value>
+ <value name="black" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_black">black</value>
+ <value name="white" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_white">white</value>
+ <value name="hidden" tokenid="ooxml:Value_drawingml_ST_BlackWhiteMode_hidden">hidden</value>
+ </resource>
+ <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="AG_Blob" resource="Properties" tag="shape">
+ <attribute name="r:embed" tokenid="ooxml:AG_Blob_r_embed"/>
+ <attribute name="r:link" tokenid="ooxml:AG_Blob_r_link"/>
+ </resource>
+ <resource name="ST_DrawingElementId" resource="Integer" generated="yes"/>
+ </namespace>
+ <namespace name="dml-documentProperties" file="dml-documentProperties.rng" todo="ignore">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-baseTypes.rng"/>
+ <include href="dml-shapeGeometry.rng"/>
+ <define name="AG_Locking">
+ <optional>
+ <attribute name="noGrp">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Grouping</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Grouping</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noSelect">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Selection</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Selection</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noRot">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Rotation</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Rotation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noChangeAspect">
+ <data type="boolean">
+ <xs:documentation>Disallow Aspect Ratio Change</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Aspect Ratio Change</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noMove">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Movement</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Movement</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noResize">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Resize</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Resize</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noEditPoints">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Point Editing</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Point Editing</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noAdjustHandles">
+ <data type="boolean">
+ <xs:documentation>Disallow Showing Adjust Handles</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Showing Adjust Handles</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noChangeArrowheads">
+ <data type="boolean">
+ <xs:documentation>Disallow Arrowhead Changes</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Arrowhead Changes</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noChangeShapeType">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Type Change</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Type Change</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_ConnectorLocking">
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ <ref name="AG_Locking"/>
+ </define>
+ <define name="CT_ShapeLocking">
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ <ref name="AG_Locking"/>
+ <optional>
+ <attribute name="noTextEdit">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Text Editing</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Text Editing</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_PictureLocking">
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ <ref name="AG_Locking"/>
+ <optional>
+ <attribute name="noCrop">
+ <data type="boolean">
+ <xs:documentation>Disallow Crop Changes</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Crop Changes</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_GroupLocking">
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ <optional>
+ <attribute name="noGrp">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Grouping</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Grouping</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noUngrp">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Ungrouping</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Ungrouping</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noSelect">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Selection</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Selection</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noRot">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Rotation</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Rotation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noChangeAspect">
+ <data type="boolean">
+ <xs:documentation>Disallow Aspect Ratio Change</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Aspect Ratio Change</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noMove">
+ <data type="boolean">
+ <xs:documentation>Disallow Moving Shape</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Moving Shape</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noResize">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Resizing</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Resizing</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_GraphicalObjectFrameLocking">
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ <optional>
+ <attribute name="noGrp">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Grouping</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Grouping</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noDrilldown">
+ <data type="boolean">
+ <xs:documentation>Disallow Selection of Child Shapes</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Selection of Child Shapes</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noSelect">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Selection</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Selection</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noChangeAspect">
+ <data type="boolean">
+ <xs:documentation>Disallow Aspect Ratio Change</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Aspect Ratio Change</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noMove">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Movement</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Movement</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noResize">
+ <data type="boolean">
+ <xs:documentation>Disallow Shape Resize</xs:documentation>
+ </data>
+ <xs:documentation>Disallow Shape Resize</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_NonVisualDrawingProps">
+ <group>
+ <optional>
+ <element name="hlinkClick">
+ <ref name="CT_Hyperlink"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hlinkHover">
+ <ref name="CT_Hyperlink"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="id">
+ <ref name="ST_DrawingElementId"/>
+ <xs:documentation>Unique Identifier</xs:documentation>
+ </attribute>
+ <attribute name="name">
+ <data type="string">
+ <xs:documentation>Name</xs:documentation>
+ </data>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="descr">
+ <data type="string">
+ <xs:documentation>Alternative Text for Object</xs:documentation>
+ </data>
+ <xs:documentation>Alternative Text for Object</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="hidden">
+ <data type="boolean">
+ <xs:documentation>Hidden</xs:documentation>
+ </data>
+ <xs:documentation>Hidden</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_NonVisualDrawingShapeProps">
+ <group>
+ <optional>
+ <element name="spLocks">
+ <ref name="CT_ShapeLocking"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="txBox">
+ <data type="boolean">
+ <xs:documentation>Text Box</xs:documentation>
+ </data>
+ <xs:documentation>Text Box</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_NonVisualConnectorProperties">
+ <optional>
+ <element name="cxnSpLocks">
+ <ref name="CT_ConnectorLocking"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="stCxn">
+ <ref name="CT_Connection"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="endCxn">
+ <ref name="CT_Connection"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_NonVisualPictureProperties">
+ <group>
+ <optional>
+ <element name="picLocks">
+ <ref name="CT_PictureLocking"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="preferRelativeResize">
+ <data type="boolean">
+ <xs:documentation>Relative Resize Preferred</xs:documentation>
+ </data>
+ <xs:documentation>Relative Resize Preferred</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_NonVisualGroupDrawingShapeProps">
+ <optional>
+ <element name="grpSpLocks">
+ <ref name="CT_GroupLocking"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_NonVisualGraphicFrameProperties">
+ <optional>
+ <element name="graphicFrameLocks">
+ <ref name="CT_GraphicalObjectFrameLocking"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="extLst">
+ <ref name="CT_OfficeArtExtensionList"/>
+ </element>
+ </optional>
+ </define>
+ </grammar>
+ <resource name="CT_GraphicalObjectFrameLocking" resource="Properties" tag="shape">
+ <element name="extLst" tokenid="ooxml:CT_GraphicalObjectFrameLocking_extLst"/>
+ <attribute name="noGrp" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noGrp"/>
+ <attribute name="noDrilldown" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noDrilldown"/>
+ <attribute name="noSelect" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noSelect"/>
+ <attribute name="noChangeAspect" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noChangeAspect"/>
+ <attribute name="noMove" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noMove"/>
+ <attribute name="noResize" tokenid="ooxml:CT_GraphicalObjectFrameLocking_noResize"/>
+ </resource>
+ <resource name="CT_NonVisualDrawingProps" resource="Properties" tag="shape">
+ <element name="hlinkClick" tokenid="ooxml:CT_NonVisualDrawingProps_hlinkClick"/>
+ <element name="hlinkHover" tokenid="ooxml:CT_NonVisualDrawingProps_hlinkHover"/>
+ <element name="extLst" tokenid="ooxml:CT_NonVisualDrawingProps_extLst"/>
+ <attribute name="id" tokenid="ooxml:CT_NonVisualDrawingProps_id"/>
+ <attribute name="name" tokenid="ooxml:CT_NonVisualDrawingProps_name"/>
+ <attribute name="descr" tokenid="ooxml:CT_NonVisualDrawingProps_descr"/>
+ <attribute name="hidden" tokenid="ooxml:CT_NonVisualDrawingProps_hidden"/>
+ </resource>
+ <resource name="CT_NonVisualPictureProperties" resource="Properties" tag="shape">
+ <element name="picLocks" tokenid="ooxml:CT_NonVisualPictureProperties_picLocks"/>
+ <element name="extLst" tokenid="ooxml:CT_NonVisualPictureProperties_extLst"/>
+ <attribute name="preferRelativeResize" tokenid="ooxml:CT_NonVisualPictureProperties_preferRelativeResize"/>
+ </resource>
+ <resource name="CT_NonVisualGraphicFrameProperties" resource="Properties" tag="shape">
+ <element name="graphicFrameLocks" tokenid="ooxml:CT_NonVisualGraphicFrameProperties_graphicFrameLocks"/>
+ <element name="extLst" tokenid="ooxml:CT_NonVisualGraphicFrameProperties_extLst"/>
+ </resource>
+ </namespace>
+ <namespace name="dml-graphicalObject" file="dml-graphicalObject.rng">
+ <start name="graphic"/>
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- ISO RELAX NG Schema -->
+ <!-- start = graphic -->
+ <define name="CT_GraphicalObjectData">
+ <zeroOrMore>
+ <ref name="pic"/>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </zeroOrMore>
+ <attribute name="uri">
+ <data type="token">
+ <xs:documentation>Uniform Resource Identifier</xs:documentation>
+ </data>
+ <xs:documentation>Uniform Resource Identifier</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_GraphicalObject">
+ <element name="graphicData">
+ <ref name="CT_GraphicalObjectData"/>
+ </element>
+ </define>
+ <define name="graphic">
+ <element name="graphic">
+ <ref name="CT_GraphicalObject"/>
+ </element>
+ </define>
+ </grammar>
+ <resource name="CT_GraphicalObjectData" resource="Properties" tag="shape">
+ <element name="pic" tokenid="ooxml:CT_GraphicalObjectData_pic"/>
+ <attribute name="uri" tokenid="ooxml:CT_GraphicalObjectData_uri"/>
+ </resource>
+ <resource name="CT_GraphicalObject" resource="Properties" tag="shape">
+ <element name="graphicData" tokenid="ooxml:CT_GraphicalObject_graphicData"/>
+ </resource>
+ <resource name="graphic" resource="Properties" tag="shape">
+ <element name="graphic" tokenid="ooxml:graphic_graphic"/>
+ </resource>
+ </namespace>
+ <namespace name="dml-shapeGeometry" file="dml-shapeGeometry.rng" todo="ignore">
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-baseTypes.rng"/>
+ <define name="ST_ShapeType">
+ <list>
+ <xs:documentation>Preset Shape Types</xs:documentation>
+ <choice>
+ <!-- Line Shape -->
+ <value>line</value>
+ <!-- Line Inverse Shape -->
+ <value>lineInv</value>
+ <!-- Triangle Shape -->
+ <value>triangle</value>
+ <!-- Right Triangle Shape -->
+ <value>rtTriangle</value>
+ <!-- Rectangle Shape -->
+ <value>rect</value>
+ <!-- Diamond Shape -->
+ <value>diamond</value>
+ <!-- Parallelogram Shape -->
+ <value>parallelogram</value>
+ <!-- Trapezoid Shape -->
+ <value>trapezoid</value>
+ <!-- Non-Isosceles Trapezoid Shape -->
+ <value>nonIsoscelesTrapezoid</value>
+ <!-- Pentagon Shape -->
+ <value>pentagon</value>
+ <!-- Hexagon Shape -->
+ <value>hexagon</value>
+ <!-- Heptagon Shape -->
+ <value>heptagon</value>
+ <!-- Octagon Shape -->
+ <value>octagon</value>
+ <!-- Decagon Shape -->
+ <value>decagon</value>
+ <!-- Dodecagon Shape -->
+ <value>dodecagon</value>
+ <!-- Four Pointed Star Shape -->
+ <value>star4</value>
+ <!-- Five Pointed Star Shape -->
+ <value>star5</value>
+ <!-- Six Pointed Star Shape -->
+ <value>star6</value>
+ <!-- Seven Pointed Star Shape -->
+ <value>star7</value>
+ <!-- Eight Pointed Star Shape -->
+ <value>star8</value>
+ <!-- Ten Pointed Star Shape -->
+ <value>star10</value>
+ <!-- Twelve Pointed Star Shape -->
+ <value>star12</value>
+ <!-- Sixteen Pointed Star Shape -->
+ <value>star16</value>
+ <!-- Twenty Four Pointed Star Shape -->
+ <value>star24</value>
+ <!-- Thirty Two Pointed Star Shape -->
+ <value>star32</value>
+ <!-- Round Corner Rectangle Shape -->
+ <value>roundRect</value>
+ <!-- One Round Corner Rectangle Shape -->
+ <value>round1Rect</value>
+ <!-- Two Same-side Round Corner Rectangle Shape -->
+ <value>round2SameRect</value>
+ <!-- Two Diagonal Round Corner Rectangle Shape -->
+ <value>round2DiagRect</value>
+ <!-- One Snip One Round Corner Rectangle Shape -->
+ <value>snipRoundRect</value>
+ <!-- One Snip Corner Rectangle Shape -->
+ <value>snip1Rect</value>
+ <!-- Two Same-side Snip Corner Rectangle Shape -->
+ <value>snip2SameRect</value>
+ <!-- Two Diagonal Snip Corner Rectangle Shape -->
+ <value>snip2DiagRect</value>
+ <!-- Plaque Shape -->
+ <value>plaque</value>
+ <!-- Ellipse Shape -->
+ <value>ellipse</value>
+ <!-- Teardrop Shape -->
+ <value>teardrop</value>
+ <!-- Home Plate Shape -->
+ <value>homePlate</value>
+ <!-- Chevron Shape -->
+ <value>chevron</value>
+ <!-- Pie Wedge Shape -->
+ <value>pieWedge</value>
+ <!-- Pie Shape -->
+ <value>pie</value>
+ <!-- Block Arc Shape -->
+ <value>blockArc</value>
+ <!-- Donut Shape -->
+ <value>donut</value>
+ <!-- No Smoking Shape -->
+ <value>noSmoking</value>
+ <!-- Right Arrow Shape -->
+ <value>rightArrow</value>
+ <!-- Left Arrow Shape -->
+ <value>leftArrow</value>
+ <!-- Up Arrow Shape -->
+ <value>upArrow</value>
+ <!-- Down Arrow Shape -->
+ <value>downArrow</value>
+ <!-- Striped Right Arrow Shape -->
+ <value>stripedRightArrow</value>
+ <!-- Notched Right Arrow Shape -->
+ <value>notchedRightArrow</value>
+ <!-- Bent Up Arrow Shape -->
+ <value>bentUpArrow</value>
+ <!-- Left Right Arrow Shape -->
+ <value>leftRightArrow</value>
+ <!-- Up Down Arrow Shape -->
+ <value>upDownArrow</value>
+ <!-- Left Up Arrow Shape -->
+ <value>leftUpArrow</value>
+ <!-- Left Right Up Arrow Shape -->
+ <value>leftRightUpArrow</value>
+ <!-- Quad-Arrow Shape -->
+ <value>quadArrow</value>
+ <!-- Callout Left Arrow Shape -->
+ <value>leftArrowCallout</value>
+ <!-- Callout Right Arrow Shape -->
+ <value>rightArrowCallout</value>
+ <!-- Callout Up Arrow Shape -->
+ <value>upArrowCallout</value>
+ <!-- Callout Down Arrow Shape -->
+ <value>downArrowCallout</value>
+ <!-- Callout Left Right Arrow Shape -->
+ <value>leftRightArrowCallout</value>
+ <!-- Callout Up Down Arrow Shape -->
+ <value>upDownArrowCallout</value>
+ <!-- Callout Quad-Arrow Shape -->
+ <value>quadArrowCallout</value>
+ <!-- Bent Arrow Shape -->
+ <value>bentArrow</value>
+ <!-- U-Turn Arrow Shape -->
+ <value>uturnArrow</value>
+ <!-- Circular Arrow Shape -->
+ <value>circularArrow</value>
+ <!-- Left Circular Arrow Shape -->
+ <value>leftCircularArrow</value>
+ <!-- Left Right Circular Arrow Shape -->
+ <value>leftRightCircularArrow</value>
+ <!-- Curved Right Arrow Shape -->
+ <value>curvedRightArrow</value>
+ <!-- Curved Left Arrow Shape -->
+ <value>curvedLeftArrow</value>
+ <!-- Curved Up Arrow Shape -->
+ <value>curvedUpArrow</value>
+ <!-- Curved Down Arrow Shape -->
+ <value>curvedDownArrow</value>
+ <!-- Swoosh Arrow Shape -->
+ <value>swooshArrow</value>
+ <!-- Cube Shape -->
+ <value>cube</value>
+ <!-- Can Shape -->
+ <value>can</value>
+ <!-- Lightning Bolt Shape -->
+ <value>lightningBolt</value>
+ <!-- Heart Shape -->
+ <value>heart</value>
+ <!-- Sun Shape -->
+ <value>sun</value>
+ <!-- Moon Shape -->
+ <value>moon</value>
+ <!-- Smiley Face Shape -->
+ <value>smileyFace</value>
+ <!-- Irregular Seal 1 Shape -->
+ <value>irregularSeal1</value>
+ <!-- Irregular Seal 2 Shape -->
+ <value>irregularSeal2</value>
+ <!-- Folded Corner Shape -->
+ <value>foldedCorner</value>
+ <!-- Bevel Shape -->
+ <value>bevel</value>
+ <!-- Frame Shape -->
+ <value>frame</value>
+ <!-- Half Frame Shape -->
+ <value>halfFrame</value>
+ <!-- Corner Shape -->
+ <value>corner</value>
+ <!-- Diagonal Stripe Shape -->
+ <value>diagStripe</value>
+ <!-- Chord Shape -->
+ <value>chord</value>
+ <!-- Curved Arc Shape -->
+ <value>arc</value>
+ <!-- Left Bracket Shape -->
+ <value>leftBracket</value>
+ <!-- Right Bracket Shape -->
+ <value>rightBracket</value>
+ <!-- Left Brace Shape -->
+ <value>leftBrace</value>
+ <!-- Right Brace Shape -->
+ <value>rightBrace</value>
+ <!-- Bracket Pair Shape -->
+ <value>bracketPair</value>
+ <!-- Brace Pair Shape -->
+ <value>bracePair</value>
+ <!-- Straight Connector 1 Shape -->
+ <value>straightConnector1</value>
+ <!-- Bent Connector 2 Shape -->
+ <value>bentConnector2</value>
+ <!-- Bent Connector 3 Shape -->
+ <value>bentConnector3</value>
+ <!-- Bent Connector 4 Shape -->
+ <value>bentConnector4</value>
+ <!-- Bent Connector 5 Shape -->
+ <value>bentConnector5</value>
+ <!-- Curved Connector 2 Shape -->
+ <value>curvedConnector2</value>
+ <!-- Curved Connector 3 Shape -->
+ <value>curvedConnector3</value>
+ <!-- Curved Connector 4 Shape -->
+ <value>curvedConnector4</value>
+ <!-- Curved Connector 5 Shape -->
+ <value>curvedConnector5</value>
+ <!-- Callout 1 Shape -->
+ <value>callout1</value>
+ <!-- Callout 2 Shape -->
+ <value>callout2</value>
+ <!-- Callout 3 Shape -->
+ <value>callout3</value>
+ <!-- Callout 1 Shape -->
+ <value>accentCallout1</value>
+ <!-- Callout 2 Shape -->
+ <value>accentCallout2</value>
+ <!-- Callout 3 Shape -->
+ <value>accentCallout3</value>
+ <!-- Callout 1 with Border Shape -->
+ <value>borderCallout1</value>
+ <!-- Callout 2 with Border Shape -->
+ <value>borderCallout2</value>
+ <!-- Callout 3 with Border Shape -->
+ <value>borderCallout3</value>
+ <!-- Callout 1 with Border and Accent Shape -->
+ <value>accentBorderCallout1</value>
+ <!-- Callout 2 with Border and Accent Shape -->
+ <value>accentBorderCallout2</value>
+ <!-- Callout 3 with Border and Accent Shape -->
+ <value>accentBorderCallout3</value>
+ <!-- Callout Wedge Rectangle Shape -->
+ <value>wedgeRectCallout</value>
+ <!-- Callout Wedge Round Rectangle Shape -->
+ <value>wedgeRoundRectCallout</value>
+ <!-- Callout Wedge Ellipse Shape -->
+ <value>wedgeEllipseCallout</value>
+ <!-- Callout Cloud Shape -->
+ <value>cloudCallout</value>
+ <!-- Cloud Shape -->
+ <value>cloud</value>
+ <!-- Ribbon Shape -->
+ <value>ribbon</value>
+ <!-- Ribbon 2 Shape -->
+ <value>ribbon2</value>
+ <!-- Ellipse Ribbon Shape -->
+ <value>ellipseRibbon</value>
+ <!-- Ellipse Ribbon 2 Shape -->
+ <value>ellipseRibbon2</value>
+ <!-- Left Right Ribbon Shape -->
+ <value>leftRightRibbon</value>
+ <!-- Vertical Scroll Shape -->
+ <value>verticalScroll</value>
+ <!-- Horizontal Scroll Shape -->
+ <value>horizontalScroll</value>
+ <!-- Wave Shape -->
+ <value>wave</value>
+ <!-- Double Wave Shape -->
+ <value>doubleWave</value>
+ <!-- Plus Shape -->
+ <value>plus</value>
+ <!-- Process Flow Shape -->
+ <value>flowChartProcess</value>
+ <!-- Decision Flow Shape -->
+ <value>flowChartDecision</value>
+ <!-- Input Output Flow Shape -->
+ <value>flowChartInputOutput</value>
+ <!-- Predefined Process Flow Shape -->
+ <value>flowChartPredefinedProcess</value>
+ <!-- Internal Storage Flow Shape -->
+ <value>flowChartInternalStorage</value>
+ <!-- Document Flow Shape -->
+ <value>flowChartDocument</value>
+ <!-- Multi-Document Flow Shape -->
+ <value>flowChartMultidocument</value>
+ <!-- Terminator Flow Shape -->
+ <value>flowChartTerminator</value>
+ <!-- Preparation Flow Shape -->
+ <value>flowChartPreparation</value>
+ <!-- Manual Input Flow Shape -->
+ <value>flowChartManualInput</value>
+ <!-- Manual Operation Flow Shape -->
+ <value>flowChartManualOperation</value>
+ <!-- Connector Flow Shape -->
+ <value>flowChartConnector</value>
+ <!-- Punched Card Flow Shape -->
+ <value>flowChartPunchedCard</value>
+ <!-- Punched Tape Flow Shape -->
+ <value>flowChartPunchedTape</value>
+ <!-- Summing Junction Flow Shape -->
+ <value>flowChartSummingJunction</value>
+ <!-- Or Flow Shape -->
+ <value>flowChartOr</value>
+ <!-- Collate Flow Shape -->
+ <value>flowChartCollate</value>
+ <!-- Sort Flow Shape -->
+ <value>flowChartSort</value>
+ <!-- Extract Flow Shape -->
+ <value>flowChartExtract</value>
+ <!-- Merge Flow Shape -->
+ <value>flowChartMerge</value>
+ <!-- Offline Storage Flow Shape -->
+ <value>flowChartOfflineStorage</value>
+ <!-- Online Storage Flow Shape -->
+ <value>flowChartOnlineStorage</value>
+ <!-- Magnetic Tape Flow Shape -->
+ <value>flowChartMagneticTape</value>
+ <!-- Magnetic Disk Flow Shape -->
+ <value>flowChartMagneticDisk</value>
+ <!-- Magnetic Drum Flow Shape -->
+ <value>flowChartMagneticDrum</value>
+ <!-- Display Flow Shape -->
+ <value>flowChartDisplay</value>
+ <!-- Delay Flow Shape -->
+ <value>flowChartDelay</value>
+ <!-- Alternate Process Flow Shape -->
+ <value>flowChartAlternateProcess</value>
+ <!-- Off-Page Connector Flow Shape -->
+ <value>flowChartOffpageConnector</value>
+ <!-- Blank Button Shape -->
+ <value>actionButtonBlank</value>
+ <!-- Home Button Shape -->
+ <value>actionButtonHome</value>
+ <!-- Help Button Shape -->
+ <value>actionButtonHelp</value>
+ <!-- Information Button Shape -->
+ <value>actionButtonInformation</value>
+ <!-- Forward or Next Button Shape -->
+ <value>actionButtonForwardNext</value>
+ <!-- Back or Previous Button Shape -->
+ <value>actionButtonBackPrevious</value>
+ <!-- End Button Shape -->
+ <value>actionButtonEnd</value>
+ <!-- Beginning Button Shape -->
+ <value>actionButtonBeginning</value>
+ <!-- Return Button Shape -->
+ <value>actionButtonReturn</value>
+ <!-- Document Button Shape -->
+ <value>actionButtonDocument</value>
+ <!-- Sound Button Shape -->
+ <value>actionButtonSound</value>
+ <!-- Movie Button Shape -->
+ <value>actionButtonMovie</value>
+ <!-- Gear 6 Shape -->
+ <value>gear6</value>
+ <!-- Gear 9 Shape -->
+ <value>gear9</value>
+ <!-- Funnel Shape -->
+ <value>funnel</value>
+ <!-- Plus Math Shape -->
+ <value>mathPlus</value>
+ <!-- Minus Math Shape -->
+ <value>mathMinus</value>
+ <!-- Multiply Math Shape -->
+ <value>mathMultiply</value>
+ <!-- Divide Math Shape -->
+ <value>mathDivide</value>
+ <!-- Equal Math Shape -->
+ <value>mathEqual</value>
+ <!-- Not Equal Math Shape -->
+ <value>mathNotEqual</value>
+ <!-- Corner Tabs Shape -->
+ <value>cornerTabs</value>
+ <!-- Square Tabs Shape -->
+ <value>squareTabs</value>
+ <!-- Plaque Tabs Shape -->
+ <value>plaqueTabs</value>
+ <!-- Chart X Shape -->
+ <value>chartX</value>
+ <!-- Chart Star Shape -->
+ <value>chartStar</value>
+ <!-- Chart Plus Shape -->
+ <value>chartPlus</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_TextShapeType">
+ <list>
+ <xs:documentation>Preset Text Shape Types</xs:documentation>
+ <choice>
+ <!-- No Text Shape -->
+ <value>textNoShape</value>
+ <!-- Plain Text Shape -->
+ <value>textPlain</value>
+ <!-- Stop Sign Text Shape -->
+ <value>textStop</value>
+ <!-- Triangle Text Shape -->
+ <value>textTriangle</value>
+ <!-- Inverted Triangle Text Shape -->
+ <value>textTriangleInverted</value>
+ <!-- Chevron Text Shape -->
+ <value>textChevron</value>
+ <!-- Inverted Chevron Text Shape -->
+ <value>textChevronInverted</value>
+ <!-- Inside Ring Text Shape -->
+ <value>textRingInside</value>
+ <!-- Outside Ring Text Shape -->
+ <value>textRingOutside</value>
+ <!-- Upward Arch Text Shape -->
+ <value>textArchUp</value>
+ <!-- Downward Arch Text Shape -->
+ <value>textArchDown</value>
+ <!-- Circle Text Shape -->
+ <value>textCircle</value>
+ <!-- Button Text Shape -->
+ <value>textButton</value>
+ <!-- Upward Pour Arch Text Shape -->
+ <value>textArchUpPour</value>
+ <!-- Downward Pour Arch Text Shape -->
+ <value>textArchDownPour</value>
+ <!-- Circle Pour Text Shape -->
+ <value>textCirclePour</value>
+ <!-- Button Pour Text Shape -->
+ <value>textButtonPour</value>
+ <!-- Upward Curve Text Shape -->
+ <value>textCurveUp</value>
+ <!-- Downward Curve Text Shape -->
+ <value>textCurveDown</value>
+ <!-- Upward Can Text Shape -->
+ <value>textCanUp</value>
+ <!-- Downward Can Text Shape -->
+ <value>textCanDown</value>
+ <!-- Wave 1 Text Shape -->
+ <value>textWave1</value>
+ <!-- Wave 2 Text Shape -->
+ <value>textWave2</value>
+ <!-- Double Wave 1 Text Shape -->
+ <value>textDoubleWave1</value>
+ <!-- Wave 4 Text Shape -->
+ <value>textWave4</value>
+ <!-- Inflate Text Shape -->
+ <value>textInflate</value>
+ <!-- Deflate Text Shape -->
+ <value>textDeflate</value>
+ <!-- Bottom Inflate Text Shape -->
+ <value>textInflateBottom</value>
+ <!-- Bottom Deflate Text Shape -->
+ <value>textDeflateBottom</value>
+ <!-- Top Inflate Text Shape -->
+ <value>textInflateTop</value>
+ <!-- Top Deflate Text Shape -->
+ <value>textDeflateTop</value>
+ <!-- Deflate-Inflate Text Shape -->
+ <value>textDeflateInflate</value>
+ <!-- Deflate-Inflate-Deflate Text Shape -->
+ <value>textDeflateInflateDeflate</value>
+ <!-- Right Fade Text Shape -->
+ <value>textFadeRight</value>
+ <!-- Left Fade Text Shape -->
+ <value>textFadeLeft</value>
+ <!-- Upward Fade Text Shape -->
+ <value>textFadeUp</value>
+ <!-- Downward Fade Text Shape -->
+ <value>textFadeDown</value>
+ <!-- Upward Slant Text Shape -->
+ <value>textSlantUp</value>
+ <!-- Downward Slant Text Shape -->
+ <value>textSlantDown</value>
+ <!-- Upward Cascade Text Shape -->
+ <value>textCascadeUp</value>
+ <!-- Downward Cascade Text Shape -->
+ <value>textCascadeDown</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_GeomGuideName">
+ <data type="token">
+ <xs:documentation>Geometry Guide Name Properties</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_GeomGuideFormula">
+ <data type="string">
+ <xs:documentation>Geometry Guide Formula Properties</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_GeomGuide">
+ <attribute name="name">
+ <ref name="ST_GeomGuideName"/>
+ <xs:documentation>Shape Guide Name</xs:documentation>
+ </attribute>
+ <attribute name="fmla">
+ <ref name="ST_GeomGuideFormula"/>
+ <xs:documentation>Shape Guide Formula</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_GeomGuideList">
+ <zeroOrMore>
+ <element name="gd">
+ <ref name="CT_GeomGuide"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="ST_AdjCoordinate">
+ <choice>
+ <ref name="ST_Coordinate"/>
+ <ref name="ST_GeomGuideName"/>
+ </choice>
+ </define>
+ <!-- Union -->
+ <define name="ST_AdjAngle">
+ <choice>
+ <ref name="ST_Angle"/>
+ <ref name="ST_GeomGuideName"/>
+ </choice>
+ </define>
+ <!-- Union -->
+ <define name="CT_AdjPoint2D">
+ <attribute name="x">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>X-Coordinate</xs:documentation>
+ </attribute>
+ <attribute name="y">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Y-Coordinate</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_GeomRect">
+ <attribute name="l">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Left</xs:documentation>
+ </attribute>
+ <attribute name="t">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Top</xs:documentation>
+ </attribute>
+ <attribute name="r">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Right</xs:documentation>
+ </attribute>
+ <attribute name="b">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Bottom Position</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_XYAdjustHandle">
+ <element name="pos">
+ <ref name="CT_AdjPoint2D"/>
+ </element>
+ <optional>
+ <attribute name="gdRefX">
+ <ref name="ST_GeomGuideName"/>
+ <xs:documentation>Horizontal Adjustment Guide</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="minX">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Minimum Horizontal Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="maxX">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Maximum Horizontal Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="gdRefY">
+ <ref name="ST_GeomGuideName"/>
+ <xs:documentation>Vertical Adjustment Guide</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="minY">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Minimum Vertical Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="maxY">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Maximum Vertical Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_PolarAdjustHandle">
+ <element name="pos">
+ <ref name="CT_AdjPoint2D"/>
+ </element>
+ <optional>
+ <attribute name="gdRefR">
+ <ref name="ST_GeomGuideName"/>
+ <xs:documentation>Radial Adjustment Guide</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="minR">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Minimum Radial Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="maxR">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Maximum Radial Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="gdRefAng">
+ <ref name="ST_GeomGuideName"/>
+ <xs:documentation>Angle Adjustment Guide</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="minAng">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Minimum Angle Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="maxAng">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Maximum Angle Adjustment</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_ConnectionSite">
+ <element name="pos">
+ <ref name="CT_AdjPoint2D"/>
+ </element>
+ <attribute name="ang">
+ <ref name="ST_AdjAngle"/>
+ <xs:documentation>Connection Site Angle</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_AdjustHandleList">
+ <zeroOrMore>
+ <choice>
+ <element name="ahXY">
+ <ref name="CT_XYAdjustHandle"/>
+ </element>
+ <element name="ahPolar">
+ <ref name="CT_PolarAdjustHandle"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ </define>
+ <define name="CT_ConnectionSiteList">
+ <zeroOrMore>
+ <element name="cxn">
+ <ref name="CT_ConnectionSite"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_Connection">
+ <attribute name="id">
+ <ref name="ST_DrawingElementId"/>
+ <xs:documentation>Identifier</xs:documentation>
+ </attribute>
+ <attribute name="idx">
+ <data type="unsignedInt">
+ <xs:documentation>Index</xs:documentation>
+ </data>
+ <xs:documentation>Index</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Path2DMoveTo">
+ <element name="pt">
+ <ref name="CT_AdjPoint2D"/>
+ </element>
+ </define>
+ <define name="CT_Path2DLineTo">
+ <element name="pt">
+ <ref name="CT_AdjPoint2D"/>
+ </element>
+ </define>
+ <define name="CT_Path2DArcTo">
+ <attribute name="wR">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Shape Arc Width Radius</xs:documentation>
+ </attribute>
+ <attribute name="hR">
+ <ref name="ST_AdjCoordinate"/>
+ <xs:documentation>Shape Arc Height Radius</xs:documentation>
+ </attribute>
+ <attribute name="stAng">
+ <ref name="ST_AdjAngle"/>
+ <xs:documentation>Shape Arc Start Angle</xs:documentation>
+ </attribute>
+ <attribute name="swAng">
+ <ref name="ST_AdjAngle"/>
+ <xs:documentation>Shape Arc Swing Angle</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Path2DQuadBezierTo">
+ <oneOrMore>
+ <element name="pt">
+ <ref name="CT_AdjPoint2D"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_Path2DCubicBezierTo">
+ <oneOrMore>
+ <element name="pt">
+ <ref name="CT_AdjPoint2D"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_Path2DClose">
+ <empty/>
+ </define>
+ <define name="ST_PathFillMode">
+ <list>
+ <xs:documentation>Path Fill Mode</xs:documentation>
+ <choice>
+ <!-- No Path Fill -->
+ <value>none</value>
+ <!-- Normal Path Fill -->
+ <value>norm</value>
+ <!-- Lighten Path Fill -->
+ <value>lighten</value>
+ <!-- Lighten Path Fill Less -->
+ <value>lightenLess</value>
+ <!-- Darken Path Fill -->
+ <value>darken</value>
+ <!-- Darken Path Fill Less -->
+ <value>darkenLess</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Path2D">
+ <zeroOrMore>
+ <choice>
+ <element name="close">
+ <ref name="CT_Path2DClose"/>
+ </element>
+ <element name="moveTo">
+ <ref name="CT_Path2DMoveTo"/>
+ </element>
+ <element name="lnTo">
+ <ref name="CT_Path2DLineTo"/>
+ </element>
+ <element name="arcTo">
+ <ref name="CT_Path2DArcTo"/>
+ </element>
+ <element name="quadBezTo">
+ <ref name="CT_Path2DQuadBezierTo"/>
+ </element>
+ <element name="cubicBezTo">
+ <ref name="CT_Path2DCubicBezierTo"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ <optional>
+ <attribute name="w">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Path Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="h">
+ <ref name="ST_PositiveCoordinate"/>
+ <xs:documentation>Path Height</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fill">
+ <ref name="ST_PathFillMode"/>
+ <xs:documentation>Path Fill</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="stroke">
+ <data type="boolean">
+ <xs:documentation>Path Stroke</xs:documentation>
+ </data>
+ <xs:documentation>Path Stroke</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="extrusionOk">
+ <data type="boolean">
+ <xs:documentation>3D Extrusion Allowed</xs:documentation>
+ </data>
+ <xs:documentation>3D Extrusion Allowed</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Path2DList">
+ <zeroOrMore>
+ <element name="path">
+ <ref name="CT_Path2D"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_PresetGeometry2D">
+ <optional>
+ <element name="avLst">
+ <ref name="CT_GeomGuideList"/>
+ </element>
+ </optional>
+ <attribute name="prst">
+ <ref name="ST_ShapeType"/>
+ <xs:documentation>Preset Shape</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_PresetTextShape">
+ <optional>
+ <element name="avLst">
+ <ref name="CT_GeomGuideList"/>
+ </element>
+ </optional>
+ <attribute name="prst">
+ <ref name="ST_TextShapeType"/>
+ <xs:documentation>Preset Warp Shape</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomGeometry2D">
+ <optional>
+ <element name="avLst">
+ <ref name="CT_GeomGuideList"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="gdLst">
+ <ref name="CT_GeomGuideList"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ahLst">
+ <ref name="CT_AdjustHandleList"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cxnLst">
+ <ref name="CT_ConnectionSiteList"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rect">
+ <ref name="CT_GeomRect"/>
+ </element>
+ </optional>
+ <element name="pathLst">
+ <ref name="CT_Path2DList"/>
+ </element>
+ </define>
+ <define name="EG_Geometry">
+ <choice>
+ <element name="custGeom">
+ <ref name="CT_CustomGeometry2D"/>
+ </element>
+ <element name="prstGeom">
+ <ref name="CT_PresetGeometry2D"/>
+ </element>
+ </choice>
+ </define>
+ <define name="EG_TextGeometry">
+ <choice>
+ <element name="custGeom">
+ <ref name="CT_CustomGeometry2D"/>
+ </element>
+ <element name="prstTxWarp">
+ <ref name="CT_PresetTextShape"/>
+ </element>
+ </choice>
+ </define>
+ </grammar>
+ <resource name="ST_ShapeType" resource="List">
+ <value tokenid="ooxml:Value_ST_ShapeType_line">line</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_lineInv">lineInv</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_triangle">triangle</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_rtTriangle">rtTriangle</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_rect">rect</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_diamond">diamond</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_parallelogram">parallelogram</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_trapezoid">trapezoid</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_nonIsoscelesTrapezoid">nonIsoscelesTrapezoid</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_pentagon">pentagon</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_hexagon">hexagon</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_heptagon">heptagon</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_octagon">octagon</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_decagon">decagon</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_dodecagon">dodecagon</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_star4">star4</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_star5">star5</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_star6">star6</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_star7">star7</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_star8">star8</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_star10">star10</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_star12">star12</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_star16">star16</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_star24">star24</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_star32">star32</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_roundRect">roundRect</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_round1Rect">round1Rect</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_round2SameRect">round2SameRect</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_round2DiagRect">round2DiagRect</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_snipRoundRect">snipRoundRect</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_snip1Rect">snip1Rect</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_snip2SameRect">snip2SameRect</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_snip2DiagRect">snip2DiagRect</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_plaque">plaque</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_ellipse">ellipse</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_teardrop">teardrop</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_homePlate">homePlate</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_chevron">chevron</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_pieWedge">pieWedge</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_pie">pie</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_blockArc">blockArc</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_donut">donut</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_noSmoking">noSmoking</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_rightArrow">rightArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_leftArrow">leftArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_upArrow">upArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_downArrow">downArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_stripedRightArrow">stripedRightArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_notchedRightArrow">notchedRightArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_bentUpArrow">bentUpArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_leftRightArrow">leftRightArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_upDownArrow">upDownArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_leftUpArrow">leftUpArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_leftRightUpArrow">leftRightUpArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_quadArrow">quadArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_leftArrowCallout">leftArrowCallout</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_rightArrowCallout">rightArrowCallout</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_upArrowCallout">upArrowCallout</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_downArrowCallout">downArrowCallout</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_leftRightArrowCallout">leftRightArrowCallout</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_upDownArrowCallout">upDownArrowCallout</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_quadArrowCallout">quadArrowCallout</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_bentArrow">bentArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_uturnArrow">uturnArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_circularArrow">circularArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_leftCircularArrow">leftCircularArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_leftRightCircularArrow">leftRightCircularArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_curvedRightArrow">curvedRightArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_curvedLeftArrow">curvedLeftArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_curvedUpArrow">curvedUpArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_curvedDownArrow">curvedDownArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_swooshArrow">swooshArrow</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_cube">cube</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_can">can</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_lightningBolt">lightningBolt</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_heart">heart</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_sun">sun</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_moon">moon</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_smileyFace">smileyFace</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_irregularSeal1">irregularSeal1</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_irregularSeal2">irregularSeal2</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_foldedCorner">foldedCorner</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_bevel">bevel</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_frame">frame</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_halfFrame">halfFrame</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_corner">corner</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_diagStripe">diagStripe</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_chord">chord</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_arc">arc</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_leftBracket">leftBracket</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_rightBracket">rightBracket</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_leftBrace">leftBrace</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_rightBrace">rightBrace</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_bracketPair">bracketPair</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_bracePair">bracePair</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_straightConnector1">straightConnector1</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_bentConnector2">bentConnector2</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_bentConnector3">bentConnector3</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_bentConnector4">bentConnector4</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_bentConnector5">bentConnector5</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_curvedConnector2">curvedConnector2</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_curvedConnector3">curvedConnector3</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_curvedConnector4">curvedConnector4</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_curvedConnector5">curvedConnector5</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_callout1">callout1</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_callout2">callout2</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_callout3">callout3</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_accentCallout1">accentCallout1</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_accentCallout2">accentCallout2</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_accentCallout3">accentCallout3</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_borderCallout1">borderCallout1</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_borderCallout2">borderCallout2</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_borderCallout3">borderCallout3</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_accentBorderCallout1">accentBorderCallout1</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_accentBorderCallout2">accentBorderCallout2</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_accentBorderCallout3">accentBorderCallout3</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_wedgeRectCallout">wedgeRectCallout</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_wedgeRoundRectCallout">wedgeRoundRectCallout</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_wedgeEllipseCallout">wedgeEllipseCallout</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_cloudCallout">cloudCallout</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_cloud">cloud</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_ribbon">ribbon</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_ribbon2">ribbon2</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_ellipseRibbon">ellipseRibbon</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_ellipseRibbon2">ellipseRibbon2</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_leftRightRibbon">leftRightRibbon</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_verticalScroll">verticalScroll</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_horizontalScroll">horizontalScroll</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_wave">wave</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_doubleWave">doubleWave</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_plus">plus</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartProcess">flowChartProcess</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartDecision">flowChartDecision</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartInputOutput">flowChartInputOutput</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartPredefinedProcess">flowChartPredefinedProcess</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartInternalStorage">flowChartInternalStorage</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartDocument">flowChartDocument</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartMultidocument">flowChartMultidocument</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartTerminator">flowChartTerminator</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartPreparation">flowChartPreparation</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartManualInput">flowChartManualInput</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartManualOperation">flowChartManualOperation</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartConnector">flowChartConnector</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartPunchedCard">flowChartPunchedCard</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartPunchedTape">flowChartPunchedTape</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartSummingJunction">flowChartSummingJunction</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartOr">flowChartOr</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartCollate">flowChartCollate</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartSort">flowChartSort</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartExtract">flowChartExtract</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartMerge">flowChartMerge</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartOfflineStorage">flowChartOfflineStorage</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartOnlineStorage">flowChartOnlineStorage</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartMagneticTape">flowChartMagneticTape</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartMagneticDisk">flowChartMagneticDisk</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartMagneticDrum">flowChartMagneticDrum</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartDisplay">flowChartDisplay</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartDelay">flowChartDelay</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartAlternateProcess">flowChartAlternateProcess</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_flowChartOffpageConnector">flowChartOffpageConnector</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_actionButtonBlank">actionButtonBlank</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_actionButtonHome">actionButtonHome</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_actionButtonHelp">actionButtonHelp</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_actionButtonInformation">actionButtonInformation</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_actionButtonForwardNext">actionButtonForwardNext</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_actionButtonBackPrevious">actionButtonBackPrevious</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_actionButtonEnd">actionButtonEnd</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_actionButtonBeginning">actionButtonBeginning</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_actionButtonReturn">actionButtonReturn</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_actionButtonDocument">actionButtonDocument</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_actionButtonSound">actionButtonSound</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_actionButtonMovie">actionButtonMovie</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_gear6">gear6</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_gear9">gear9</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_funnel">funnel</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_mathPlus">mathPlus</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_mathMinus">mathMinus</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_mathMultiply">mathMultiply</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_mathDivide">mathDivide</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_mathEqual">mathEqual</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_mathNotEqual">mathNotEqual</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_cornerTabs">cornerTabs</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_squareTabs">squareTabs</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_plaqueTabs">plaqueTabs</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_chartX">chartX</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_chartStar">chartStar</value>
+ <value tokenid="ooxml:Value_ST_ShapeType_chartPlus">chartPlus</value>
+ </resource>
+ <resource name="ST_TextShapeType" resource="List" generated="yes">
+ <value name="textNoShape" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textNoShape">textNoShape</value>
+ <value name="textPlain" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textPlain">textPlain</value>
+ <value name="textStop" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textStop">textStop</value>
+ <value name="textTriangle" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textTriangle">textTriangle</value>
+ <value name="textTriangleInverted" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textTriangleInverted">textTriangleInverted</value>
+ <value name="textChevron" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textChevron">textChevron</value>
+ <value name="textChevronInverted" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textChevronInverted">textChevronInverted</value>
+ <value name="textRingInside" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textRingInside">textRingInside</value>
+ <value name="textRingOutside" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textRingOutside">textRingOutside</value>
+ <value name="textArchUp" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchUp">textArchUp</value>
+ <value name="textArchDown" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchDown">textArchDown</value>
+ <value name="textCircle" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCircle">textCircle</value>
+ <value name="textButton" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textButton">textButton</value>
+ <value name="textArchUpPour" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchUpPour">textArchUpPour</value>
+ <value name="textArchDownPour" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textArchDownPour">textArchDownPour</value>
+ <value name="textCirclePour" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCirclePour">textCirclePour</value>
+ <value name="textButtonPour" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textButtonPour">textButtonPour</value>
+ <value name="textCurveUp" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCurveUp">textCurveUp</value>
+ <value name="textCurveDown" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCurveDown">textCurveDown</value>
+ <value name="textCanUp" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCanUp">textCanUp</value>
+ <value name="textCanDown" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCanDown">textCanDown</value>
+ <value name="textWave1" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textWave1">textWave1</value>
+ <value name="textWave2" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textWave2">textWave2</value>
+ <value name="textDoubleWave1" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDoubleWave1">textDoubleWave1</value>
+ <value name="textWave4" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textWave4">textWave4</value>
+ <value name="textInflate" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textInflate">textInflate</value>
+ <value name="textDeflate" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflate">textDeflate</value>
+ <value name="textInflateBottom" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textInflateBottom">textInflateBottom</value>
+ <value name="textDeflateBottom" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateBottom">textDeflateBottom</value>
+ <value name="textInflateTop" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textInflateTop">textInflateTop</value>
+ <value name="textDeflateTop" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateTop">textDeflateTop</value>
+ <value name="textDeflateInflate" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateInflate">textDeflateInflate</value>
+ <value name="textDeflateInflateDeflate" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textDeflateInflateDeflate">textDeflateInflateDeflate</value>
+ <value name="textFadeRight" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeRight">textFadeRight</value>
+ <value name="textFadeLeft" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeLeft">textFadeLeft</value>
+ <value name="textFadeUp" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeUp">textFadeUp</value>
+ <value name="textFadeDown" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textFadeDown">textFadeDown</value>
+ <value name="textSlantUp" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textSlantUp">textSlantUp</value>
+ <value name="textSlantDown" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textSlantDown">textSlantDown</value>
+ <value name="textCascadeUp" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCascadeUp">textCascadeUp</value>
+ <value name="textCascadeDown" tokenid="ooxml:Value_drawingml_ST_TextShapeType_textCascadeDown">textCascadeDown</value>
+ </resource>
+ <resource name="ST_GeomGuideName" resource="String" generated="yes"/>
+ <resource name="ST_GeomGuideFormula" resource="String" generated="yes"/>
+ <resource name="CT_GeomGuideList" resource="Properties" tag="shape">
+ <element name="gd" tokenid="ooxml:CT_GeomGuideList_gd"/>
+ </resource>
+ <resource name="ST_PathFillMode" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_drawingml_ST_PathFillMode_none">none</value>
+ <value name="norm" tokenid="ooxml:Value_drawingml_ST_PathFillMode_norm">norm</value>
+ <value name="lighten" tokenid="ooxml:Value_drawingml_ST_PathFillMode_lighten">lighten</value>
+ <value name="lightenLess" tokenid="ooxml:Value_drawingml_ST_PathFillMode_lightenLess">lightenLess</value>
+ <value name="darken" tokenid="ooxml:Value_drawingml_ST_PathFillMode_darken">darken</value>
+ <value name="darkenLess" tokenid="ooxml:Value_drawingml_ST_PathFillMode_darkenLess">darkenLess</value>
+ </resource>
+ <resource name="CT_PresetGeometry2D" resource="Properties" tag="shape">
+ <element name="avLst" tokenid="ooxml:CT_PresetGeometry2D_avLst"/>
+ <attribute name="prst" tokenid="ooxml:CT_PresetGeometry2D_prst"/>
+ </resource>
+ <resource name="CT_CustomGeometry2D" resource="Properties" tag="shape">
+ <element name="avLst" tokenid="ooxml:CT_CustomGeometry2D_avLst"/>
+ <element name="gdLst" tokenid="ooxml:CT_CustomGeometry2D_gdLst"/>
+ <element name="ahLst" tokenid="ooxml:CT_CustomGeometry2D_ahLst"/>
+ <element name="cxnLst" tokenid="ooxml:CT_CustomGeometry2D_cxnLst"/>
+ <element name="rect" tokenid="ooxml:CT_CustomGeometry2D_rect"/>
+ <element name="pathLst" tokenid="ooxml:CT_CustomGeometry2D_pathLst"/>
+ </resource>
+ <resource name="EG_Geometry" resource="Properties" tag="shape">
+ <element name="custGeom" tokenid="ooxml:EG_Geometry_custGeom"/>
+ <element name="prstGeom" tokenid="ooxml:EG_Geometry_prstGeom"/>
+ </resource>
+ </namespace>
+ <namespace name="dml-wordprocessingDrawing" file="dml-wordprocessingDrawing.rng">
+ <start name="inline"/>
+ <start name="anchor"/>
+ <grammar xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-graphicalObject.rng"/>
+ <include href="dml-documentProperties.rng"/>
+ <!-- start = inline | anchor -->
+ <define name="CT_EffectExtent">
+ <attribute name="l">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Additional Extent on Left Edge</xs:documentation>
+ </attribute>
+ <attribute name="t">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Additional Extent on Top Edge</xs:documentation>
+ </attribute>
+ <attribute name="r">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Additional Extent on Right Edge</xs:documentation>
+ </attribute>
+ <attribute name="b">
+ <ref name="ST_Coordinate"/>
+ <xs:documentation>Additional Extent on Bottom Edge</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_WrapDistance">
+ <data type="unsignedInt">
+ <xs:documentation>Distance from Text</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_Inline">
+ <group>
+ <element name="extent">
+ <ref name="CT_PositiveSize2D"/>
+ </element>
+ <optional>
+ <element name="effectExtent">
+ <ref name="CT_EffectExtent"/>
+ </element>
+ </optional>
+ <element name="docPr">
+ <ref name="CT_NonVisualDrawingProps"/>
+ </element>
+ <optional>
+ <element name="cNvGraphicFramePr">
+ <ref name="CT_NonVisualGraphicFrameProperties"/>
+ </element>
+ </optional>
+ <element name="a:graphic">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </group>
+ <optional>
+ <attribute name="distT">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Top Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distB">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Bottom Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distL">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Left Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distR">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Right Edge</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_WrapText">
+ <list>
+ <xs:documentation>Text Wrapping Location</xs:documentation>
+ <choice>
+ <!-- Both Sides -->
+ <value>bothSides</value>
+ <!-- Left Side Only -->
+ <value>left</value>
+ <!-- Right Side Only -->
+ <value>right</value>
+ <!-- Largest Side Only -->
+ <value>largest</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_WrapPath">
+ <group>
+ <element name="start">
+ <ref name="CT_Point2D"/>
+ </element>
+ <oneOrMore>
+ <element name="lineTo">
+ <ref name="CT_Point2D"/>
+ </element>
+ </oneOrMore>
+ </group>
+ <optional>
+ <attribute name="edited">
+ <data type="boolean">
+ <xs:documentation>Wrapping Points Modified</xs:documentation>
+ </data>
+ <xs:documentation>Wrapping Points Modified</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_WrapNone">
+ <empty/>
+ </define>
+ <define name="CT_WrapSquare">
+ <optional>
+ <element name="effectExtent">
+ <ref name="CT_EffectExtent"/>
+ </element>
+ </optional>
+ <attribute name="wrapText">
+ <ref name="ST_WrapText"/>
+ <xs:documentation>Text Wrapping Location</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="distT">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text (Top)</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distB">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Bottom Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distL">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Left Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distR">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Right Edge</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_WrapTight">
+ <element name="wrapPolygon">
+ <ref name="CT_WrapPath"/>
+ </element>
+ <attribute name="wrapText">
+ <ref name="ST_WrapText"/>
+ <xs:documentation>Text Wrapping Location</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="distL">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Test on Left Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distR">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Right Edge</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_WrapThrough">
+ <element name="wrapPolygon">
+ <ref name="CT_WrapPath"/>
+ </element>
+ <attribute name="wrapText">
+ <ref name="ST_WrapText"/>
+ <xs:documentation>Text Wrapping Location</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="distL">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Left Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distR">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Right Edge</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_WrapTopBottom">
+ <optional>
+ <element name="effectExtent">
+ <ref name="CT_EffectExtent"/>
+ </element>
+ </optional>
+ <optional>
+ <attribute name="distT">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Top Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distB">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Bottom Edge</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="EG_WrapType">
+ <choice>
+ <element name="wrapNone">
+ <ref name="CT_WrapNone"/>
+ </element>
+ <element name="wrapSquare">
+ <ref name="CT_WrapSquare"/>
+ </element>
+ <element name="wrapTight">
+ <ref name="CT_WrapTight"/>
+ </element>
+ <element name="wrapThrough">
+ <ref name="CT_WrapThrough"/>
+ </element>
+ <element name="wrapTopAndBottom">
+ <ref name="CT_WrapTopBottom"/>
+ </element>
+ </choice>
+ </define>
+ <define name="CT_PositionOffset">
+ <ref name="ST_PositionOffset"/>
+ </define>
+ <define name="ST_PositionOffset">
+ <data type="int">
+ <xs:documentation>Absolute Position Offset Value</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_AlignH">
+ <ref name="ST_AlignH"/>
+ </define>
+ <define name="ST_AlignH">
+ <list>
+ <xs:documentation>Relative Horizontal Alignment Positions</xs:documentation>
+ <choice>
+ <!-- Left Alignment -->
+ <value>left</value>
+ <!-- Right Alignment -->
+ <value>right</value>
+ <!-- Center Alignment -->
+ <value>center</value>
+ <!-- Inside -->
+ <value>inside</value>
+ <!-- Outside -->
+ <value>outside</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_RelFromH">
+ <list>
+ <xs:documentation>Horizontal Relative Positioning</xs:documentation>
+ <choice>
+ <!-- Page Margin -->
+ <value>margin</value>
+ <!-- Page Edge -->
+ <value>page</value>
+ <!-- Column -->
+ <value>column</value>
+ <!-- Character -->
+ <value>character</value>
+ <!-- Left Margin -->
+ <value>leftMargin</value>
+ <!-- Right Margin -->
+ <value>rightMargin</value>
+ <!-- Inside Margin -->
+ <value>insideMargin</value>
+ <!-- Outside Margin -->
+ <value>outsideMargin</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PosH">
+ <choice>
+ <element name="align">
+ <ref name="CT_AlignH"/>
+ </element>
+ <element name="posOffset">
+ <ref name="CT_PositionOffset"/>
+ </element>
+ </choice>
+ <attribute name="relativeFrom">
+ <ref name="ST_RelFromH"/>
+ <xs:documentation>Horizontal Position Relative Base</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_AlignV">
+ <ref name="ST_AlignV"/>
+ </define>
+ <define name="ST_AlignV">
+ <list>
+ <xs:documentation>Vertical Alignment Definition</xs:documentation>
+ <choice>
+ <!-- Top -->
+ <value>top</value>
+ <!-- Bottom -->
+ <value>bottom</value>
+ <!-- Center Alignment -->
+ <value>center</value>
+ <!-- Inside -->
+ <value>inside</value>
+ <!-- Outside -->
+ <value>outside</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_RelFromV">
+ <list>
+ <xs:documentation>Vertical Relative Positioning</xs:documentation>
+ <choice>
+ <!-- Page Margin -->
+ <value>margin</value>
+ <!-- Page Edge -->
+ <value>page</value>
+ <!-- Paragraph -->
+ <value>paragraph</value>
+ <!-- Line -->
+ <value>line</value>
+ <!-- Top Margin -->
+ <value>topMargin</value>
+ <!-- Bottom Margin -->
+ <value>bottomMargin</value>
+ <!-- Inside Margin -->
+ <value>insideMargin</value>
+ <!-- Outside Margin -->
+ <value>outsideMargin</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PosV">
+ <choice>
+ <element name="align">
+ <ref name="CT_AlignV"/>
+ </element>
+ <element name="posOffset">
+ <ref name="CT_PositionOffset"/>
+ </element>
+ </choice>
+ <attribute name="relativeFrom">
+ <ref name="ST_RelFromV"/>
+ <xs:documentation>Vertical Position Relative Base</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Anchor">
+ <group>
+ <element name="simplePos">
+ <ref name="CT_Point2D"/>
+ </element>
+ <element name="positionH">
+ <ref name="CT_PosH"/>
+ </element>
+ <element name="positionV">
+ <ref name="CT_PosV"/>
+ </element>
+ <element name="extent">
+ <ref name="CT_PositiveSize2D"/>
+ </element>
+ <optional>
+ <element name="effectExtent">
+ <ref name="CT_EffectExtent"/>
+ </element>
+ </optional>
+ <ref name="EG_WrapType"/>
+ <element name="docPr">
+ <ref name="CT_NonVisualDrawingProps"/>
+ </element>
+ <optional>
+ <element name="cNvGraphicFramePr">
+ <ref name="CT_NonVisualGraphicFrameProperties"/>
+ </element>
+ </optional>
+ <element name="a:graphic">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </group>
+ <optional>
+ <attribute name="distT">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Top Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distB">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Bottom Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distL">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Left Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distR">
+ <ref name="ST_WrapDistance"/>
+ <xs:documentation>Distance From Text on Right Edge</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="simplePos">
+ <data type="boolean">
+ <xs:documentation>Page Positioning</xs:documentation>
+ </data>
+ <xs:documentation>Page Positioning</xs:documentation>
+ </attribute>
+ <attribute name="relativeHeight">
+ <data type="unsignedInt">
+ <xs:documentation>Relative Z-Ordering Position</xs:documentation>
+ </data>
+ <xs:documentation>Relative Z-Ordering Position</xs:documentation>
+ </attribute>
+ <attribute name="behindDoc">
+ <data type="boolean">
+ <xs:documentation>Display Behind Document Text</xs:documentation>
+ </data>
+ <xs:documentation>Display Behind Document Text</xs:documentation>
+ </attribute>
+ <attribute name="locked">
+ <data type="boolean">
+ <xs:documentation>Lock Anchor</xs:documentation>
+ </data>
+ <xs:documentation>Lock Anchor</xs:documentation>
+ </attribute>
+ <attribute name="layoutInCell">
+ <data type="boolean">
+ <xs:documentation>Layout In Table Cell</xs:documentation>
+ </data>
+ <xs:documentation>Layout In Table Cell</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="hidden">
+ <data type="boolean">
+ <xs:documentation>Hidden</xs:documentation>
+ </data>
+ <xs:documentation>Hidden</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="allowOverlap">
+ <data type="boolean">
+ <xs:documentation>Allow Objects to Overlap</xs:documentation>
+ </data>
+ <xs:documentation>Allow Objects to Overlap</xs:documentation>
+ </attribute>
+ </define>
+ <define name="inline">
+ <element name="inline">
+ <ref name="CT_Inline"/>
+ </element>
+ </define>
+ <define name="anchor">
+ <element name="anchor">
+ <ref name="CT_Anchor"/>
+ </element>
+ </define>
+ </grammar>
+ <resource name="CT_EffectExtent" resource="Properties" tag="shape">
+ <attribute name="l" tokenid="ooxml:CT_EffectExtent_l"/>
+ <attribute name="t" tokenid="ooxml:CT_EffectExtent_t"/>
+ <attribute name="r" tokenid="ooxml:CT_EffectExtent_r"/>
+ <attribute name="b" tokenid="ooxml:CT_EffectExtent_b"/>
+ </resource>
+ <resource name="ST_WrapDistance" resource="Integer" generated="yes"/>
+ <resource xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="CT_Inline" resource="Properties" tag="shape">
+ <element name="extent" tokenid="ooxml:CT_Inline_extent"/>
+ <element name="effectExtent" tokenid="ooxml:CT_Inline_effectExtent"/>
+ <element name="docPr" tokenid="ooxml:CT_Inline_docPr"/>
+ <element name="cNvGraphicFramePr" tokenid="ooxml:CT_Inline_cNvGraphicFramePr"/>
+ <element name="a:graphic" tokenid="ooxml:CT_Inline_a_graphic"/>
+ <attribute name="distT" tokenid="ooxml:CT_Inline_distT"/>
+ <attribute name="distB" tokenid="ooxml:CT_Inline_distB"/>
+ <attribute name="distL" tokenid="ooxml:CT_Inline_distL"/>
+ <attribute name="distR" tokenid="ooxml:CT_Inline_distR"/>
+ </resource>
+ <resource name="ST_WrapText" resource="List" generated="yes">
+ <value name="bothSides" tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_bothSides">bothSides</value>
+ <value name="left" tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_left">left</value>
+ <value name="right" tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_right">right</value>
+ <value name="largest" tokenid="ooxml:Value_wordprocessingDrawing_ST_WrapText_largest">largest</value>
+ </resource>
+ <resource name="CT_WrapPath" resource="Properties" tag="shape">
+ <element name="start" tokenid="ooxml:CT_WrapPath_start"/>
+ <element name="lineTo" tokenid="ooxml:CT_WrapPath_lineTo"/>
+ <attribute name="edited" tokenid="ooxml:CT_WrapPath_edited"/>
+ </resource>
+ <resource name="CT_WrapNone" resource="Properties" tag="shape"/>
+ <resource name="CT_WrapSquare" resource="Properties" tag="shape">
+ <element name="effectExtent" tokenid="ooxml:CT_WrapSquare_effectExtent"/>
+ <attribute name="wrapText" tokenid="ooxml:CT_WrapSquare_wrapText"/>
+ <attribute name="distT" tokenid="ooxml:CT_WrapSquare_distT"/>
+ <attribute name="distB" tokenid="ooxml:CT_WrapSquare_distB"/>
+ <attribute name="distL" tokenid="ooxml:CT_WrapSquare_distL"/>
+ <attribute name="distR" tokenid="ooxml:CT_WrapSquare_distR"/>
+ </resource>
+ <resource name="CT_WrapTight" resource="Properties" tag="shape">
+ <element name="wrapPolygon" tokenid="ooxml:CT_WrapTight_wrapPolygon"/>
+ <attribute name="wrapText" tokenid="ooxml:CT_WrapTight_wrapText"/>
+ <attribute name="distL" tokenid="ooxml:CT_WrapTight_distL"/>
+ <attribute name="distR" tokenid="ooxml:CT_WrapTight_distR"/>
+ </resource>
+ <resource name="CT_WrapThrough" resource="Properties" tag="shape">
+ <element name="wrapPolygon" tokenid="ooxml:CT_WrapThrough_wrapPolygon"/>
+ <attribute name="wrapText" tokenid="ooxml:CT_WrapThrough_wrapText"/>
+ <attribute name="distL" tokenid="ooxml:CT_WrapThrough_distL"/>
+ <attribute name="distR" tokenid="ooxml:CT_WrapThrough_distR"/>
+ </resource>
+ <resource name="CT_WrapTopBottom" resource="Properties" tag="shape">
+ <element name="effectExtent" tokenid="ooxml:CT_WrapTopBottom_effectExtent"/>
+ <attribute name="distT" tokenid="ooxml:CT_WrapTopBottom_distT"/>
+ <attribute name="distB" tokenid="ooxml:CT_WrapTopBottom_distB"/>
+ </resource>
+ <resource name="EG_WrapType" resource="Properties" tag="shape">
+ <element name="wrapNone" tokenid="ooxml:EG_WrapType_wrapNone"/>
+ <element name="wrapSquare" tokenid="ooxml:EG_WrapType_wrapSquare"/>
+ <element name="wrapTight" tokenid="ooxml:EG_WrapType_wrapTight"/>
+ <element name="wrapThrough" tokenid="ooxml:EG_WrapType_wrapThrough"/>
+ <element name="wrapTopAndBottom" tokenid="ooxml:EG_WrapType_wrapTopAndBottom"/>
+ </resource>
+ <resource name="CT_PositionOffset" resource="Value" tag="shape"/>
+ <resource name="ST_PositionOffset" resource="Integer" generated="yes"/>
+ <resource name="CT_AlignH" resource="Value" tag="shape"/>
+ <resource name="ST_AlignH" resource="List" generated="yes" tag="shape">
+ <value name="left" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignH_left">left</value>
+ <value name="right" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignH_right">right</value>
+ <value name="center" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignH_center">center</value>
+ <value name="inside" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignH_inside">inside</value>
+ <value name="outside" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignH_outside">outside</value>
+ </resource>
+ <resource name="ST_RelFromH" resource="List" generated="yes">
+ <value name="margin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_margin">margin</value>
+ <value name="page" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_page">page</value>
+ <value name="column" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_column">column</value>
+ <value name="character" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_character">character</value>
+ <value name="leftMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_leftMargin">leftMargin</value>
+ <value name="rightMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_rightMargin">rightMargin</value>
+ <value name="insideMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_insideMargin">insideMargin</value>
+ <value name="outsideMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromH_outsideMargin">outsideMargin</value>
+ </resource>
+ <resource name="CT_PosH" resource="Properties" tag="shape">
+ <element name="align" tokenid="ooxml:CT_PosH_align"/>
+ <element name="posOffset" tokenid="ooxml:CT_PosH_posOffset"/>
+ <attribute name="relativeFrom" tokenid="ooxml:CT_PosH_relativeFrom"/>
+ </resource>
+ <resource name="CT_AlignV" resource="Value" tag="shape"/>
+ <resource name="ST_AlignV" resource="List" generated="yes">
+ <value name="top" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignV_top">top</value>
+ <value name="bottom" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignV_bottom">bottom</value>
+ <value name="center" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignV_center">center</value>
+ <value name="inside" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignV_inside">inside</value>
+ <value name="outside" tokenid="ooxml:Value_wordprocessingDrawing_ST_AlignV_outside">outside</value>
+ </resource>
+ <resource name="ST_RelFromV" resource="List" generated="yes">
+ <value name="margin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_margin">margin</value>
+ <value name="page" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_page">page</value>
+ <value name="paragraph" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_paragraph">paragraph</value>
+ <value name="line" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_line">line</value>
+ <value name="topMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_topMargin">topMargin</value>
+ <value name="bottomMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_bottomMargin">bottomMargin</value>
+ <value name="insideMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_insideMargin">insideMargin</value>
+ <value name="outsideMargin" tokenid="ooxml:Value_wordprocessingDrawing_ST_RelFromV_outsideMargin">outsideMargin</value>
+ </resource>
+ <resource name="CT_PosV" resource="Properties" tag="shape">
+ <element name="align" tokenid="ooxml:CT_PosV_align"/>
+ <element name="posOffset" tokenid="ooxml:CT_PosV_posOffset"/>
+ <attribute name="relativeFrom" tokenid="ooxml:CT_PosV_relativeFrom"/>
+ </resource>
+ <resource xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="CT_Anchor" resource="Properties" tag="shape">
+ <element name="simplePos" tokenid="ooxml:CT_Anchor_simplePos_elem"/>
+ <element name="positionH" tokenid="ooxml:CT_Anchor_positionH"/>
+ <element name="positionV" tokenid="ooxml:CT_Anchor_positionV"/>
+ <element name="extent" tokenid="ooxml:CT_Anchor_extent"/>
+ <element name="effectExtent" tokenid="ooxml:CT_Anchor_effectExtent"/>
+ <element name="docPr" tokenid="ooxml:CT_Anchor_docPr"/>
+ <element name="cNvGraphicFramePr" tokenid="ooxml:CT_Anchor_cNvGraphicFramePr"/>
+ <element name="a:graphic" tokenid="ooxml:CT_Anchor_a_graphic"/>
+ <attribute name="distT" tokenid="ooxml:CT_Anchor_distT"/>
+ <attribute name="distB" tokenid="ooxml:CT_Anchor_distB"/>
+ <attribute name="distL" tokenid="ooxml:CT_Anchor_distL"/>
+ <attribute name="distR" tokenid="ooxml:CT_Anchor_distR"/>
+ <attribute name="simplePos" tokenid="ooxml:CT_Anchor_simplePos_attr"/>
+ <attribute name="relativeHeight" tokenid="ooxml:CT_Anchor_relativeHeight"/>
+ <attribute name="behindDoc" tokenid="ooxml:CT_Anchor_behindDoc"/>
+ <attribute name="locked" tokenid="ooxml:CT_Anchor_locked"/>
+ <attribute name="layoutInCell" tokenid="ooxml:CT_Anchor_layoutInCell"/>
+ <attribute name="hidden" tokenid="ooxml:CT_Anchor_hidden"/>
+ <attribute name="allowOverlap" tokenid="ooxml:CT_Anchor_allowOverlap"/>
+ </resource>
+ <resource name="inline" resource="Properties" tag="shape">
+ <element name="inline" tokenid="ooxml:inline_inline"/>
+ </resource>
+ <resource name="anchor" resource="Properties" tag="shape">
+ <element name="anchor" tokenid="ooxml:anchor_anchor"/>
+ </resource>
+ </namespace>
+ <namespace name="sml-customXmlMappings" file="sml-customXmlMappings-rng">
+ <start name="schemaLibrary"/>
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/schemaLibrary/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- ISO RELAX NG Schema -->
+ <!-- start = schemaLibrary -->
+ <define name="CT_Schema">
+ <attribute name="uri">
+ <data type="string">
+ <xs:documentation>Custom XML Schema Namespace</xs:documentation>
+ </data>
+ <xs:documentation>Custom XML Schema Namespace</xs:documentation>
+ </attribute>
+ <attribute name="manifestLocation">
+ <data type="string">
+ <xs:documentation>Resource File Location</xs:documentation>
+ </data>
+ <xs:documentation>Resource File Location</xs:documentation>
+ </attribute>
+ <attribute name="schemaLocation">
+ <data type="string">
+ <xs:documentation>Custom XML Schema Location</xs:documentation>
+ </data>
+ <xs:documentation>Custom XML Schema Location</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SchemaLibrary">
+ <zeroOrMore>
+ <element name="schema">
+ <ref name="CT_Schema"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="schemaLibrary">
+ <element name="schemaLibrary">
+ <ref name="CT_SchemaLibrary"/>
+ </element>
+ </define>
+ </grammar>
+ </namespace>
+ <namespace name="shared-math" file="shared-math.rng">
+ <start name="mathPar"/>
+ <start name="oMathPara"/>
+ <start name="oMath"/>
+ <grammar xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/officeDocument/2006/math" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" attributeFormDefault="qualified">
+ <!-- ISO RELAX NG Schema -->
+ <include href="wml.rng"/>
+ <!-- start = mathPr | oMathPara | oMath -->
+ <define name="ST_Integer255">
+ <data type="integer">
+ <xs:documentation>Integer value (1 to 255)</xs:documentation>
+ <param name="minInclusive">1</param>
+ <param name="maxInclusive">255</param>
+ </data>
+ </define>
+ <define name="CT_Integer255">
+ <attribute name="val">
+ <ref name="ST_Integer255"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Integer2">
+ <data type="integer">
+ <xs:documentation>Integer value (-2 to 2)</xs:documentation>
+ <param name="minInclusive">-2</param>
+ <param name="maxInclusive">2</param>
+ </data>
+ </define>
+ <define name="CT_Integer2">
+ <attribute name="val">
+ <ref name="ST_Integer2"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_SpacingRule">
+ <data type="integer">
+ <xs:documentation>Spacing Rule</xs:documentation>
+ <param name="minInclusive">0</param>
+ <param name="maxInclusive">4</param>
+ </data>
+ </define>
+ <define name="CT_SpacingRule">
+ <attribute name="val">
+ <ref name="ST_SpacingRule"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_UnSignedInteger">
+ <data type="unsignedInt">
+ <xs:documentation>Unsigned integer.</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_UnSignedInteger">
+ <attribute name="val">
+ <ref name="ST_UnSignedInteger"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Char">
+ <data type="string">
+ <xs:documentation>Character</xs:documentation>
+ <param name="maxLength">1</param>
+ </data>
+ </define>
+ <define name="CT_Char">
+ <attribute name="val">
+ <ref name="ST_Char"/>
+ <xs:documentation>value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_OnOff">
+ <list>
+ <xs:documentation>On Off</xs:documentation>
+ <choice>
+ <!-- On -->
+ <value>on</value>
+ <!-- Off -->
+ <value>off</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_OnOff">
+ <attribute name="val">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_String">
+ <data type="string">
+ <xs:documentation>String</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_String">
+ <attribute name="val">
+ <ref name="ST_String"/>
+ <xs:documentation>value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_XAlign">
+ <list>
+ <xs:documentation>Horizontal Alignment</xs:documentation>
+ <choice>
+ <!-- Left Justification -->
+ <value>left</value>
+ <!-- Center -->
+ <value>center</value>
+ <!-- Right -->
+ <value>right</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_XAlign">
+ <attribute name="val">
+ <ref name="ST_XAlign"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_YAlign">
+ <list>
+ <xs:documentation>Vertical Alignment</xs:documentation>
+ <choice>
+ <!-- Top -->
+ <value>top</value>
+ <!-- Center (Function) -->
+ <value>center</value>
+ <!-- Bottom Alignment -->
+ <value>bot</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_YAlign">
+ <attribute name="val">
+ <ref name="ST_YAlign"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Shp">
+ <list>
+ <xs:documentation>Shape (Delimiters)</xs:documentation>
+ <choice>
+ <!-- Centered (Delimiters) -->
+ <value>centered</value>
+ <!-- Match -->
+ <value>match</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Shp">
+ <attribute name="val">
+ <ref name="ST_Shp"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_FType">
+ <list>
+ <xs:documentation>Fraction Type</xs:documentation>
+ <choice>
+ <!-- Bar Fraction -->
+ <value>bar</value>
+ <!-- Skewed -->
+ <value>skw</value>
+ <!-- Linear Fraction -->
+ <value>lin</value>
+ <!-- No-Bar Fraction (Stack) -->
+ <value>noBar</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FType">
+ <attribute name="val">
+ <ref name="ST_FType"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_LimLoc">
+ <list>
+ <xs:documentation>Limit Location</xs:documentation>
+ <choice>
+ <!-- Under-Over location -->
+ <value>undOvr</value>
+ <!-- Subscript-Superscript location -->
+ <value>subSup</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_LimLoc">
+ <attribute name="val">
+ <ref name="ST_LimLoc"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TopBot">
+ <list>
+ <xs:documentation>Top-Bottom</xs:documentation>
+ <choice>
+ <!-- Top -->
+ <value>top</value>
+ <!-- Bottom Alignment -->
+ <value>bot</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TopBot">
+ <attribute name="val">
+ <ref name="ST_TopBot"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Script">
+ <list>
+ <xs:documentation>Script</xs:documentation>
+ <choice>
+ <!-- Roman -->
+ <value>roman</value>
+ <!-- Script -->
+ <value>script</value>
+ <!-- Fraktur -->
+ <value>fraktur</value>
+ <!-- double-struck -->
+ <value>double-struck</value>
+ <!-- Sans-Serif -->
+ <value>sans-serif</value>
+ <!-- Monospace -->
+ <value>monospace</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Script">
+ <attribute name="val">
+ <ref name="ST_Script"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Style">
+ <list>
+ <xs:documentation>Style</xs:documentation>
+ <choice>
+ <!-- Plain -->
+ <value>p</value>
+ <!-- Bold -->
+ <value>b</value>
+ <!-- Italic -->
+ <value>i</value>
+ <!-- Bold-Italic -->
+ <value>bi</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Style">
+ <attribute name="val">
+ <ref name="ST_Style"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_ManualBreak">
+ <attribute name="alnAt">
+ <ref name="ST_Integer255"/>
+ <xs:documentation>Index of Operator to Align To</xs:documentation>
+ </attribute>
+ </define>
+ <define name="EG_ScriptStyle">
+ <optional>
+ <element name="scr">
+ <ref name="CT_Script"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sty">
+ <ref name="CT_Style"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_RPR">
+ <optional>
+ <element name="lit">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <choice>
+ <optional>
+ <element name="nor">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <ref name="EG_ScriptStyle"/>
+ </choice>
+ <optional>
+ <element name="brk">
+ <ref name="CT_ManualBreak"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="aln">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Text">
+ <ref name="ST_String"/>
+ <optional>
+ <attribute name="xml:space">
+ <text/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_R">
+ <optional>
+ <element name="rPr">
+ <ref name="CT_RPR"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_RPr"/>
+ </optional>
+ <zeroOrMore>
+ <choice>
+ <ref name="EG_RunInnerContent"/>
+ <optional>
+ <element name="t">
+ <ref name="CT_Text"/>
+ </element>
+ </optional>
+ </choice>
+ </zeroOrMore>
+ </define>
+ <define name="CT_CtrlPr">
+ <optional>
+ <ref name="EG_RPrMath"/>
+ </optional>
+ </define>
+ <define name="CT_AccPr">
+ <optional>
+ <element name="chr">
+ <ref name="CT_Char"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Acc">
+ <optional>
+ <element name="accPr">
+ <ref name="CT_AccPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_BarPr">
+ <optional>
+ <element name="pos">
+ <ref name="CT_TopBot"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Bar">
+ <optional>
+ <element name="barPr">
+ <ref name="CT_BarPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_BoxPr">
+ <optional>
+ <element name="opEmu">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noBreak">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="diff">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="brk">
+ <ref name="CT_ManualBreak"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="aln">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Box">
+ <optional>
+ <element name="boxPr">
+ <ref name="CT_BoxPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_BorderBoxPr">
+ <optional>
+ <element name="hideTop">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hideBot">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hideLeft">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hideRight">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="strikeH">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="strikeV">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="strikeBLTR">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="strikeTLBR">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_BorderBox">
+ <optional>
+ <element name="borderBoxPr">
+ <ref name="CT_BorderBoxPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_DPr">
+ <optional>
+ <element name="begChr">
+ <ref name="CT_Char"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sepChr">
+ <ref name="CT_Char"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="endChr">
+ <ref name="CT_Char"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="grow">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shp">
+ <ref name="CT_Shp"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_D">
+ <optional>
+ <element name="dPr">
+ <ref name="CT_DPr"/>
+ </element>
+ </optional>
+ <oneOrMore>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_EqArrPr">
+ <optional>
+ <element name="baseJc">
+ <ref name="CT_YAlign"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="maxDist">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="objDist">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rSpRule">
+ <ref name="CT_SpacingRule"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rSp">
+ <ref name="CT_UnSignedInteger"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_EqArr">
+ <optional>
+ <element name="eqArrPr">
+ <ref name="CT_EqArrPr"/>
+ </element>
+ </optional>
+ <oneOrMore>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_FPr">
+ <optional>
+ <element name="type">
+ <ref name="CT_FType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_F">
+ <optional>
+ <element name="fPr">
+ <ref name="CT_FPr"/>
+ </element>
+ </optional>
+ <element name="num">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="den">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_FuncPr">
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Func">
+ <optional>
+ <element name="funcPr">
+ <ref name="CT_FuncPr"/>
+ </element>
+ </optional>
+ <element name="fName">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_GroupChrPr">
+ <optional>
+ <element name="chr">
+ <ref name="CT_Char"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pos">
+ <ref name="CT_TopBot"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="vertJc">
+ <ref name="CT_TopBot"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_GroupChr">
+ <optional>
+ <element name="groupChrPr">
+ <ref name="CT_GroupChrPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_LimLowPr">
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_LimLow">
+ <optional>
+ <element name="limLowPr">
+ <ref name="CT_LimLowPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="lim">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_LimUppPr">
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_LimUpp">
+ <optional>
+ <element name="limUppPr">
+ <ref name="CT_LimUppPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="lim">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_MCPr">
+ <optional>
+ <element name="count">
+ <ref name="CT_Integer255"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mcJc">
+ <ref name="CT_XAlign"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_MC">
+ <optional>
+ <element name="mcPr">
+ <ref name="CT_MCPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_MCS">
+ <oneOrMore>
+ <element name="mc">
+ <ref name="CT_MC"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_MPr">
+ <optional>
+ <element name="baseJc">
+ <ref name="CT_YAlign"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="plcHide">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rSpRule">
+ <ref name="CT_SpacingRule"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cGpRule">
+ <ref name="CT_SpacingRule"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rSp">
+ <ref name="CT_UnSignedInteger"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cSp">
+ <ref name="CT_UnSignedInteger"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cGp">
+ <ref name="CT_UnSignedInteger"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mcs">
+ <ref name="CT_MCS"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_MR">
+ <oneOrMore>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_M">
+ <optional>
+ <element name="mPr">
+ <ref name="CT_MPr"/>
+ </element>
+ </optional>
+ <oneOrMore>
+ <element name="mr">
+ <ref name="CT_MR"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_NaryPr">
+ <optional>
+ <element name="chr">
+ <ref name="CT_Char"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="limLoc">
+ <ref name="CT_LimLoc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="grow">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="subHide">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="supHide">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Nary">
+ <optional>
+ <element name="naryPr">
+ <ref name="CT_NaryPr"/>
+ </element>
+ </optional>
+ <element name="sub">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="sup">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_PhantPr">
+ <optional>
+ <element name="show">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="zeroWid">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="zeroAsc">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="zeroDesc">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="transp">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Phant">
+ <optional>
+ <element name="phantPr">
+ <ref name="CT_PhantPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_RadPr">
+ <optional>
+ <element name="degHide">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Rad">
+ <optional>
+ <element name="radPr">
+ <ref name="CT_RadPr"/>
+ </element>
+ </optional>
+ <element name="deg">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_SPrePr">
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SPre">
+ <optional>
+ <element name="sPrePr">
+ <ref name="CT_SPrePr"/>
+ </element>
+ </optional>
+ <element name="sub">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="sup">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_SSubPr">
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SSub">
+ <optional>
+ <element name="sSubPr">
+ <ref name="CT_SSubPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="sub">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_SSubSupPr">
+ <optional>
+ <element name="alnScr">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SSubSup">
+ <optional>
+ <element name="sSubSupPr">
+ <ref name="CT_SSubSupPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="sub">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="sup">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="CT_SSupPr">
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SSup">
+ <optional>
+ <element name="sSupPr">
+ <ref name="CT_SSupPr"/>
+ </element>
+ </optional>
+ <element name="e">
+ <ref name="CT_OMathArg"/>
+ </element>
+ <element name="sup">
+ <ref name="CT_OMathArg"/>
+ </element>
+ </define>
+ <define name="EG_OMathMathElements">
+ <choice>
+ <element name="acc">
+ <ref name="CT_Acc"/>
+ </element>
+ <element name="bar">
+ <ref name="CT_Bar"/>
+ </element>
+ <element name="box">
+ <ref name="CT_Box"/>
+ </element>
+ <element name="borderBox">
+ <ref name="CT_BorderBox"/>
+ </element>
+ <element name="d">
+ <ref name="CT_D"/>
+ </element>
+ <element name="eqArr">
+ <ref name="CT_EqArr"/>
+ </element>
+ <element name="f">
+ <ref name="CT_F"/>
+ </element>
+ <element name="func">
+ <ref name="CT_Func"/>
+ </element>
+ <element name="groupChr">
+ <ref name="CT_GroupChr"/>
+ </element>
+ <element name="limLow">
+ <ref name="CT_LimLow"/>
+ </element>
+ <element name="limUpp">
+ <ref name="CT_LimUpp"/>
+ </element>
+ <element name="m">
+ <ref name="CT_M"/>
+ </element>
+ <element name="nary">
+ <ref name="CT_Nary"/>
+ </element>
+ <element name="phant">
+ <ref name="CT_Phant"/>
+ </element>
+ <element name="rad">
+ <ref name="CT_Rad"/>
+ </element>
+ <element name="sPre">
+ <ref name="CT_SPre"/>
+ </element>
+ <element name="sSub">
+ <ref name="CT_SSub"/>
+ </element>
+ <element name="sSubSup">
+ <ref name="CT_SSubSup"/>
+ </element>
+ <element name="sSup">
+ <ref name="CT_SSup"/>
+ </element>
+ <element name="r">
+ <ref name="CT_R"/>
+ </element>
+ </choice>
+ </define>
+ <define name="EG_OMathElements">
+ <choice>
+ <ref name="EG_OMathMathElements"/>
+ <ref name="EG_RunLevelElts"/>
+ </choice>
+ </define>
+ <define name="CT_OMathArgPr">
+ <optional>
+ <element name="argSz">
+ <ref name="CT_Integer2"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_OMathArg">
+ <optional>
+ <element name="argPr">
+ <ref name="CT_OMathArgPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_OMathElements"/>
+ </zeroOrMore>
+ <optional>
+ <element name="ctrlPr">
+ <ref name="CT_CtrlPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_Jc">
+ <list>
+ <xs:documentation>Justification</xs:documentation>
+ <choice>
+ <!-- Left Justification -->
+ <value>left</value>
+ <!-- Right -->
+ <value>right</value>
+ <!-- Center (Equation) -->
+ <value>center</value>
+ <!-- Centered as Group (Equations) -->
+ <value>centerGroup</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_OMathJc">
+ <attribute name="val">
+ <ref name="ST_Jc"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_OMathParaPr">
+ <optional>
+ <element name="jc">
+ <ref name="CT_OMathJc"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_TwipsMeasure">
+ <data type="unsignedInt">
+ <xs:documentation>Twips measurement</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_TwipsMeasure">
+ <attribute name="val">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_BreakBin">
+ <list>
+ <xs:documentation>Break Binary Operators</xs:documentation>
+ <choice>
+ <!-- Before -->
+ <value>before</value>
+ <!-- After -->
+ <value>after</value>
+ <!-- Repeat -->
+ <value>repeat</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_BreakBin">
+ <attribute name="val">
+ <ref name="ST_BreakBin"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_BreakBinSub">
+ <list>
+ <xs:documentation>Break on Binary Subtraction</xs:documentation>
+ <choice>
+ <!-- Minus Minus -->
+ <value>--</value>
+ <!-- Minus Plus -->
+ <value>-+</value>
+ <!-- Plus Minus -->
+ <value>+-</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_BreakBinSub">
+ <attribute name="val">
+ <ref name="ST_BreakBinSub"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_MathPr">
+ <optional>
+ <element name="mathFont">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="brkBin">
+ <ref name="CT_BreakBin"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="brkBinSub">
+ <ref name="CT_BreakBinSub"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="smallFrac">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dispDef">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lMargin">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rMargin">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="defJc">
+ <ref name="CT_OMathJc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="preSp">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="postSp">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="interSp">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="intraSp">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <choice>
+ <element name="wrapIndent">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ <element name="wrapRight">
+ <ref name="CT_OnOff"/>
+ </element>
+ </choice>
+ </optional>
+ <optional>
+ <element name="intLim">
+ <ref name="CT_LimLoc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="naryLim">
+ <ref name="CT_LimLoc"/>
+ </element>
+ </optional>
+ </define>
+ <define name="mathPr">
+ <element name="mathPr">
+ <ref name="CT_MathPr"/>
+ </element>
+ </define>
+ <define name="CT_OMathPara">
+ <optional>
+ <element name="oMathParaPr">
+ <ref name="CT_OMathParaPr"/>
+ </element>
+ </optional>
+ <oneOrMore>
+ <element name="oMath">
+ <ref name="CT_OMath"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_OMath">
+ <zeroOrMore>
+ <ref name="EG_OMathElements"/>
+ </zeroOrMore>
+ </define>
+ <define name="oMathPara">
+ <element name="oMathPara">
+ <ref name="CT_OMathPara"/>
+ </element>
+ </define>
+ <define name="oMath">
+ <element name="oMath">
+ <ref name="CT_OMath"/>
+ </element>
+ </define>
+ </grammar>
+ <resource name="ST_Integer255" resource="Integer" generated="yes"/>
+ <resource name="CT_Integer255" resource="Value" generated="yes" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_Integer255_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="ST_Integer2" resource="Integer" generated="yes"/>
+ <resource name="CT_Integer2" resource="Value" generated="yes" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_Integer2_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="ST_SpacingRule" resource="Integer" generated="yes"/>
+ <resource name="CT_SpacingRule" resource="Value" generated="yes" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_SpacingRule_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="ST_UnSignedInteger" resource="Integer" generated="yes"/>
+ <resource name="CT_UnSignedInteger" resource="Value" generated="yes" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_UnSignedInteger_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="ST_Char" resource="String" generated="yes"/>
+ <resource name="CT_Char" resource="Value" generated="yes" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_Char_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_OnOff" resource="List" generated="yes">
+ <value name="on" tokenid="ooxml:Value_math_ST_OnOff_on">on</value>
+ <value name="off" tokenid="ooxml:Value_math_ST_OnOff_off">off</value>
+ </resource>
+ <resource name="CT_OnOff" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_OnOff_val" action="setValue"/>
+ <action name="start" action="setDefaultBooleanValue"/>
+ </resource>
+ <resource name="ST_String" resource="String" generated="yes"/>
+ <resource name="CT_String" resource="Value" generated="yes" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_String_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_XAlign" resource="List" generated="yes">
+ <value name="left" tokenid="ooxml:Value_math_ST_XAlign_left">left</value>
+ <value name="center" tokenid="ooxml:Value_math_ST_XAlign_center">center</value>
+ <value name="right" tokenid="ooxml:Value_math_ST_XAlign_right">right</value>
+ </resource>
+ <resource name="CT_XAlign" resource="Value" generated="yes" tag="math">
+ <attribute name="val" tokenid="ooxml:CT_XAlign_val" action="setValue"/>
+ </resource>
+ <resource name="ST_YAlign" resource="List" generated="yes">
+ <value name="top" tokenid="ooxml:Value_math_ST_YAlign_top">top</value>
+ <value name="center" tokenid="ooxml:Value_math_ST_YAlign_center">center</value>
+ <value name="bot" tokenid="ooxml:Value_math_ST_YAlign_bot">bot</value>
+ </resource>
+ <resource name="CT_YAlign" resource="Value" generated="yes" tag="math">
+ <attribute name="val" tokenid="ooxml:CT_YAlign_val" action="setValue"/>
+ </resource>
+ <resource name="ST_Shp" resource="List" generated="yes">
+ <value name="centered" tokenid="ooxml:Value_math_ST_Shp_centered">centered</value>
+ <value name="match" tokenid="ooxml:Value_math_ST_Shp_match">match</value>
+ </resource>
+ <resource name="CT_Shp" resource="Value" generated="yes" tag="math">
+ <attribute name="val" tokenid="ooxml:CT_Shp_val" action="setValue"/>
+ </resource>
+ <resource name="ST_FType" resource="List" generated="yes">
+ <value name="bar" tokenid="ooxml:Value_math_ST_FType_bar">bar</value>
+ <value name="skw" tokenid="ooxml:Value_math_ST_FType_skw">skw</value>
+ <value name="lin" tokenid="ooxml:Value_math_ST_FType_lin">lin</value>
+ <value name="noBar" tokenid="ooxml:Value_math_ST_FType_noBar">noBar</value>
+ </resource>
+ <resource name="CT_FType" resource="Value" generated="yes" tag="math">
+ <attribute name="val" tokenid="ooxml:CT_FType_val" action="setValue"/>
+ </resource>
+ <resource name="ST_LimLoc" resource="List" generated="yes">
+ <value name="undOvr" tokenid="ooxml:Value_math_ST_LimLoc_undOvr">undOvr</value>
+ <value name="subSup" tokenid="ooxml:Value_math_ST_LimLoc_subSup">subSup</value>
+ </resource>
+ <resource name="CT_LimLoc" resource="Value" generated="yes" tag="math">
+ <attribute name="val" tokenid="ooxml:CT_LimLoc_val" action="setValue"/>
+ </resource>
+ <resource name="ST_TopBot" resource="List" generated="yes">
+ <value name="top" tokenid="ooxml:Value_math_ST_TopBot_top">top</value>
+ <value name="bot" tokenid="ooxml:Value_math_ST_TopBot_bot">bot</value>
+ </resource>
+ <resource name="CT_TopBot" resource="Value" generated="yes" tag="math">
+ <attribute name="val" tokenid="ooxml:CT_TopBot_val" action="setValue"/>
+ </resource>
+ <resource name="ST_Script" resource="List" generated="yes">
+ <value name="roman" tokenid="ooxml:Value_math_ST_Script_roman">roman</value>
+ <value name="script" tokenid="ooxml:Value_math_ST_Script_script">script</value>
+ <value name="fraktur" tokenid="ooxml:Value_math_ST_Script_fraktur">fraktur</value>
+ <value name="doublemstruck" tokenid="ooxml:Value_math_ST_Script_doublemstruck">double-struck</value>
+ <value name="sansmserif" tokenid="ooxml:Value_math_ST_Script_sansmserif">sans-serif</value>
+ <value name="monospace" tokenid="ooxml:Value_math_ST_Script_monospace">monospace</value>
+ </resource>
+ <resource name="CT_Script" resource="Value" generated="yes" tag="math">
+ <attribute name="val" tokenid="ooxml:CT_Script_val" action="setValue"/>
+ </resource>
+ <resource name="ST_Style" resource="List">
+ <value tokenid="ooxml:Value_ST_Style_b">b</value>
+ <value tokenid="ooxml:Value_ST_Style_bi">bi</value>
+ <value tokenid="ooxml:Value_ST_Style_i">i</value>
+ <value tokenid="ooxml:Value_ST_Style_p">p</value>
+ </resource>
+ <resource name="CT_Style" resource="Value" tag="math">
+ <attribute name="val" tokenid="ooxml:CT_Style_val" action="setValue"/>
+ </resource>
+ <resource name="ST_Jc" resource="List" generated="yes">
+ <value name="left" tokenid="ooxml:Value_math_ST_Jc_left">left</value>
+ <value name="right" tokenid="ooxml:Value_math_ST_Jc_right">right</value>
+ <value name="center" tokenid="ooxml:Value_math_ST_Jc_center">center</value>
+ <value name="centerGroup" tokenid="ooxml:Value_math_ST_Jc_centerGroup">centerGroup</value>
+ </resource>
+ <resource name="CT_OMathJc" resource="Value" generated="yes" tag="math">
+ <attribute name="val" tokenid="ooxml:CT_OMathJc_val" action="setValue"/>
+ </resource>
+ <resource name="ST_TwipsMeasure" resource="Integer" generated="yes"/>
+ <resource name="CT_TwipsMeasure" resource="Value" generated="yes" tag="math">
+ <attribute name="val" tokenid="ooxml:CT_TwipsMeasure_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="ST_BreakBin" resource="List" generated="yes">
+ <value name="before" tokenid="ooxml:Value_math_ST_BreakBin_before">before</value>
+ <value name="after" tokenid="ooxml:Value_math_ST_BreakBin_after">after</value>
+ <value name="repeat" tokenid="ooxml:Value_math_ST_BreakBin_repeat">repeat</value>
+ </resource>
+ <resource name="CT_BreakBin" resource="Value" generated="yes" tag="math">
+ <attribute name="val" tokenid="ooxml:CT_BreakBin_val" action="setValue"/>
+ </resource>
+ <resource name="ST_BreakBinSub" resource="List" generated="yes">
+ <value name="mm" tokenid="ooxml:Value_math_ST_BreakBinSub_mm">--</value>
+ <value name="mp" tokenid="ooxml:Value_math_ST_BreakBinSub_mp">-+</value>
+ <value name="pm" tokenid="ooxml:Value_math_ST_BreakBinSub_pm">+-</value>
+ </resource>
+ <resource name="CT_BreakBinSub" resource="Value" generated="yes" tag="math">
+ <attribute name="val" tokenid="ooxml:CT_BreakBinSub_val" action="setValue"/>
+ </resource>
+ </namespace>
+ <namespace name="shared-relationshipReference" file="shared-relationshipReference.rng">
+ <grammar xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" ns="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
+ <!-- ISO RELAX NG Schema -->
+ <define name="ST_RelationshipId">
+ <data type="string">
+ <xs:documentation>Explicit Relationship ID</xs:documentation>
+ </data>
+ </define>
+ <define name="id">
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Relationship ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="embed">
+ <attribute name="embed">
+ <text/>
+ <xs:documentation>Embedded Image Relationship Target</xs:documentation>
+ </attribute>
+ </define>
+ <define name="link">
+ <attribute name="link"/>
+ </define>
+ <define name="dm">
+ <attribute name="dm"/>
+ </define>
+ <define name="lo">
+ <attribute name="lo"/>
+ </define>
+ <define name="qs">
+ <attribute name="qs"/>
+ </define>
+ <define name="cs">
+ <attribute name="cs"/>
+ </define>
+ <define name="blip">
+ <attribute name="blip"/>
+ </define>
+ <define name="pict">
+ <attribute name="pict"/>
+ </define>
+ <define name="href">
+ <attribute name="href">
+ <text/>
+ <xs:documentation>Hyperlink Target Relationship ID</xs:documentation>
+ </attribute>
+ </define>
+ </grammar>
+ <resource name="ST_RelationshipId" resource="String" generated="yes"/>
+ </namespace>
+ <namespace name="dml-chartDrawing" file="dml-chartDrawing.rng">
+ <start name="pic"/>
+ <grammar xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/drawingml/2006/picture">
+ <!-- ISO RELAX NG Schema -->
+ <include href="dml-shapeProperties.rng"/>
+ <include href="dml-documentProperties.rng"/>
+ <!-- start = pic -->
+ <define name="CT_PictureNonVisual">
+ <element name="cNvPr">
+ <ref name="CT_NonVisualDrawingProps"/>
+ </element>
+ <element name="cNvPicPr">
+ <ref name="CT_NonVisualPictureProperties"/>
+ </element>
+ </define>
+ <define name="CT_Picture">
+ <element name="nvPicPr">
+ <ref name="CT_PictureNonVisual"/>
+ </element>
+ <element name="blipFill">
+ <ref name="CT_BlipFillProperties"/>
+ </element>
+ <element name="spPr">
+ <ref name="CT_ShapeProperties"/>
+ </element>
+ </define>
+ <define name="pic">
+ <element name="pic">
+ <ref name="CT_Picture"/>
+ </element>
+ </define>
+ </grammar>
+ <resource name="CT_PictureNonVisual" resource="Properties" tag="shape">
+ <element name="cNvPr" tokenid="ooxml:CT_PictureNonVisual_cNvPr"/>
+ <element name="cNvPicPr" tokenid="ooxml:CT_PictureNonVisual_cNvPicPr"/>
+ </resource>
+ <resource name="CT_Picture" resource="Shape" tag="shape">
+ <element name="nvPicPr" tokenid="ooxml:CT_Picture_nvPicPr"/>
+ <element name="blipFill" tokenid="ooxml:CT_Picture_blipFill"/>
+ <element name="spPr" tokenid="ooxml:CT_Picture_spPr"/>
+ </resource>
+ <resource name="pic" resource="Properties" tag="shape">
+ <element name="pic" tokenid="ooxml:pic_pic"/>
+ </resource>
+ </namespace>
+ <namespace name="vml-main" file="vml-main.rng" todo="ignore">
+ <start name="shape"/>
+ <start name="shapetype"/>
+ <start name="group"/>
+ <start name="background"/>
+ <start name="fill"/>
+ <start name="formulas"/>
+ <start name="handles"/>
+ <start name="imagedata"/>
+ <start name="path"/>
+ <start name="textbox"/>
+ <start name="shadow"/>
+ <start name="stroke"/>
+ <start name="textpath"/>
+ <start name="arc"/>
+ <start name="curve"/>
+ <start name="image"/>
+ <start name="line"/>
+ <start name="oval"/>
+ <start name="polyline"/>
+ <start name="rect"/>
+ <start name="roundrect"/>
+ <grammar xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:wvml="urn:schemas-microsoft-com:office:word" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:p="urn:schemas-microsoft-com:office:powerpoint" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="urn:schemas-microsoft-com:vml" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- ISO RELAX NG Schema -->
+ <include href="vml-officeDrawing.rng"/>
+ <!-- External schema: http://schemas.openxmlformats.org/wordprocessingml/2006/main -->
+ <include href="vml-wordprocessingDrawing.rng"/>
+ <!-- External schema: http://schemas.openxmlformats.org/officeDocument/2006/relationships -->
+ <include href="vml-spreadsheetDrawing.rng"/>
+ <include href="vml-presentationDrawing.rng"/>
+ <!-- start = shape | shapetype | group | background | fill | formulas | handles | imagedata | path | textbox | shadow | stroke | textpath | arc | curve | image | line | oval | polyline | rect | roundrect -->
+ <define name="AG_Id">
+ <optional>
+ <attribute name="id">
+ <data type="string">
+ <xs:documentation>Unique Identifier</xs:documentation>
+ </data>
+ <xs:documentation>Unique Identifier</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Style">
+ <optional>
+ <attribute name="style">
+ <data type="string">
+ <xs:documentation>Shape Styling Properties</xs:documentation>
+ </data>
+ <xs:documentation>Shape Styling Properties</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Type">
+ <optional>
+ <attribute name="type">
+ <data type="string">
+ <xs:documentation>Shape Type Reference</xs:documentation>
+ </data>
+ <xs:documentation>Shape Type Reference</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Adj">
+ <optional>
+ <attribute name="adj">
+ <data type="string">
+ <xs:documentation>Adjustment Parameters</xs:documentation>
+ </data>
+ <xs:documentation>Adjustment Parameters</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Path">
+ <optional>
+ <attribute name="path">
+ <data type="string">
+ <xs:documentation>Edge Path</xs:documentation>
+ </data>
+ <xs:documentation>Edge Path</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Fill">
+ <optional>
+ <attribute name="filled">
+ <text/>
+ <xs:documentation>Shape Fill Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fillcolor">
+ <text/>
+ <xs:documentation>Fill Color</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Chromakey">
+ <optional>
+ <attribute name="chromakey">
+ <text/>
+ <xs:documentation>Image Transparency Color</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_Ext">
+ <attribute name="ext">
+ <text/>
+ <xs:documentation>VML Extension Handling Behavior</xs:documentation>
+ </attribute>
+ </define>
+ <define name="AG_CoreAttributes">
+ <ref name="AG_Id"/>
+ <ref name="AG_Style"/>
+ <optional>
+ <attribute name="href">
+ <data type="string">
+ <xs:documentation>Hyperlink Target</xs:documentation>
+ </data>
+ <xs:documentation>Hyperlink Target</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="target">
+ <data type="string">
+ <xs:documentation>Hyperlink Display Target</xs:documentation>
+ </data>
+ <xs:documentation>Hyperlink Display Target</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="class">
+ <data type="string">
+ <xs:documentation>CSS Reference</xs:documentation>
+ </data>
+ <xs:documentation>CSS Reference</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="title">
+ <data type="string">
+ <xs:documentation>Shape Title</xs:documentation>
+ </data>
+ <xs:documentation>Shape Title</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="alt">
+ <data type="string">
+ <xs:documentation>Alternate Text</xs:documentation>
+ </data>
+ <xs:documentation>Alternate Text</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="coordsize">
+ <data type="string">
+ <xs:documentation>Coordinate Space Size</xs:documentation>
+ </data>
+ <xs:documentation>Coordinate Space Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="coordorigin">
+ <data type="string">
+ <xs:documentation>Coordinate Space Origin</xs:documentation>
+ </data>
+ <xs:documentation>Coordinate Space Origin</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="wrapcoords">
+ <data type="string">
+ <xs:documentation>Shape Bounding Polygon</xs:documentation>
+ </data>
+ <xs:documentation>Shape Bounding Polygon</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="print">
+ <text/>
+ <xs:documentation>Print Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_ShapeAttributes">
+ <ref name="AG_Chromakey"/>
+ <ref name="AG_Fill"/>
+ <optional>
+ <attribute name="opacity">
+ <data type="string">
+ <xs:documentation>Fill Color Opacity</xs:documentation>
+ </data>
+ <xs:documentation>Fill Color Opacity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="stroked">
+ <text/>
+ <xs:documentation>Shape Stroke Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="strokecolor">
+ <text/>
+ <xs:documentation>Shape Stroke Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="strokeweight">
+ <data type="string">
+ <xs:documentation>Shape Stroke Weight</xs:documentation>
+ </data>
+ <xs:documentation>Shape Stroke Weight</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="insetpen">
+ <text/>
+ <xs:documentation>Inset Border From Path</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_OfficeCoreAttributes">
+ <attribute name="o:spid"/>
+ <attribute name="o:oned"/>
+ <attribute name="o:regroupid"/>
+ <attribute name="o:doubleclicknotify"/>
+ <attribute name="o:button"/>
+ <attribute name="o:userhidden"/>
+ <attribute name="o:bullet"/>
+ <attribute name="o:hr"/>
+ <attribute name="o:hrstd"/>
+ <attribute name="o:hrnoshade"/>
+ <attribute name="o:hrpct"/>
+ <attribute name="o:hralign"/>
+ <attribute name="o:allowincell"/>
+ <attribute name="o:allowoverlap"/>
+ <attribute name="o:userdrawn"/>
+ <attribute name="o:bordertopcolor"/>
+ <attribute name="o:borderleftcolor"/>
+ <attribute name="o:borderbottomcolor"/>
+ <attribute name="o:borderrightcolor"/>
+ <attribute name="o:dgmlayout"/>
+ <attribute name="o:dgmnodekind"/>
+ <attribute name="o:dgmlayoutmru"/>
+ <attribute name="o:insetmode"/>
+ </define>
+ <define name="AG_OfficeShapeAttributes">
+ <attribute name="o:spt"/>
+ <attribute name="o:connectortype"/>
+ <attribute name="o:bwmode"/>
+ <attribute name="o:bwpure"/>
+ <attribute name="o:bwnormal"/>
+ <attribute name="o:forcedash"/>
+ <attribute name="o:oleicon"/>
+ <attribute name="o:ole"/>
+ <attribute name="o:preferrelative"/>
+ <attribute name="o:cliptowrap"/>
+ <attribute name="o:clip"/>
+ </define>
+ <define name="AG_AllCoreAttributes">
+ <ref name="AG_CoreAttributes"/>
+ <ref name="AG_OfficeCoreAttributes"/>
+ </define>
+ <define name="AG_AllShapeAttributes">
+ <ref name="AG_ShapeAttributes"/>
+ <ref name="AG_OfficeShapeAttributes"/>
+ </define>
+ <define name="AG_ImageAttributes">
+ <optional>
+ <attribute name="src">
+ <data type="string">
+ <xs:documentation>Image Source</xs:documentation>
+ </data>
+ <xs:documentation>Image Source</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cropleft">
+ <data type="string">
+ <xs:documentation>Image Left Crop</xs:documentation>
+ </data>
+ <xs:documentation>Image Left Crop</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="croptop">
+ <data type="string">
+ <xs:documentation>Image Top Crop</xs:documentation>
+ </data>
+ <xs:documentation>Image Top Crop</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cropright">
+ <data type="string">
+ <xs:documentation>Image Right Crop</xs:documentation>
+ </data>
+ <xs:documentation>Image Right Crop</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cropbottom">
+ <data type="string">
+ <xs:documentation>Image Bottom Crop</xs:documentation>
+ </data>
+ <xs:documentation>Image Bottom Crop</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="gain">
+ <data type="string">
+ <xs:documentation>Image Intensity</xs:documentation>
+ </data>
+ <xs:documentation>Image Intensity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="blacklevel">
+ <data type="string">
+ <xs:documentation>Image Brightness</xs:documentation>
+ </data>
+ <xs:documentation>Image Brightness</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="gamma">
+ <data type="string">
+ <xs:documentation>Image Gamma Correction</xs:documentation>
+ </data>
+ <xs:documentation>Image Gamma Correction</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="grayscale">
+ <text/>
+ <xs:documentation>Image Grayscale Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="bilevel">
+ <text/>
+ <xs:documentation>Image Bilevel Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="AG_StrokeAttributes">
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Stroke Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="weight">
+ <data type="string">
+ <xs:documentation>Stroke Weight</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Weight</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Stroke Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="opacity">
+ <data type="string">
+ <xs:documentation>Stroke Opacity</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Opacity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="linestyle">
+ <text/>
+ <xs:documentation>Stroke Line Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="miterlimit">
+ <data type="decimal">
+ <xs:documentation>Miter Joint Limit</xs:documentation>
+ </data>
+ <xs:documentation>Miter Joint Limit</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="joinstyle">
+ <text/>
+ <xs:documentation>Line End Join Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endcap">
+ <text/>
+ <xs:documentation>Line End Cap</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dashstyle">
+ <data type="string">
+ <xs:documentation>Stroke Dash Pattern</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Dash Pattern</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="filltype">
+ <text/>
+ <xs:documentation>Stroke Image Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="src">
+ <data type="string">
+ <xs:documentation>Stroke Image Location</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Image Location</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="imageaspect">
+ <text/>
+ <xs:documentation>Stroke Image Aspect Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="imagesize">
+ <data type="string">
+ <xs:documentation>Stroke Image Size</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Image Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="imagealignshape">
+ <text/>
+ <xs:documentation>Stoke Image Alignment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color2">
+ <text/>
+ <xs:documentation>Stroke Alternate Pattern Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="startarrow">
+ <text/>
+ <xs:documentation>Line Start Arrowhead</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="startarrowwidth">
+ <text/>
+ <xs:documentation>Line Start Arrowhead Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="startarrowlength">
+ <text/>
+ <xs:documentation>Line Start Arrowhead Length</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endarrow">
+ <text/>
+ <xs:documentation>Line End Arrowhead</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endarrowwidth">
+ <text/>
+ <xs:documentation>Line End Arrowhead Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endarrowlength">
+ <text/>
+ <xs:documentation>Line End Arrowhead Length</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="o:href"/>
+ <attribute name="o:althref"/>
+ <attribute name="o:title"/>
+ <attribute name="o:forcedash"/>
+ <optional>
+ <attribute name="r:id"/>
+ </optional>
+ <optional>
+ <attribute name="insetpen">
+ <text/>
+ <xs:documentation>Inset Border From Path</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="o:relid"/>
+ </define>
+ <define name="EG_ShapeElements">
+ <choice>
+ <ref name="path"/>
+ <ref name="formulas"/>
+ <ref name="handles"/>
+ <ref name="fill"/>
+ <ref name="stroke"/>
+ <ref name="shadow"/>
+ <ref name="textbox"/>
+ <ref name="textpath"/>
+ <ref name="imagedata"/>
+ <element name="o:skew">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <element name="o:extrusion">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <element name="o:callout">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <element name="o:lock">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <element name="o:clippath">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <element name="o:signatureline">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <element name="wvml:wrap">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <element name="wvml:anchorlock">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <element name="wvml:bordertop">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <element name="wvml:borderbottom">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <element name="wvml:borderleft">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <element name="wvml:borderright">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <optional>
+ <element name="x:ClientData">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="p:textdata">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ </choice>
+ </define>
+ <define name="shape">
+ <element name="shape">
+ <ref name="CT_Shape"/>
+ </element>
+ </define>
+ <define name="shapetype">
+ <element name="shapetype">
+ <ref name="CT_Shapetype"/>
+ </element>
+ </define>
+ <define name="group">
+ <element name="group">
+ <ref name="CT_Group"/>
+ </element>
+ </define>
+ <define name="background">
+ <element name="background">
+ <ref name="CT_Background"/>
+ </element>
+ </define>
+ <define name="CT_Shape">
+ <oneOrMore>
+ <choice>
+ <ref name="EG_ShapeElements"/>
+ <element name="o:ink">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <element name="p:iscomment">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </choice>
+ </oneOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <ref name="AG_Type"/>
+ <ref name="AG_Adj"/>
+ <ref name="AG_Path"/>
+ <attribute name="o:gfxdata"/>
+ <optional>
+ <attribute name="equationxml">
+ <data type="string">
+ <xs:documentation>Storage for Alternate Math Content</xs:documentation>
+ </data>
+ <xs:documentation>Storage for Alternate Math Content</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Shapetype">
+ <group>
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ <optional>
+ <element name="o:complex">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ </group>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <ref name="AG_Adj"/>
+ <ref name="AG_Path"/>
+ <attribute name="o:master"/>
+ </define>
+ <define name="CT_Group">
+ <oneOrMore>
+ <choice>
+ <ref name="EG_ShapeElements"/>
+ <ref name="group"/>
+ <ref name="shape"/>
+ <ref name="shapetype"/>
+ <ref name="arc"/>
+ <ref name="curve"/>
+ <ref name="image"/>
+ <ref name="line"/>
+ <ref name="oval"/>
+ <ref name="polyline"/>
+ <ref name="rect"/>
+ <ref name="roundrect"/>
+ <element name="o:diagram">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </choice>
+ </oneOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_Fill"/>
+ <optional>
+ <attribute name="editas">
+ <text/>
+ <xs:documentation>Group Diagram Type</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="o:tableproperties"/>
+ <attribute name="o:tablelimits"/>
+ </define>
+ <define name="CT_Background">
+ <optional>
+ <ref name="fill"/>
+ </optional>
+ <ref name="AG_Id"/>
+ <ref name="AG_Fill"/>
+ <attribute name="o:bwmode"/>
+ <attribute name="o:bwpure"/>
+ <attribute name="o:bwnormal"/>
+ <attribute name="o:targetscreensize"/>
+ </define>
+ <define name="fill">
+ <element name="fill">
+ <ref name="CT_Fill"/>
+ </element>
+ </define>
+ <define name="formulas">
+ <element name="formulas">
+ <ref name="CT_Formulas"/>
+ </element>
+ </define>
+ <define name="handles">
+ <element name="handles">
+ <ref name="CT_Handles"/>
+ </element>
+ </define>
+ <define name="imagedata">
+ <element name="imagedata">
+ <ref name="CT_ImageData"/>
+ </element>
+ </define>
+ <define name="path">
+ <element name="path">
+ <ref name="CT_Path"/>
+ </element>
+ </define>
+ <define name="textbox">
+ <element name="textbox">
+ <ref name="CT_Textbox"/>
+ </element>
+ </define>
+ <define name="shadow">
+ <element name="shadow">
+ <ref name="CT_Shadow"/>
+ </element>
+ </define>
+ <define name="stroke">
+ <element name="stroke">
+ <ref name="CT_Stroke"/>
+ </element>
+ </define>
+ <define name="textpath">
+ <element name="textpath">
+ <ref name="CT_TextPath"/>
+ </element>
+ </define>
+ <define name="CT_Fill">
+ <optional>
+ <element name="o:fill">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <ref name="AG_Id"/>
+ <optional>
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Fill Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Fill Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Primary Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="opacity">
+ <data type="string">
+ <xs:documentation>Primary Color Opacity</xs:documentation>
+ </data>
+ <xs:documentation>Primary Color Opacity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color2">
+ <text/>
+ <xs:documentation>Secondary Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="src">
+ <data type="string">
+ <xs:documentation>Fill Image Source</xs:documentation>
+ </data>
+ <xs:documentation>Fill Image Source</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="o:href"/>
+ <attribute name="o:althref"/>
+ <optional>
+ <attribute name="size">
+ <data type="string">
+ <xs:documentation>Fill Image Size</xs:documentation>
+ </data>
+ <xs:documentation>Fill Image Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="origin">
+ <data type="string">
+ <xs:documentation>Fill Image Origin</xs:documentation>
+ </data>
+ <xs:documentation>Fill Image Origin</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="position">
+ <data type="string">
+ <xs:documentation>Fill Image Position</xs:documentation>
+ </data>
+ <xs:documentation>Fill Image Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="aspect">
+ <text/>
+ <xs:documentation>Image Aspect Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colors">
+ <data type="string">
+ <xs:documentation>Intermediate Colors</xs:documentation>
+ </data>
+ <xs:documentation>Intermediate Colors</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="angle">
+ <data type="decimal">
+ <xs:documentation>Gradient Angle</xs:documentation>
+ </data>
+ <xs:documentation>Gradient Angle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="alignshape">
+ <text/>
+ <xs:documentation>Align Image With Shape</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="focus">
+ <data type="string">
+ <xs:documentation>Gradient Center</xs:documentation>
+ </data>
+ <xs:documentation>Gradient Center</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="focussize">
+ <data type="string">
+ <xs:documentation>Radial Gradient Size</xs:documentation>
+ </data>
+ <xs:documentation>Radial Gradient Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="focusposition">
+ <data type="string">
+ <xs:documentation>Radial Gradient Center</xs:documentation>
+ </data>
+ <xs:documentation>Radial Gradient Center</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="method">
+ <text/>
+ <xs:documentation>Gradient Fill Method</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="o:detectmouseclick"/>
+ <attribute name="o:title"/>
+ <attribute name="o:opacity2"/>
+ <optional>
+ <attribute name="recolor">
+ <text/>
+ <xs:documentation>Recolor Fill as Picture</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotate">
+ <text/>
+ <xs:documentation>Rotate Fill with Shape</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="r:id"/>
+ </optional>
+ <optional>
+ <attribute name="o:relid"/>
+ </optional>
+ </define>
+ <define name="CT_Formulas">
+ <zeroOrMore>
+ <element name="f">
+ <ref name="CT_F"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_F">
+ <attribute name="eqn">
+ <data type="string">
+ <xs:documentation>Equation</xs:documentation>
+ </data>
+ <xs:documentation>Equation</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Handles">
+ <zeroOrMore>
+ <element name="h">
+ <ref name="CT_H"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_H">
+ <attribute name="position">
+ <data type="string">
+ <xs:documentation>Handle Position</xs:documentation>
+ </data>
+ <xs:documentation>Handle Position</xs:documentation>
+ </attribute>
+ <attribute name="polar">
+ <data type="string">
+ <xs:documentation>Handle Polar Center</xs:documentation>
+ </data>
+ <xs:documentation>Handle Polar Center</xs:documentation>
+ </attribute>
+ <attribute name="map">
+ <data type="string">
+ <xs:documentation>Handle Coordinate Mapping</xs:documentation>
+ </data>
+ <xs:documentation>Handle Coordinate Mapping</xs:documentation>
+ </attribute>
+ <attribute name="invx">
+ <text/>
+ <xs:documentation>Invert Handle's X Position</xs:documentation>
+ </attribute>
+ <attribute name="invy">
+ <text/>
+ <xs:documentation>Invert Handle's Y Position</xs:documentation>
+ </attribute>
+ <attribute name="switch">
+ <text/>
+ <xs:documentation>Handle Inversion Toggle</xs:documentation>
+ </attribute>
+ <attribute name="xrange">
+ <data type="string">
+ <xs:documentation>Handle X Position Range</xs:documentation>
+ </data>
+ <xs:documentation>Handle X Position Range</xs:documentation>
+ </attribute>
+ <attribute name="yrange">
+ <data type="string">
+ <xs:documentation>Handle Y Position Range</xs:documentation>
+ </data>
+ <xs:documentation>Handle Y Position Range</xs:documentation>
+ </attribute>
+ <attribute name="radiusrange">
+ <data type="string">
+ <xs:documentation>Handle Polar Radius Range</xs:documentation>
+ </data>
+ <xs:documentation>Handle Polar Radius Range</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_ImageData">
+ <ref name="AG_Id"/>
+ <ref name="AG_ImageAttributes"/>
+ <ref name="AG_Chromakey"/>
+ <optional>
+ <attribute name="embosscolor">
+ <text/>
+ <xs:documentation>Embossed Color</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="recolortarget">
+ <text/>
+ <xs:documentation>Black Recoloring Color</xs:documentation>
+ </attribute>
+ <attribute name="o:href"/>
+ <attribute name="o:althref"/>
+ <attribute name="o:title"/>
+ <attribute name="o:oleid"/>
+ <attribute name="o:detectmouseclick"/>
+ <attribute name="o:movie"/>
+ <attribute name="o:relid"/>
+ <attribute name="r:id"/>
+ <attribute name="r:pict"/>
+ <attribute name="r:href"/>
+ </define>
+ <define name="CT_Path">
+ <ref name="AG_Id"/>
+ <optional>
+ <attribute name="v">
+ <data type="string">
+ <xs:documentation>Path Definition</xs:documentation>
+ </data>
+ <xs:documentation>Path Definition</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="limo">
+ <data type="string">
+ <xs:documentation>Limo Stretch Point</xs:documentation>
+ </data>
+ <xs:documentation>Limo Stretch Point</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="textboxrect">
+ <data type="string">
+ <xs:documentation>Text Box Bounding Box</xs:documentation>
+ </data>
+ <xs:documentation>Text Box Bounding Box</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fillok">
+ <text/>
+ <xs:documentation>Shape Fill Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="strokeok">
+ <text/>
+ <xs:documentation>Stroke Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="shadowok">
+ <text/>
+ <xs:documentation>Shadow Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="arrowok">
+ <text/>
+ <xs:documentation>Arrowhead Display Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="gradientshapeok">
+ <text/>
+ <xs:documentation>Gradient Shape Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="textpathok">
+ <text/>
+ <xs:documentation>Text Path Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="insetpenok">
+ <text/>
+ <xs:documentation>Inset Stroke From Path Flag</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="o:connecttype"/>
+ <attribute name="o:connectlocs"/>
+ <attribute name="o:connectangles"/>
+ <attribute name="o:extrusionok"/>
+ </define>
+ <define name="CT_Shadow">
+ <ref name="AG_Id"/>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Shadow Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Shadow Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="obscured">
+ <text/>
+ <xs:documentation>Shadow Transparency</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Shadow Primary Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="opacity">
+ <data type="string">
+ <xs:documentation>Shadow Opacity</xs:documentation>
+ </data>
+ <xs:documentation>Shadow Opacity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="offset">
+ <data type="string">
+ <xs:documentation>Shadow Primary Offset</xs:documentation>
+ </data>
+ <xs:documentation>Shadow Primary Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color2">
+ <text/>
+ <xs:documentation>Shadow Secondary Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="offset2">
+ <data type="string">
+ <xs:documentation>Shadow Secondary Offset</xs:documentation>
+ </data>
+ <xs:documentation>Shadow Secondary Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="origin">
+ <data type="string">
+ <xs:documentation>Shadow Origin</xs:documentation>
+ </data>
+ <xs:documentation>Shadow Origin</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="matrix">
+ <data type="string">
+ <xs:documentation>Shadow Perspective Matrix</xs:documentation>
+ </data>
+ <xs:documentation>Shadow Perspective Matrix</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Stroke">
+ <group>
+ <optional>
+ <element name="o:left">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="o:top">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="o:right">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="o:bottom">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="o:column">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ </group>
+ <ref name="AG_Id"/>
+ <ref name="AG_StrokeAttributes"/>
+ </define>
+ <define name="CT_Textbox">
+ <choice>
+ <optional>
+ <element name="w:txbxContent">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </choice>
+ <ref name="AG_Id"/>
+ <ref name="AG_Style"/>
+ <optional>
+ <attribute name="inset">
+ <data type="string">
+ <xs:documentation>Text Box Inset</xs:documentation>
+ </data>
+ <xs:documentation>Text Box Inset</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="o:singleclick"/>
+ <attribute name="o:insetmode"/>
+ </define>
+ <define name="CT_TextPath">
+ <ref name="AG_Id"/>
+ <ref name="AG_Style"/>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Text Path Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fitshape">
+ <text/>
+ <xs:documentation>Shape Fit Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fitpath">
+ <text/>
+ <xs:documentation>Path Fit Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="trim">
+ <text/>
+ <xs:documentation>Text Path Trim Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="xscale">
+ <text/>
+ <xs:documentation>Text X-Scaling</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="string">
+ <data type="string">
+ <xs:documentation>Text Path Text</xs:documentation>
+ </data>
+ <xs:documentation>Text Path Text</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="arc">
+ <element name="arc">
+ <ref name="CT_Arc"/>
+ </element>
+ </define>
+ <define name="curve">
+ <element name="curve">
+ <ref name="CT_Curve"/>
+ </element>
+ </define>
+ <define name="image">
+ <element name="image">
+ <ref name="CT_Image"/>
+ </element>
+ </define>
+ <define name="line">
+ <element name="line">
+ <ref name="CT_Line"/>
+ </element>
+ </define>
+ <define name="oval">
+ <element name="oval">
+ <ref name="CT_Oval"/>
+ </element>
+ </define>
+ <define name="polyline">
+ <element name="polyline">
+ <ref name="CT_PolyLine"/>
+ </element>
+ </define>
+ <define name="rect">
+ <element name="rect">
+ <ref name="CT_Rect"/>
+ </element>
+ </define>
+ <define name="roundrect">
+ <element name="roundrect">
+ <ref name="CT_RoundRect"/>
+ </element>
+ </define>
+ <define name="CT_Arc">
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <optional>
+ <attribute name="startAngle">
+ <data type="decimal">
+ <xs:documentation>Starting Angle</xs:documentation>
+ </data>
+ <xs:documentation>Starting Angle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endAngle">
+ <data type="decimal">
+ <xs:documentation>Ending Angle</xs:documentation>
+ </data>
+ <xs:documentation>Ending Angle</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Curve">
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <optional>
+ <attribute name="from">
+ <data type="string">
+ <xs:documentation>Curve Starting Point</xs:documentation>
+ </data>
+ <xs:documentation>Curve Starting Point</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="control1">
+ <data type="string">
+ <xs:documentation>First Curve Control Point</xs:documentation>
+ </data>
+ <xs:documentation>First Curve Control Point</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="control2">
+ <data type="string">
+ <xs:documentation>Second Curve Control Point</xs:documentation>
+ </data>
+ <xs:documentation>Second Curve Control Point</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="to">
+ <data type="string">
+ <xs:documentation>Curve Ending Point</xs:documentation>
+ </data>
+ <xs:documentation>Curve Ending Point</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Image">
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <ref name="AG_ImageAttributes"/>
+ </define>
+ <define name="CT_Line">
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <optional>
+ <attribute name="from">
+ <data type="string">
+ <xs:documentation>Line Start</xs:documentation>
+ </data>
+ <xs:documentation>Line Start</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="to">
+ <data type="string">
+ <xs:documentation>Line End Point</xs:documentation>
+ </data>
+ <xs:documentation>Line End Point</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Oval">
+ <oneOrMore>
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ </oneOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ </define>
+ <define name="CT_PolyLine">
+ <zeroOrMore>
+ <choice>
+ <ref name="EG_ShapeElements"/>
+ <element name="o:ink">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </choice>
+ </zeroOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <optional>
+ <attribute name="points">
+ <data type="string">
+ <xs:documentation>Points for Compound Line</xs:documentation>
+ </data>
+ <xs:documentation>Points for Compound Line</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Rect">
+ <oneOrMore>
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ </oneOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ </define>
+ <define name="CT_RoundRect">
+ <oneOrMore>
+ <zeroOrMore>
+ <ref name="EG_ShapeElements"/>
+ </zeroOrMore>
+ </oneOrMore>
+ <ref name="AG_AllCoreAttributes"/>
+ <ref name="AG_AllShapeAttributes"/>
+ <optional>
+ <attribute name="arcsize">
+ <data type="string">
+ <xs:documentation>Rounded Corner Arc Size</xs:documentation>
+ </data>
+ <xs:documentation>Rounded Corner Arc Size</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_Ext">
+ <list>
+ <xs:documentation>VML Extension Handling Behaviors</xs:documentation>
+ <choice>
+ <!-- Not renderable -->
+ <value>view</value>
+ <!-- Editable -->
+ <value>edit</value>
+ <!-- Renderable -->
+ <value>backwardCompatible</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_TrueFalse">
+ <list>
+ <xs:documentation>Boolean Value</xs:documentation>
+ <choice>
+ <!-- True -->
+ <value>t</value>
+ <!-- False -->
+ <value>f</value>
+ <!-- True -->
+ <value>true</value>
+ <!-- False -->
+ <value>false</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ColorType">
+ <data type="string">
+ <xs:documentation>Color Type</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_FillType">
+ <list>
+ <xs:documentation>Shape Fill Type</xs:documentation>
+ <choice>
+ <!-- Solid Fill -->
+ <value>solid</value>
+ <!-- Linear Gradient -->
+ <value>gradient</value>
+ <!-- Radial Gradient -->
+ <value>gradientRadial</value>
+ <!-- Tiled Image -->
+ <value>tile</value>
+ <!-- Image Pattern -->
+ <value>pattern</value>
+ <!-- Stretch Image to Fit -->
+ <value>frame</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_FillMethod">
+ <list>
+ <xs:documentation>Gradient Fill Computation Type</xs:documentation>
+ <choice>
+ <!-- No Gradient Fill -->
+ <value>none</value>
+ <!-- Linear Fill -->
+ <value>linear</value>
+ <!-- Sigma Fill -->
+ <value>sigma</value>
+ <!-- Application Default Fill -->
+ <value>any</value>
+ <!-- Linear Sigma Fill -->
+ <value>linear sigma</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ShadowType">
+ <list>
+ <xs:documentation>Shadow Type</xs:documentation>
+ <choice>
+ <!-- Single Shadow -->
+ <value>single</value>
+ <!-- Double Shadow -->
+ <value>double</value>
+ <!-- Embossed Shadow -->
+ <value>emboss</value>
+ <!-- Perspective Shadow -->
+ <value>perspective</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_StrokeLineStyle">
+ <list>
+ <xs:documentation>Stroke Line Style</xs:documentation>
+ <choice>
+ <!-- Single Line -->
+ <value>single</value>
+ <!-- Two Thin Lines -->
+ <value>thinThin</value>
+ <!-- Thin Line Outside Thick Line -->
+ <value>thinThick</value>
+ <!-- Thick Line Outside Thin Line -->
+ <value>thickThin</value>
+ <!-- Thck Line Between Thin Lines -->
+ <value>thickBetweenThin</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_StrokeJoinStyle">
+ <list>
+ <xs:documentation>Line Join Type</xs:documentation>
+ <choice>
+ <!-- Round Joint -->
+ <value>round</value>
+ <!-- Bevel Joint -->
+ <value>bevel</value>
+ <!-- Miter Joint -->
+ <value>miter</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_StrokeEndCap">
+ <list>
+ <xs:documentation>Stroke End Cap Type</xs:documentation>
+ <choice>
+ <!-- Flat End -->
+ <value>flat</value>
+ <!-- Square End -->
+ <value>square</value>
+ <!-- Round End -->
+ <value>round</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_StrokeArrowLength">
+ <list>
+ <xs:documentation>Stroke Arrowhead Length</xs:documentation>
+ <choice>
+ <!-- Short Arrowhead -->
+ <value>short</value>
+ <!-- Medium Arrowhead -->
+ <value>medium</value>
+ <!-- Long Arrowhead -->
+ <value>long</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_StrokeArrowWidth">
+ <list>
+ <xs:documentation>Stroke Arrowhead Width</xs:documentation>
+ <choice>
+ <!-- Narrow Arrowhead -->
+ <value>narrow</value>
+ <!-- Medium Arrowhead -->
+ <value>medium</value>
+ <!-- Wide Arrowhead -->
+ <value>wide</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_StrokeArrowType">
+ <list>
+ <xs:documentation>Stroke Arrowhead Type</xs:documentation>
+ <choice>
+ <!-- No Arrowhead -->
+ <value>none</value>
+ <!-- Block Arrowhead -->
+ <value>block</value>
+ <!-- Classic Arrowhead -->
+ <value>classic</value>
+ <!-- Oval Arrowhead -->
+ <value>oval</value>
+ <!-- Diamond Arrowhead -->
+ <value>diamond</value>
+ <!-- Open Arrowhead -->
+ <value>open</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ImageAspect">
+ <list>
+ <xs:documentation>Image Scaling Behavior</xs:documentation>
+ <choice>
+ <!-- Ignore Aspect Ratio -->
+ <value>ignore</value>
+ <!-- At Most -->
+ <value>atMost</value>
+ <!-- At Least -->
+ <value>atLeast</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_TrueFalseBlank">
+ <list>
+ <xs:documentation>Boolean Value with Blank [False] State</xs:documentation>
+ <choice>
+ <!-- Logical True -->
+ <value>t</value>
+ <!-- Logical False -->
+ <value>f</value>
+ <!-- Logical True -->
+ <value>true</value>
+ <!-- Logical False -->
+ <value>false</value>
+ <!-- Blank – Logical False -->
+ <value/>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_EditAs">
+ <list>
+ <xs:documentation>Shape Grouping Types</xs:documentation>
+ <choice>
+ <!-- Shape Canvas -->
+ <value>canvas</value>
+ <!-- Organization Chart Diagram -->
+ <value>orgchart</value>
+ <!-- Radial Diagram -->
+ <value>radial</value>
+ <!-- Cycle Diagram -->
+ <value>cycle</value>
+ <!-- Pyramid Diagram -->
+ <value>stacked</value>
+ <!-- Venn Diagram -->
+ <value>venn</value>
+ <!-- Bullseye Diagram -->
+ <value>bullseye</value>
+ </choice>
+ </list>
+ </define>
+ <define name="BUILT_IN_ANY_TYPE">
+ <zeroOrMore>
+ <choice>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ </choice>
+ </zeroOrMore>
+ </define>
+ </grammar>
+ <resource name="ST_Ext" resource="List" generated="yes">
+ <value name="view" tokenid="ooxml:Value_vml_ST_Ext_view">view</value>
+ <value name="edit" tokenid="ooxml:Value_vml_ST_Ext_edit">edit</value>
+ <value name="backwardCompatible" tokenid="ooxml:Value_vml_ST_Ext_backwardCompatible">backwardCompatible</value>
+ </resource>
+ <resource name="ST_TrueFalse" resource="List" generated="yes">
+ <value name="t" tokenid="ooxml:Value_vml_ST_TrueFalse_t">t</value>
+ <value name="f" tokenid="ooxml:Value_vml_ST_TrueFalse_f">f</value>
+ <value name="true" tokenid="ooxml:Value_vml_ST_TrueFalse_true">true</value>
+ <value name="false" tokenid="ooxml:Value_vml_ST_TrueFalse_false">false</value>
+ </resource>
+ <resource name="ST_ColorType" resource="String" generated="yes"/>
+ <resource name="ST_FillType" resource="List" generated="yes">
+ <value name="solid" tokenid="ooxml:Value_vml_ST_FillType_solid">solid</value>
+ <value name="gradient" tokenid="ooxml:Value_vml_ST_FillType_gradient">gradient</value>
+ <value name="gradientRadial" tokenid="ooxml:Value_vml_ST_FillType_gradientRadial">gradientRadial</value>
+ <value name="tile" tokenid="ooxml:Value_vml_ST_FillType_tile">tile</value>
+ <value name="pattern" tokenid="ooxml:Value_vml_ST_FillType_pattern">pattern</value>
+ <value name="frame" tokenid="ooxml:Value_vml_ST_FillType_frame">frame</value>
+ </resource>
+ <resource name="ST_FillMethod" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_vml_ST_FillMethod_none">none</value>
+ <value name="linear" tokenid="ooxml:Value_vml_ST_FillMethod_linear">linear</value>
+ <value name="sigma" tokenid="ooxml:Value_vml_ST_FillMethod_sigma">sigma</value>
+ <value name="any" tokenid="ooxml:Value_vml_ST_FillMethod_any">any</value>
+ <value name="linear_sigma" tokenid="ooxml:Value_vml_ST_FillMethod_linear_sigma">linear sigma</value>
+ </resource>
+ <resource name="ST_ShadowType" resource="List" generated="yes">
+ <value name="single" tokenid="ooxml:Value_vml_ST_ShadowType_single">single</value>
+ <value name="double" tokenid="ooxml:Value_vml_ST_ShadowType_double">double</value>
+ <value name="emboss" tokenid="ooxml:Value_vml_ST_ShadowType_emboss">emboss</value>
+ <value name="perspective" tokenid="ooxml:Value_vml_ST_ShadowType_perspective">perspective</value>
+ </resource>
+ <resource name="ST_StrokeLineStyle" resource="List" generated="yes">
+ <value name="single" tokenid="ooxml:Value_vml_ST_StrokeLineStyle_single">single</value>
+ <value name="thinThin" tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thinThin">thinThin</value>
+ <value name="thinThick" tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thinThick">thinThick</value>
+ <value name="thickThin" tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thickThin">thickThin</value>
+ <value name="thickBetweenThin" tokenid="ooxml:Value_vml_ST_StrokeLineStyle_thickBetweenThin">thickBetweenThin</value>
+ </resource>
+ <resource name="ST_StrokeJoinStyle" resource="List" generated="yes">
+ <value name="round" tokenid="ooxml:Value_vml_ST_StrokeJoinStyle_round">round</value>
+ <value name="bevel" tokenid="ooxml:Value_vml_ST_StrokeJoinStyle_bevel">bevel</value>
+ <value name="miter" tokenid="ooxml:Value_vml_ST_StrokeJoinStyle_miter">miter</value>
+ </resource>
+ <resource name="ST_StrokeEndCap" resource="List" generated="yes">
+ <value name="flat" tokenid="ooxml:Value_vml_ST_StrokeEndCap_flat">flat</value>
+ <value name="square" tokenid="ooxml:Value_vml_ST_StrokeEndCap_square">square</value>
+ <value name="round" tokenid="ooxml:Value_vml_ST_StrokeEndCap_round">round</value>
+ </resource>
+ <resource name="ST_StrokeArrowLength" resource="List" generated="yes">
+ <value name="short" tokenid="ooxml:Value_vml_ST_StrokeArrowLength_short">short</value>
+ <value name="medium" tokenid="ooxml:Value_vml_ST_StrokeArrowLength_medium">medium</value>
+ <value name="long" tokenid="ooxml:Value_vml_ST_StrokeArrowLength_long">long</value>
+ </resource>
+ <resource name="ST_StrokeArrowWidth" resource="List" generated="yes">
+ <value name="narrow" tokenid="ooxml:Value_vml_ST_StrokeArrowWidth_narrow">narrow</value>
+ <value name="medium" tokenid="ooxml:Value_vml_ST_StrokeArrowWidth_medium">medium</value>
+ <value name="wide" tokenid="ooxml:Value_vml_ST_StrokeArrowWidth_wide">wide</value>
+ </resource>
+ <resource name="ST_StrokeArrowType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_vml_ST_StrokeArrowType_none">none</value>
+ <value name="block" tokenid="ooxml:Value_vml_ST_StrokeArrowType_block">block</value>
+ <value name="classic" tokenid="ooxml:Value_vml_ST_StrokeArrowType_classic">classic</value>
+ <value name="oval" tokenid="ooxml:Value_vml_ST_StrokeArrowType_oval">oval</value>
+ <value name="diamond" tokenid="ooxml:Value_vml_ST_StrokeArrowType_diamond">diamond</value>
+ <value name="open" tokenid="ooxml:Value_vml_ST_StrokeArrowType_open">open</value>
+ </resource>
+ <resource name="ST_ImageAspect" resource="List" generated="yes">
+ <value name="ignore" tokenid="ooxml:Value_vml_ST_ImageAspect_ignore">ignore</value>
+ <value name="atMost" tokenid="ooxml:Value_vml_ST_ImageAspect_atMost">atMost</value>
+ <value name="atLeast" tokenid="ooxml:Value_vml_ST_ImageAspect_atLeast">atLeast</value>
+ </resource>
+ <resource name="ST_TrueFalseBlank" resource="List" generated="yes">
+ <value name="t" tokenid="ooxml:Value_vml_ST_TrueFalseBlank_t">t</value>
+ <value name="f" tokenid="ooxml:Value_vml_ST_TrueFalseBlank_f">f</value>
+ <value name="true" tokenid="ooxml:Value_vml_ST_TrueFalseBlank_true">true</value>
+ <value name="false" tokenid="ooxml:Value_vml_ST_TrueFalseBlank_false">false</value>
+ <value name="" tokenid="ooxml:Value_vml_ST_TrueFalseBlank_"/>
+ </resource>
+ <resource name="ST_EditAs" resource="List" generated="yes">
+ <value name="canvas" tokenid="ooxml:Value_vml_ST_EditAs_canvas">canvas</value>
+ <value name="orgchart" tokenid="ooxml:Value_vml_ST_EditAs_orgchart">orgchart</value>
+ <value name="radial" tokenid="ooxml:Value_vml_ST_EditAs_radial">radial</value>
+ <value name="cycle" tokenid="ooxml:Value_vml_ST_EditAs_cycle">cycle</value>
+ <value name="stacked" tokenid="ooxml:Value_vml_ST_EditAs_stacked">stacked</value>
+ <value name="venn" tokenid="ooxml:Value_vml_ST_EditAs_venn">venn</value>
+ <value name="bullseye" tokenid="ooxml:Value_vml_ST_EditAs_bullseye">bullseye</value>
+ </resource>
+ </namespace>
+ <namespace name="vml-officeDrawing" file="vml-officeDrawing.rng">
+ <start name="shapedefaults"/>
+ <start name="shapelayout"/>
+ <start name="signatureline"/>
+ <start name="ink"/>
+ <start name="diagram"/>
+ <start name="skew"/>
+ <start name="extrusion"/>
+ <start name="callout"/>
+ <start name="lock"/>
+ <start name="OLEObject"/>
+ <start name="complex"/>
+ <start name="left"/>
+ <start name="top"/>
+ <start name="right"/>
+ <start name="bottom"/>
+ <start name="column"/>
+ <start name="clippath"/>
+ <start name="fill"/>
+ <grammar xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns:v="urn:schemas-microsoft-com:vml" xmlns="http://relaxng.org/ns/structure/1.0" ns="urn:schemas-microsoft-com:office:office" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- ISO RELAX NG Schema -->
+ <include href="vml-main.rng"/>
+ <!-- External schema: http://schemas.openxmlformats.org/officeDocument/2006/relationships -->
+ <!-- start = shapedefaults | shapelayout | signatureline | ink | diagram | skew | extrusion | callout | lock | OLEObject | complex | left | top | right | bottom | column | clippath | fill -->
+ <define name="bwmode">
+ <attribute name="bwmode"/>
+ </define>
+ <define name="bwpure">
+ <attribute name="bwpure"/>
+ </define>
+ <define name="bwnormal">
+ <attribute name="bwnormal"/>
+ </define>
+ <define name="targetscreensize">
+ <attribute name="targetscreensize"/>
+ </define>
+ <define name="insetmode">
+ <attribute name="insetmode"/>
+ </define>
+ <define name="spt">
+ <attribute name="spt">
+ <data type="float"/>
+ </attribute>
+ </define>
+ <define name="wrapcoords">
+ <attribute name="wrapcoords">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="oned">
+ <attribute name="oned"/>
+ </define>
+ <define name="regroupid">
+ <attribute name="regroupid">
+ <data type="integer"/>
+ </attribute>
+ </define>
+ <define name="doubleclicknotify">
+ <attribute name="doubleclicknotify"/>
+ </define>
+ <define name="connectortype">
+ <attribute name="connectortype"/>
+ </define>
+ <define name="button">
+ <attribute name="button"/>
+ </define>
+ <define name="userhidden">
+ <attribute name="userhidden"/>
+ </define>
+ <define name="forcedash">
+ <attribute name="forcedash"/>
+ </define>
+ <define name="oleicon">
+ <attribute name="oleicon"/>
+ </define>
+ <define name="ole">
+ <attribute name="ole"/>
+ </define>
+ <define name="preferrelative">
+ <attribute name="preferrelative"/>
+ </define>
+ <define name="cliptowrap">
+ <attribute name="cliptowrap"/>
+ </define>
+ <define name="clip">
+ <attribute name="clip"/>
+ </define>
+ <define name="bullet">
+ <attribute name="bullet"/>
+ </define>
+ <define name="hr">
+ <attribute name="hr"/>
+ </define>
+ <define name="hrstd">
+ <attribute name="hrstd"/>
+ </define>
+ <define name="hrnoshade">
+ <attribute name="hrnoshade"/>
+ </define>
+ <define name="hrpct">
+ <attribute name="hrpct">
+ <data type="float"/>
+ </attribute>
+ </define>
+ <define name="hralign">
+ <attribute name="hralign"/>
+ </define>
+ <define name="allowincell">
+ <attribute name="allowincell"/>
+ </define>
+ <define name="allowoverlap">
+ <attribute name="allowoverlap"/>
+ </define>
+ <define name="userdrawn">
+ <attribute name="userdrawn"/>
+ </define>
+ <define name="bordertopcolor">
+ <attribute name="bordertopcolor">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="borderleftcolor">
+ <attribute name="borderleftcolor">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="borderbottomcolor">
+ <attribute name="borderbottomcolor">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="borderrightcolor">
+ <attribute name="borderrightcolor">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="connecttype">
+ <attribute name="connecttype"/>
+ </define>
+ <define name="connectlocs">
+ <attribute name="connectlocs">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="connectangles">
+ <attribute name="connectangles">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="master">
+ <attribute name="master">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="extrusionok">
+ <attribute name="extrusionok"/>
+ </define>
+ <define name="href">
+ <attribute name="href">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="althref">
+ <attribute name="althref">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="title">
+ <attribute name="title">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="singleclick">
+ <attribute name="singleclick"/>
+ </define>
+ <define name="oleid">
+ <attribute name="oleid">
+ <data type="float"/>
+ </attribute>
+ </define>
+ <define name="detectmouseclick">
+ <attribute name="detectmouseclick"/>
+ </define>
+ <define name="movie">
+ <attribute name="movie">
+ <data type="float"/>
+ </attribute>
+ </define>
+ <define name="spid">
+ <attribute name="spid">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="opacity2">
+ <attribute name="opacity2">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="relid">
+ <attribute name="relid"/>
+ </define>
+ <define name="dgmlayout">
+ <attribute name="dgmlayout">
+ <data type="integer"/>
+ </attribute>
+ </define>
+ <define name="dgmnodekind">
+ <attribute name="dgmnodekind">
+ <data type="integer"/>
+ </attribute>
+ </define>
+ <define name="dgmlayoutmru">
+ <attribute name="dgmlayoutmru">
+ <data type="integer"/>
+ </attribute>
+ </define>
+ <define name="gfxdata">
+ <attribute name="gfxdata">
+ <data type="base64Binary"/>
+ </attribute>
+ </define>
+ <define name="tableproperties">
+ <attribute name="tableproperties">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="tablelimits">
+ <attribute name="tablelimits">
+ <data type="string"/>
+ </attribute>
+ </define>
+ <define name="shapedefaults">
+ <element name="shapedefaults">
+ <ref name="CT_ShapeDefaults"/>
+ </element>
+ </define>
+ <define name="shapelayout">
+ <element name="shapelayout">
+ <ref name="CT_ShapeLayout"/>
+ </element>
+ </define>
+ <define name="signatureline">
+ <element name="signatureline">
+ <ref name="CT_SignatureLine"/>
+ </element>
+ </define>
+ <define name="ink">
+ <element name="ink">
+ <ref name="CT_Ink"/>
+ </element>
+ </define>
+ <define name="diagram">
+ <element name="diagram">
+ <ref name="CT_Diagram"/>
+ </element>
+ </define>
+ <define name="CT_ShapeDefaults">
+ <optional>
+ <interleave>
+ <optional>
+ <element name="v:fill">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="v:stroke">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="v:textbox">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="v:shadow">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="skew"/>
+ </optional>
+ <optional>
+ <ref name="extrusion"/>
+ </optional>
+ <optional>
+ <ref name="callout"/>
+ <xs:documentation>Callout</xs:documentation>
+ </optional>
+ <optional>
+ <ref name="lock"/>
+ <xs:documentation>Shape Protections</xs:documentation>
+ </optional>
+ <optional>
+ <element name="colormru">
+ <ref name="CT_ColorMru"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="colormenu">
+ <ref name="CT_ColorMenu"/>
+ </element>
+ </optional>
+ </interleave>
+ </optional>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="spidmax">
+ <data type="integer">
+ <xs:documentation>Shape ID Optional Storage</xs:documentation>
+ </data>
+ <xs:documentation>Shape ID Optional Storage</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="style">
+ <data type="string">
+ <xs:documentation>Shape Styling Properties</xs:documentation>
+ </data>
+ <xs:documentation>Shape Styling Properties</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fill">
+ <text/>
+ <xs:documentation>Shape Fill Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fillcolor">
+ <text/>
+ <xs:documentation>Default Fill Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="stroke">
+ <text/>
+ <xs:documentation>Shape Stroke Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="strokecolor">
+ <text/>
+ <xs:documentation>Shape Stroke Color</xs:documentation>
+ </attribute>
+ <attribute name="allowincell">
+ <text/>
+ <xs:documentation>Allow in Table Cell</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Ink">
+ <empty/>
+ <attribute name="i">
+ <data type="base64Binary">
+ <xs:documentation>Ink Data</xs:documentation>
+ </data>
+ <xs:documentation>Ink Data</xs:documentation>
+ </attribute>
+ <attribute name="annotation">
+ <text/>
+ <xs:documentation>Annotation Flag</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SignatureLine">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <attribute name="issignatureline">
+ <text/>
+ <xs:documentation>Signature Line Flag</xs:documentation>
+ </attribute>
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Unique ID</xs:documentation>
+ </attribute>
+ <attribute name="provid">
+ <text/>
+ <xs:documentation>Signature Provider ID</xs:documentation>
+ </attribute>
+ <attribute name="signinginstructionsset">
+ <text/>
+ <xs:documentation>Use Signing Instructions Flag</xs:documentation>
+ </attribute>
+ <attribute name="allowcomments">
+ <text/>
+ <xs:documentation>User-specified Comments Flag</xs:documentation>
+ </attribute>
+ <attribute name="showsigndate">
+ <text/>
+ <xs:documentation>Show Signed Date Flag</xs:documentation>
+ </attribute>
+ <attribute name="suggestedsigner">
+ <data type="string">
+ <xs:documentation>Suggested Signer Line 1</xs:documentation>
+ </data>
+ <xs:documentation>Suggested Signer Line 1</xs:documentation>
+ </attribute>
+ <attribute name="suggestedsigner2">
+ <data type="string">
+ <xs:documentation>Suggested Signer Line 2</xs:documentation>
+ </data>
+ <xs:documentation>Suggested Signer Line 2</xs:documentation>
+ </attribute>
+ <attribute name="suggestedsigneremail">
+ <data type="string">
+ <xs:documentation>Suggested Signer E-mail Address</xs:documentation>
+ </data>
+ <xs:documentation>Suggested Signer E-mail Address</xs:documentation>
+ </attribute>
+ <attribute name="signinginstructions">
+ <data type="string">
+ <xs:documentation>Instructions for Signing</xs:documentation>
+ </data>
+ <xs:documentation>Instructions for Signing</xs:documentation>
+ </attribute>
+ <attribute name="addlxml">
+ <data type="string">
+ <xs:documentation>Additional Signature Information</xs:documentation>
+ </data>
+ <xs:documentation>Additional Signature Information</xs:documentation>
+ </attribute>
+ <attribute name="sigprovurl">
+ <data type="string">
+ <xs:documentation>Signature Provider Download URL</xs:documentation>
+ </data>
+ <xs:documentation>Signature Provider Download URL</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_ShapeLayout">
+ <interleave>
+ <optional>
+ <element name="idmap">
+ <ref name="CT_IdMap"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="regrouptable">
+ <ref name="CT_RegroupTable"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rules">
+ <ref name="CT_Rules"/>
+ </element>
+ </optional>
+ </interleave>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </define>
+ <define name="CT_IdMap">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="data">
+ <data type="string">
+ <xs:documentation>Shape IDs</xs:documentation>
+ </data>
+ <xs:documentation>Shape IDs</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_RegroupTable">
+ <zeroOrMore>
+ <element name="entry">
+ <ref name="CT_Entry"/>
+ </element>
+ </zeroOrMore>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </define>
+ <define name="CT_Entry">
+ <optional>
+ <attribute name="new">
+ <data type="int">
+ <xs:documentation>New Group ID</xs:documentation>
+ </data>
+ <xs:documentation>New Group ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="old">
+ <data type="int">
+ <xs:documentation>Old Group ID</xs:documentation>
+ </data>
+ <xs:documentation>Old Group ID</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Rules">
+ <zeroOrMore>
+ <element name="r">
+ <ref name="CT_R"/>
+ </element>
+ </zeroOrMore>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </define>
+ <define name="CT_R">
+ <zeroOrMore>
+ <element name="proxy">
+ <ref name="CT_Proxy"/>
+ </element>
+ </zeroOrMore>
+ <attribute name="id">
+ <data type="string">
+ <xs:documentation>Rule ID</xs:documentation>
+ </data>
+ <xs:documentation>Rule ID</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Rule Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="how">
+ <text/>
+ <xs:documentation>Alignment Rule Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="idref">
+ <data type="string">
+ <xs:documentation>Rule Shape Reference</xs:documentation>
+ </data>
+ <xs:documentation>Rule Shape Reference</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Proxy">
+ <optional>
+ <attribute name="start">
+ <text/>
+ <xs:documentation>Start Point Connection Flag</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="end">
+ <text/>
+ <xs:documentation>End Point Connection Flag</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="idref">
+ <data type="string">
+ <xs:documentation>Proxy Shape Reference</xs:documentation>
+ </data>
+ <xs:documentation>Proxy Shape Reference</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="connectloc">
+ <data type="int">
+ <xs:documentation>Connection Location</xs:documentation>
+ </data>
+ <xs:documentation>Connection Location</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Diagram">
+ <optional>
+ <element name="relationtable">
+ <ref name="CT_RelationTable"/>
+ </element>
+ </optional>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="dgmstyle">
+ <data type="integer">
+ <xs:documentation>Diagram Style Options</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Style Options</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="autoformat">
+ <text/>
+ <xs:documentation>Diagram Automatic Format</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="reverse">
+ <text/>
+ <xs:documentation>Diagram Reverse Direction</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="autolayout">
+ <text/>
+ <xs:documentation>Diagram Automatic Layout</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dgmscalex">
+ <data type="integer">
+ <xs:documentation>Diagram Layout X Scale</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Layout X Scale</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dgmscaley">
+ <data type="integer">
+ <xs:documentation>Diagram Layout Y Scale</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Layout Y Scale</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dgmfontsize">
+ <data type="integer">
+ <xs:documentation>Diagram Font Size</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Font Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="constrainbounds">
+ <data type="string">
+ <xs:documentation>Diagram Layout Extents</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Layout Extents</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dgmbasetextscale">
+ <data type="integer">
+ <xs:documentation>Diagram Base Font Size</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Base Font Size</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_RelationTable">
+ <zeroOrMore>
+ <element name="rel">
+ <ref name="CT_Relation"/>
+ </element>
+ </zeroOrMore>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </define>
+ <define name="CT_Relation">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="idsrc">
+ <data type="string">
+ <xs:documentation>Diagram Relationship Source Shape</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Relationship Source Shape</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="iddest">
+ <data type="string">
+ <xs:documentation>Diagram Relationship Destination Shape</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Relationship Destination Shape</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="idcntr">
+ <data type="string">
+ <xs:documentation>Diagram Relationship Center Shape</xs:documentation>
+ </data>
+ <xs:documentation>Diagram Relationship Center Shape</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_ColorMru">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <attribute name="colors">
+ <data type="string">
+ <xs:documentation>Recent colors</xs:documentation>
+ </data>
+ <xs:documentation>Recent colors</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_ColorMenu">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <attribute name="strokecolor">
+ <text/>
+ <xs:documentation>Default stroke color</xs:documentation>
+ </attribute>
+ <attribute name="fillcolor">
+ <text/>
+ <xs:documentation>Default fill color</xs:documentation>
+ </attribute>
+ <attribute name="shadowcolor">
+ <text/>
+ <xs:documentation>Default shadow color</xs:documentation>
+ </attribute>
+ <attribute name="extrusioncolor">
+ <text/>
+ <xs:documentation>Default extrusion color</xs:documentation>
+ </attribute>
+ </define>
+ <define name="skew">
+ <element name="skew">
+ <ref name="CT_Skew"/>
+ </element>
+ </define>
+ <define name="extrusion">
+ <element name="extrusion">
+ <ref name="CT_Extrusion"/>
+ </element>
+ </define>
+ <define name="callout">
+ <element name="callout">
+ <ref name="CT_Callout"/>
+ </element>
+ </define>
+ <define name="lock">
+ <element name="lock">
+ <ref name="CT_Lock"/>
+ </element>
+ </define>
+ <define name="OLEObject">
+ <element name="OLEObject">
+ <ref name="CT_OLEObject"/>
+ </element>
+ </define>
+ <define name="complex">
+ <element name="complex">
+ <ref name="CT_Complex"/>
+ </element>
+ </define>
+ <define name="left">
+ <element name="left">
+ <ref name="CT_StrokeChild"/>
+ </element>
+ </define>
+ <define name="top">
+ <element name="top">
+ <ref name="CT_StrokeChild"/>
+ </element>
+ </define>
+ <define name="right">
+ <element name="right">
+ <ref name="CT_StrokeChild"/>
+ </element>
+ </define>
+ <define name="bottom">
+ <element name="bottom">
+ <ref name="CT_StrokeChild"/>
+ </element>
+ </define>
+ <define name="column">
+ <element name="column">
+ <ref name="CT_StrokeChild"/>
+ </element>
+ </define>
+ <define name="clippath">
+ <element name="clippath">
+ <ref name="CT_ClipPath"/>
+ </element>
+ </define>
+ <define name="fill">
+ <element name="fill">
+ <ref name="CT_Fill"/>
+ </element>
+ </define>
+ <define name="CT_Skew">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="id">
+ <data type="string">
+ <xs:documentation>Skew ID</xs:documentation>
+ </data>
+ <xs:documentation>Skew ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Skew Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="offset">
+ <data type="string">
+ <xs:documentation>Skew Offset</xs:documentation>
+ </data>
+ <xs:documentation>Skew Offset</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="origin">
+ <data type="string">
+ <xs:documentation>Skew Origin</xs:documentation>
+ </data>
+ <xs:documentation>Skew Origin</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="matrix">
+ <data type="string">
+ <xs:documentation>Skew Perspective Matrix</xs:documentation>
+ </data>
+ <xs:documentation>Skew Perspective Matrix</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Extrusion">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Extrusion Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Extrusion Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="render">
+ <text/>
+ <xs:documentation>Extrusion Render Mode</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="viewpointorigin">
+ <data type="string">
+ <xs:documentation>Extrusion Viewpoint Origin</xs:documentation>
+ </data>
+ <xs:documentation>Extrusion Viewpoint Origin</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="viewpoint">
+ <data type="string">
+ <xs:documentation>Extrusion Viewpoint</xs:documentation>
+ </data>
+ <xs:documentation>Extrusion Viewpoint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="plane">
+ <text/>
+ <xs:documentation>Extrusion Direction</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="skewangle">
+ <data type="float">
+ <xs:documentation>Extrusion Skew Angle</xs:documentation>
+ </data>
+ <xs:documentation>Extrusion Skew Angle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="skewamt">
+ <data type="string">
+ <xs:documentation>Extrusion Skew</xs:documentation>
+ </data>
+ <xs:documentation>Extrusion Skew</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="foredepth">
+ <data type="string">
+ <xs:documentation>Forward Extrusion</xs:documentation>
+ </data>
+ <xs:documentation>Forward Extrusion</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="backdepth">
+ <data type="string">
+ <xs:documentation>Backward Extrusion Depth</xs:documentation>
+ </data>
+ <xs:documentation>Backward Extrusion Depth</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="orientation">
+ <data type="string">
+ <xs:documentation>Rotation Axis</xs:documentation>
+ </data>
+ <xs:documentation>Rotation Axis</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="orientationangle">
+ <data type="float">
+ <xs:documentation>Rotation Around Axis</xs:documentation>
+ </data>
+ <xs:documentation>Rotation Around Axis</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lockrotationcenter">
+ <text/>
+ <xs:documentation>Rotation Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="autorotationcenter">
+ <text/>
+ <xs:documentation>Center of Rotation Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotationcenter">
+ <data type="string">
+ <xs:documentation>Rotation Center</xs:documentation>
+ </data>
+ <xs:documentation>Rotation Center</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotationangle">
+ <data type="string">
+ <xs:documentation>X-Y Rotation Angle</xs:documentation>
+ </data>
+ <xs:documentation>X-Y Rotation Angle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colormode">
+ <text/>
+ <xs:documentation>Extrusion Color Mode</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Extrusion Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="shininess">
+ <data type="float">
+ <xs:documentation>Shininess</xs:documentation>
+ </data>
+ <xs:documentation>Shininess</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="specularity">
+ <data type="string">
+ <xs:documentation>Specularity</xs:documentation>
+ </data>
+ <xs:documentation>Specularity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="diffusity">
+ <data type="string">
+ <xs:documentation>Diffuse Reflection</xs:documentation>
+ </data>
+ <xs:documentation>Diffuse Reflection</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="metal">
+ <text/>
+ <xs:documentation>Metallic Surface Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="edge">
+ <data type="string">
+ <xs:documentation>Simulated Bevel</xs:documentation>
+ </data>
+ <xs:documentation>Simulated Bevel</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="facet">
+ <data type="string">
+ <xs:documentation>Faceting Quality</xs:documentation>
+ </data>
+ <xs:documentation>Faceting Quality</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightface">
+ <text/>
+ <xs:documentation>Shape Face Lighting Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="brightness">
+ <data type="string">
+ <xs:documentation>Brightness</xs:documentation>
+ </data>
+ <xs:documentation>Brightness</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightposition">
+ <data type="string">
+ <xs:documentation>Primary Light Position</xs:documentation>
+ </data>
+ <xs:documentation>Primary Light Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightlevel">
+ <data type="string">
+ <xs:documentation>Primary Light Intensity</xs:documentation>
+ </data>
+ <xs:documentation>Primary Light Intensity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightharsh">
+ <text/>
+ <xs:documentation>Primary Light Harshness Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightposition2">
+ <data type="string">
+ <xs:documentation>Secondary Light Position</xs:documentation>
+ </data>
+ <xs:documentation>Secondary Light Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightlevel2">
+ <data type="string">
+ <xs:documentation>Secondary Light Intensity</xs:documentation>
+ </data>
+ <xs:documentation>Secondary Light Intensity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lightharsh2">
+ <text/>
+ <xs:documentation>Secondary Light Harshness Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Callout">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Callout toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="type">
+ <data type="string">
+ <xs:documentation>Callout type</xs:documentation>
+ </data>
+ <xs:documentation>Callout type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="gap">
+ <data type="string">
+ <xs:documentation>Callout gap</xs:documentation>
+ </data>
+ <xs:documentation>Callout gap</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="angle">
+ <text/>
+ <xs:documentation>Callout angle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dropauto">
+ <text/>
+ <xs:documentation>Callout automatic drop toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="drop">
+ <text/>
+ <xs:documentation>Callout drop position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distance">
+ <data type="string">
+ <xs:documentation>Callout drop distance</xs:documentation>
+ </data>
+ <xs:documentation>Callout drop distance</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lengthspecified">
+ <text/>
+ <xs:documentation>Callout length toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="length">
+ <data type="string">
+ <xs:documentation>Callout length</xs:documentation>
+ </data>
+ <xs:documentation>Callout length</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="accentbar">
+ <text/>
+ <xs:documentation>Callout accent bar toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="textborder">
+ <text/>
+ <xs:documentation>Callout text border toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="minusx">
+ <text/>
+ <xs:documentation>Callout flip x</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="minusy">
+ <text/>
+ <xs:documentation>Callout flip y</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Lock">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="position">
+ <text/>
+ <xs:documentation>Position Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="selection">
+ <text/>
+ <xs:documentation>Selection Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="grouping">
+ <text/>
+ <xs:documentation>Grouping Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ungrouping">
+ <text/>
+ <xs:documentation>Ungrouping Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rotation">
+ <text/>
+ <xs:documentation>Rotation Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="cropping">
+ <text/>
+ <xs:documentation>Cropping Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="verticies">
+ <text/>
+ <xs:documentation>Vertices Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="adjusthandles">
+ <text/>
+ <xs:documentation>Handles Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="text">
+ <text/>
+ <xs:documentation>Text Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="aspectratio">
+ <text/>
+ <xs:documentation>Aspect Ratio Lock</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="shapetype">
+ <text/>
+ <xs:documentation>AutoShape Type Lock</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_OLEObject">
+ <group>
+ <optional>
+ <element name="LinkType">
+ <ref name="ST_OLELinkType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="LockedField">
+ <ref name="ST_TrueFalseBlank"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="FieldCodes">
+ <data type="string">
+ <xs:documentation>WordprocessingML Field Switches</xs:documentation>
+ </data>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="Type">
+ <text/>
+ <xs:documentation>OLE Object Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ProgID">
+ <data type="string">
+ <xs:documentation>OLE Object Application</xs:documentation>
+ </data>
+ <xs:documentation>OLE Object Application</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ShapeID">
+ <data type="string">
+ <xs:documentation>OLE Object Shape</xs:documentation>
+ </data>
+ <xs:documentation>OLE Object Shape</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="DrawAspect">
+ <text/>
+ <xs:documentation>OLE Object Representation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ObjectID">
+ <data type="string">
+ <xs:documentation>OLE Object Unique ID</xs:documentation>
+ </data>
+ <xs:documentation>OLE Object Unique ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="r:id">
+ <data type="string"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="UpdateMode">
+ <text/>
+ <xs:documentation>OLE Update Mode</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Complex">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </define>
+ <define name="CT_StrokeChild">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <optional>
+ <attribute name="on">
+ <text/>
+ <xs:documentation>Stroke Toggle</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="weight">
+ <data type="string">
+ <xs:documentation>Stroke Weight</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Weight</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Stroke Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="color2">
+ <text/>
+ <xs:documentation>Stroke Alternate Pattern Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="opacity">
+ <data type="string">
+ <xs:documentation>Stroke Opacity</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Opacity</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="linestyle">
+ <ref name="ST_StrokeLineStyle"/>
+ <xs:documentation>Stroke Line Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="miterlimit">
+ <data type="decimal">
+ <xs:documentation>Miter Joint Limit</xs:documentation>
+ </data>
+ <xs:documentation>Miter Joint Limit</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="joinstyle">
+ <ref name="ST_StrokeJoinStyle"/>
+ <xs:documentation>Line End Join Style)</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endcap">
+ <ref name="ST_StrokeEndCap"/>
+ <xs:documentation>Line End Cap</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dashstyle">
+ <data type="string">
+ <xs:documentation>Stroke Dash Pattern</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Dash Pattern</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="insetpen">
+ <text/>
+ <xs:documentation>Inset Border From Path</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="filltype">
+ <ref name="ST_FillType"/>
+ <xs:documentation>Stroke Image Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="src">
+ <data type="string">
+ <xs:documentation>Stroke Image Location</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Image Location</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="imageaspect">
+ <ref name="ST_ImageAspect"/>
+ <xs:documentation>Stroke Image Aspect Ratio</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="imagesize">
+ <data type="string">
+ <xs:documentation>Stroke Image Size</xs:documentation>
+ </data>
+ <xs:documentation>Stroke Image Size</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="imagealignshape">
+ <text/>
+ <xs:documentation>Stoke Image Alignment</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="startarrow">
+ <ref name="ST_StrokeArrowType"/>
+ <xs:documentation>Line Start Arrowhead</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="startarrowwidth">
+ <ref name="ST_StrokeArrowWidth"/>
+ <xs:documentation>Line Start Arrowhead Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="startarrowlength">
+ <ref name="ST_StrokeArrowLength"/>
+ <xs:documentation>Line Start Arrowhead Length</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endarrow">
+ <ref name="ST_StrokeArrowType"/>
+ <xs:documentation>Line End Arrowhead</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endarrowwidth">
+ <ref name="ST_StrokeArrowWidth"/>
+ <xs:documentation>Line End Arrowhead Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="endarrowlength">
+ <ref name="ST_StrokeArrowLength"/>
+ <xs:documentation>Line End Arrowhead Length</xs:documentation>
+ </attribute>
+ </optional>
+ <ref name="href"/>
+ <xs:documentation>Original Image Reference</xs:documentation>
+ <ref name="althref"/>
+ <xs:documentation>Alternate Image Reference</xs:documentation>
+ <ref name="title"/>
+ <xs:documentation>Stroke Title</xs:documentation>
+ <ref name="forcedash"/>
+ <xs:documentation>Force Dashed Outline</xs:documentation>
+ </define>
+ <define name="CT_ClipPath">
+ <attribute name="v">
+ <data type="string">
+ <xs:documentation>Path Definition</xs:documentation>
+ </data>
+ <xs:documentation>Path Definition</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Fill">
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Fill Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_RType">
+ <list>
+ <xs:documentation>Rule Type</xs:documentation>
+ <choice>
+ <!-- Arc Rule -->
+ <value>arc</value>
+ <!-- Callout Rule -->
+ <value>callout</value>
+ <!-- Connector Rule -->
+ <value>connector</value>
+ <!-- Alignment Rule -->
+ <value>align</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_How">
+ <list>
+ <xs:documentation>Alignment Type</xs:documentation>
+ <choice>
+ <!-- Top Alignment -->
+ <value>top</value>
+ <!-- Middle Alignment -->
+ <value>middle</value>
+ <!-- Bottom Alignment -->
+ <value>bottom</value>
+ <!-- Left Alignment -->
+ <value>left</value>
+ <!-- Center Alignment -->
+ <value>center</value>
+ <!-- Right Alignment -->
+ <value>right</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_BWMode">
+ <list>
+ <xs:documentation>Black And White Modes</xs:documentation>
+ <choice>
+ <!-- Color -->
+ <value>color</value>
+ <!-- Automatic -->
+ <value>auto</value>
+ <!-- Grayscale -->
+ <value>grayScale</value>
+ <!-- Light grayscale -->
+ <value>lightGrayscale</value>
+ <!-- Inverse Grayscale -->
+ <value>inverseGray</value>
+ <!-- Gray Outlines -->
+ <value>grayOutline</value>
+ <!-- Black And White -->
+ <value>highContrast</value>
+ <!-- Black -->
+ <value>black</value>
+ <!-- White -->
+ <value>white</value>
+ <!-- Hide Object When Displayed in Black and White -->
+ <value>hide</value>
+ <!-- Do Not Show -->
+ <value>undrawn</value>
+ <!-- Black Text And Lines -->
+ <value>blackTextAndLines</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ScreenSize">
+ <list>
+ <xs:documentation>Screen Sizes Type</xs:documentation>
+ <choice>
+ <!-- 544x376 pixels -->
+ <value>544,376</value>
+ <!-- 640x480 pixels -->
+ <value>640,480</value>
+ <!-- 720x512 pixels -->
+ <value>720,512</value>
+ <!-- 800x600 pixels -->
+ <value>800,600</value>
+ <!-- 1024x768 pixels -->
+ <value>1024,768</value>
+ <!-- 1152x862 pixels -->
+ <value>1152,862</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_InsetMode">
+ <list>
+ <xs:documentation>Inset Margin Type</xs:documentation>
+ <choice>
+ <!-- Automatic Margins -->
+ <value>auto</value>
+ <!-- Custom Margins -->
+ <value>custom</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ColorMode">
+ <list>
+ <xs:documentation>Extrusion Color Types</xs:documentation>
+ <choice>
+ <!-- Use Shape Fill Color -->
+ <value>auto</value>
+ <!-- Use Custom Color -->
+ <value>custom</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ColorType">
+ <data type="string">
+ <xs:documentation>Color Type</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_ExtrusionType">
+ <list>
+ <xs:documentation>Extrusion Type</xs:documentation>
+ <choice>
+ <!-- Perspective Projection -->
+ <value>perspective</value>
+ <!-- Parallel Projection -->
+ <value>parallel</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ExtrusionRender">
+ <list>
+ <xs:documentation>Extrusion Rendering Types</xs:documentation>
+ <choice>
+ <!-- Solid -->
+ <value>solid</value>
+ <!-- Wireframe -->
+ <value>wireFrame</value>
+ <!-- Bounding Cube -->
+ <value>boundingCube</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ExtrusionPlane">
+ <list>
+ <xs:documentation>Extrusion Planes</xs:documentation>
+ <choice>
+ <!-- XY Plane -->
+ <value>XY</value>
+ <!-- ZX Plane -->
+ <value>ZX</value>
+ <!-- YZ Plane -->
+ <value>YZ</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_Angle">
+ <list>
+ <xs:documentation>Callout Angles</xs:documentation>
+ <choice>
+ <!-- Any Angle -->
+ <value>any</value>
+ <!-- 30 degrees -->
+ <value>30</value>
+ <!-- 45 degrees -->
+ <value>45</value>
+ <!-- 60 degrees -->
+ <value>60</value>
+ <!-- 90 degrees -->
+ <value>90</value>
+ <!-- Automatic Angle -->
+ <value>auto</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_CalloutDrop">
+ <data type="string">
+ <xs:documentation>Callout Drop Location</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_CalloutPlacement">
+ <list>
+ <xs:documentation>Callout Placement</xs:documentation>
+ <choice>
+ <!-- Top placement -->
+ <value>top</value>
+ <!-- Center placement -->
+ <value>center</value>
+ <!-- Bottom placement -->
+ <value>bottom</value>
+ <!-- User-defined placement -->
+ <value>user</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ConnectorType">
+ <list>
+ <xs:documentation>Connector Type</xs:documentation>
+ <choice>
+ <!-- No Connector -->
+ <value>none</value>
+ <!-- Straight Connector -->
+ <value>straight</value>
+ <!-- Elbow Connector -->
+ <value>elbow</value>
+ <!-- Curved Connector -->
+ <value>curved</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_HrAlign">
+ <list>
+ <xs:documentation>Alignment Type</xs:documentation>
+ <choice>
+ <!-- Left Alignment -->
+ <value>left</value>
+ <!-- Right Alignment -->
+ <value>right</value>
+ <!-- Center Alignment -->
+ <value>center</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_ConnectType">
+ <list>
+ <xs:documentation>Connection Locations Type</xs:documentation>
+ <choice>
+ <!-- No -->
+ <value>none</value>
+ <!-- Four Connections -->
+ <value>rect</value>
+ <!-- Edit Point Connections -->
+ <value>segments</value>
+ <!-- Custom Connections -->
+ <value>custom</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_OLELinkType">
+ <list>
+ <xs:documentation>Embedded Object Alternate Image Request Types</xs:documentation>
+ <choice>
+ <!-- Other Image -->
+ <value>Picture</value>
+ <!-- Bitmap Image -->
+ <value>Bitmap</value>
+ <!-- Enhanced Metafile Image -->
+ <value>EnhancedMetaFile</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_OLEType">
+ <list>
+ <xs:documentation>OLE Connection Type</xs:documentation>
+ <choice>
+ <!-- Embedded Object -->
+ <value>Embed</value>
+ <!-- Linked Object -->
+ <value>Link</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_OLEDrawAspect">
+ <list>
+ <xs:documentation>OLE Object Representations</xs:documentation>
+ <choice>
+ <!-- Snapshot -->
+ <value>Content</value>
+ <!-- Icon -->
+ <value>Icon</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_OLEUpdateMode">
+ <list>
+ <xs:documentation>OLE Update Method Type</xs:documentation>
+ <choice>
+ <!-- Server Application Update -->
+ <value>Always</value>
+ <!-- User Update -->
+ <value>OnCall</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_Guid">
+ <data type="token">
+ <xs:documentation>128-Bit GUID</xs:documentation>
+ <param name="pattern">\{[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}\}</param>
+ </data>
+ </define>
+ <define name="ST_RelationshipId">
+ <data type="string">
+ <xs:documentation>Explicit Relationship ID</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_TrueFalse">
+ <list>
+ <xs:documentation>Boolean Value</xs:documentation>
+ <choice>
+ <!-- True -->
+ <value>t</value>
+ <!-- False -->
+ <value>f</value>
+ <!-- True -->
+ <value>true</value>
+ <!-- False -->
+ <value>false</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_TrueFalseBlank">
+ <list>
+ <xs:documentation>Boolean Value with Blank [False] State</xs:documentation>
+ <choice>
+ <!-- Blank – Logical False -->
+ <value/>
+ <!-- Logical True -->
+ <value>t</value>
+ <!-- Logical False -->
+ <value>f</value>
+ <!-- Logical True -->
+ <value>true</value>
+ <!-- Logical False -->
+ <value>false</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_FillType">
+ <list>
+ <xs:documentation>Shape Fill Type</xs:documentation>
+ <choice>
+ <!-- Centered Radial Gradient -->
+ <value>gradientCenter</value>
+ <!-- Solid Fill -->
+ <value>solid</value>
+ <!-- Image Pattern -->
+ <value>pattern</value>
+ <!-- Tiled Image -->
+ <value>tile</value>
+ <!-- Stretch Image to Fit -->
+ <value>frame</value>
+ <!-- Unscaled Gradient -->
+ <value>gradientUnscaled</value>
+ <!-- Radial Gradient -->
+ <value>gradientRadial</value>
+ <!-- Linear Gradient -->
+ <value>gradient</value>
+ <!-- Use Background Fill -->
+ <value>background</value>
+ </choice>
+ </list>
+ </define>
+ <define name="BUILT_IN_ANY_TYPE">
+ <zeroOrMore>
+ <choice>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ </choice>
+ </zeroOrMore>
+ </define>
+ </grammar>
+ <resource name="OLEObject" resource="Properties" tag="ole">
+ <element name="OLEObject" tokenid="ooxml:OLEObject_OLEObject"/>
+ </resource>
+ <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="CT_OLEObject" resource="Properties" tag="ole">
+ <element name="LinkType" tokenid="ooxml:CT_OLEObject_LinkType"/>
+ <element name="LockedField" tokenid="ooxml:CT_OLEObject_LockedField"/>
+ <element name="FieldCodes" tokenid="ooxml:CT_OLEObject_FieldCodes"/>
+ <attribute name="Type" tokenid="ooxml:CT_OLEObject_Type"/>
+ <attribute name="ProgID" tokenid="ooxml:CT_OLEObject_ProgID"/>
+ <attribute name="ShapeID" tokenid="ooxml:CT_OLEObject_ShapeID"/>
+ <attribute name="DrawAspect" tokenid="ooxml:CT_OLEObject_DrawAspect"/>
+ <attribute name="ObjectID" tokenid="ooxml:CT_OLEObject_ObjectID"/>
+ <attribute name="r:id" tokenid="ooxml:CT_OLEObject_r_id"/>
+ <attribute name="UpdateMode" tokenid="ooxml:CT_OLEObject_UpdateMode"/>
+ <action name="end" action="handleOLE"/>
+ </resource>
+ <resource name="ST_RType" resource="List" generated="yes">
+ <value name="arc" tokenid="ooxml:Value_office_ST_RType_arc">arc</value>
+ <value name="callout" tokenid="ooxml:Value_office_ST_RType_callout">callout</value>
+ <value name="connector" tokenid="ooxml:Value_office_ST_RType_connector">connector</value>
+ <value name="align" tokenid="ooxml:Value_office_ST_RType_align">align</value>
+ </resource>
+ <resource name="ST_How" resource="List" generated="yes">
+ <value name="top" tokenid="ooxml:Value_office_ST_How_top">top</value>
+ <value name="middle" tokenid="ooxml:Value_office_ST_How_middle">middle</value>
+ <value name="bottom" tokenid="ooxml:Value_office_ST_How_bottom">bottom</value>
+ <value name="left" tokenid="ooxml:Value_office_ST_How_left">left</value>
+ <value name="center" tokenid="ooxml:Value_office_ST_How_center">center</value>
+ <value name="right" tokenid="ooxml:Value_office_ST_How_right">right</value>
+ </resource>
+ <resource name="ST_BWMode" resource="List" generated="yes">
+ <value name="color" tokenid="ooxml:Value_office_ST_BWMode_color">color</value>
+ <value name="auto" tokenid="ooxml:Value_office_ST_BWMode_auto">auto</value>
+ <value name="grayScale" tokenid="ooxml:Value_office_ST_BWMode_grayScale">grayScale</value>
+ <value name="lightGrayscale" tokenid="ooxml:Value_office_ST_BWMode_lightGrayscale">lightGrayscale</value>
+ <value name="inverseGray" tokenid="ooxml:Value_office_ST_BWMode_inverseGray">inverseGray</value>
+ <value name="grayOutline" tokenid="ooxml:Value_office_ST_BWMode_grayOutline">grayOutline</value>
+ <value name="highContrast" tokenid="ooxml:Value_office_ST_BWMode_highContrast">highContrast</value>
+ <value name="black" tokenid="ooxml:Value_office_ST_BWMode_black">black</value>
+ <value name="white" tokenid="ooxml:Value_office_ST_BWMode_white">white</value>
+ <value name="hide" tokenid="ooxml:Value_office_ST_BWMode_hide">hide</value>
+ <value name="undrawn" tokenid="ooxml:Value_office_ST_BWMode_undrawn">undrawn</value>
+ <value name="blackTextAndLines" tokenid="ooxml:Value_office_ST_BWMode_blackTextAndLines">blackTextAndLines</value>
+ </resource>
+ <resource name="ST_ScreenSize" resource="List" generated="yes">
+ <value name="544_376" tokenid="ooxml:Value_office_ST_ScreenSize_544_376">544,376</value>
+ <value name="640_480" tokenid="ooxml:Value_office_ST_ScreenSize_640_480">640,480</value>
+ <value name="720_512" tokenid="ooxml:Value_office_ST_ScreenSize_720_512">720,512</value>
+ <value name="800_600" tokenid="ooxml:Value_office_ST_ScreenSize_800_600">800,600</value>
+ <value name="1024_768" tokenid="ooxml:Value_office_ST_ScreenSize_1024_768">1024,768</value>
+ <value name="1152_862" tokenid="ooxml:Value_office_ST_ScreenSize_1152_862">1152,862</value>
+ </resource>
+ <resource name="ST_InsetMode" resource="List" generated="yes">
+ <value name="auto" tokenid="ooxml:Value_office_ST_InsetMode_auto">auto</value>
+ <value name="custom" tokenid="ooxml:Value_office_ST_InsetMode_custom">custom</value>
+ </resource>
+ <resource name="ST_ColorMode" resource="List" generated="yes">
+ <value name="auto" tokenid="ooxml:Value_office_ST_ColorMode_auto">auto</value>
+ <value name="custom" tokenid="ooxml:Value_office_ST_ColorMode_custom">custom</value>
+ </resource>
+ <resource name="ST_ColorType" resource="String" generated="yes"/>
+ <resource name="ST_ExtrusionType" resource="List" generated="yes">
+ <value name="perspective" tokenid="ooxml:Value_office_ST_ExtrusionType_perspective">perspective</value>
+ <value name="parallel" tokenid="ooxml:Value_office_ST_ExtrusionType_parallel">parallel</value>
+ </resource>
+ <resource name="ST_ExtrusionRender" resource="List" generated="yes">
+ <value name="solid" tokenid="ooxml:Value_office_ST_ExtrusionRender_solid">solid</value>
+ <value name="wireFrame" tokenid="ooxml:Value_office_ST_ExtrusionRender_wireFrame">wireFrame</value>
+ <value name="boundingCube" tokenid="ooxml:Value_office_ST_ExtrusionRender_boundingCube">boundingCube</value>
+ </resource>
+ <resource name="ST_ExtrusionPlane" resource="List" generated="yes">
+ <value name="XY" tokenid="ooxml:Value_office_ST_ExtrusionPlane_XY">XY</value>
+ <value name="ZX" tokenid="ooxml:Value_office_ST_ExtrusionPlane_ZX">ZX</value>
+ <value name="YZ" tokenid="ooxml:Value_office_ST_ExtrusionPlane_YZ">YZ</value>
+ </resource>
+ <resource name="ST_Angle" resource="List" generated="yes">
+ <value name="any" tokenid="ooxml:Value_office_ST_Angle_any">any</value>
+ <value name="30" tokenid="ooxml:Value_office_ST_Angle_30">30</value>
+ <value name="45" tokenid="ooxml:Value_office_ST_Angle_45">45</value>
+ <value name="60" tokenid="ooxml:Value_office_ST_Angle_60">60</value>
+ <value name="90" tokenid="ooxml:Value_office_ST_Angle_90">90</value>
+ <value name="auto" tokenid="ooxml:Value_office_ST_Angle_auto">auto</value>
+ </resource>
+ <resource name="ST_CalloutDrop" resource="String" generated="yes"/>
+ <resource name="ST_CalloutPlacement" resource="List" generated="yes">
+ <value name="top" tokenid="ooxml:Value_office_ST_CalloutPlacement_top">top</value>
+ <value name="center" tokenid="ooxml:Value_office_ST_CalloutPlacement_center">center</value>
+ <value name="bottom" tokenid="ooxml:Value_office_ST_CalloutPlacement_bottom">bottom</value>
+ <value name="user" tokenid="ooxml:Value_office_ST_CalloutPlacement_user">user</value>
+ </resource>
+ <resource name="ST_ConnectorType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_office_ST_ConnectorType_none">none</value>
+ <value name="straight" tokenid="ooxml:Value_office_ST_ConnectorType_straight">straight</value>
+ <value name="elbow" tokenid="ooxml:Value_office_ST_ConnectorType_elbow">elbow</value>
+ <value name="curved" tokenid="ooxml:Value_office_ST_ConnectorType_curved">curved</value>
+ </resource>
+ <resource name="ST_HrAlign" resource="List" generated="yes">
+ <value name="left" tokenid="ooxml:Value_office_ST_HrAlign_left">left</value>
+ <value name="right" tokenid="ooxml:Value_office_ST_HrAlign_right">right</value>
+ <value name="center" tokenid="ooxml:Value_office_ST_HrAlign_center">center</value>
+ </resource>
+ <resource name="ST_ConnectType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_office_ST_ConnectType_none">none</value>
+ <value name="rect" tokenid="ooxml:Value_office_ST_ConnectType_rect">rect</value>
+ <value name="segments" tokenid="ooxml:Value_office_ST_ConnectType_segments">segments</value>
+ <value name="custom" tokenid="ooxml:Value_office_ST_ConnectType_custom">custom</value>
+ </resource>
+ <resource name="ST_OLELinkType" resource="List" generated="yes">
+ <value name="Picture" tokenid="ooxml:Value_office_ST_OLELinkType_Picture">Picture</value>
+ <value name="Bitmap" tokenid="ooxml:Value_office_ST_OLELinkType_Bitmap">Bitmap</value>
+ <value name="EnhancedMetaFile" tokenid="ooxml:Value_office_ST_OLELinkType_EnhancedMetaFile">EnhancedMetaFile</value>
+ </resource>
+ <resource name="ST_OLEType" resource="List" generated="yes">
+ <value name="Embed" tokenid="ooxml:Value_office_ST_OLEType_Embed">Embed</value>
+ <value name="Link" tokenid="ooxml:Value_office_ST_OLEType_Link">Link</value>
+ </resource>
+ <resource name="ST_OLEDrawAspect" resource="List" generated="yes">
+ <value name="Content" tokenid="ooxml:Value_office_ST_OLEDrawAspect_Content">Content</value>
+ <value name="Icon" tokenid="ooxml:Value_office_ST_OLEDrawAspect_Icon">Icon</value>
+ </resource>
+ <resource name="ST_OLEUpdateMode" resource="List" generated="yes">
+ <value name="Always" tokenid="ooxml:Value_office_ST_OLEUpdateMode_Always">Always</value>
+ <value name="OnCall" tokenid="ooxml:Value_office_ST_OLEUpdateMode_OnCall">OnCall</value>
+ </resource>
+ <resource name="ST_Guid" resource="String" generated="yes"/>
+ <resource name="ST_RelationshipId" resource="String" generated="yes"/>
+ <resource name="ST_TrueFalse" resource="List" generated="yes">
+ <value name="t" tokenid="ooxml:Value_office_ST_TrueFalse_t">t</value>
+ <value name="f" tokenid="ooxml:Value_office_ST_TrueFalse_f">f</value>
+ <value name="true" tokenid="ooxml:Value_office_ST_TrueFalse_true">true</value>
+ <value name="false" tokenid="ooxml:Value_office_ST_TrueFalse_false">false</value>
+ </resource>
+ <resource name="ST_TrueFalseBlank" resource="List" generated="yes">
+ <value name="" tokenid="ooxml:Value_office_ST_TrueFalseBlank_"/>
+ <value name="t" tokenid="ooxml:Value_office_ST_TrueFalseBlank_t">t</value>
+ <value name="f" tokenid="ooxml:Value_office_ST_TrueFalseBlank_f">f</value>
+ <value name="true" tokenid="ooxml:Value_office_ST_TrueFalseBlank_true">true</value>
+ <value name="false" tokenid="ooxml:Value_office_ST_TrueFalseBlank_false">false</value>
+ </resource>
+ <resource name="ST_FillType" resource="List" generated="yes">
+ <value name="gradientCenter" tokenid="ooxml:Value_office_ST_FillType_gradientCenter">gradientCenter</value>
+ <value name="solid" tokenid="ooxml:Value_office_ST_FillType_solid">solid</value>
+ <value name="pattern" tokenid="ooxml:Value_office_ST_FillType_pattern">pattern</value>
+ <value name="tile" tokenid="ooxml:Value_office_ST_FillType_tile">tile</value>
+ <value name="frame" tokenid="ooxml:Value_office_ST_FillType_frame">frame</value>
+ <value name="gradientUnscaled" tokenid="ooxml:Value_office_ST_FillType_gradientUnscaled">gradientUnscaled</value>
+ <value name="gradientRadial" tokenid="ooxml:Value_office_ST_FillType_gradientRadial">gradientRadial</value>
+ <value name="gradient" tokenid="ooxml:Value_office_ST_FillType_gradient">gradient</value>
+ <value name="background" tokenid="ooxml:Value_office_ST_FillType_background">background</value>
+ </resource>
+ </namespace>
+ <namespace name="vml-wordprocessingDrawing" file="vml-wordprocessingDrawing.rng">
+ <start name="bordertop"/>
+ <start name="borderleft"/>
+ <start name="borderright"/>
+ <start name="borderbottom"/>
+ <start name="wrap"/>
+ <start name="anchorlock"/>
+ <grammar xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="urn:schemas-microsoft-com:office:word" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <!-- ISO RELAX NG Schema -->
+ <!-- start = bordertop | borderleft | borderright | borderbottom | wrap | anchorlock -->
+ <define name="bordertop">
+ <element name="bordertop">
+ <ref name="CT_Border"/>
+ </element>
+ </define>
+ <define name="borderleft">
+ <element name="borderleft">
+ <ref name="CT_Border"/>
+ </element>
+ </define>
+ <define name="borderright">
+ <element name="borderright">
+ <ref name="CT_Border"/>
+ </element>
+ </define>
+ <define name="borderbottom">
+ <element name="borderbottom">
+ <ref name="CT_Border"/>
+ </element>
+ </define>
+ <define name="CT_Border">
+ <optional>
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Border Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="width">
+ <data type="positiveInteger">
+ <xs:documentation>Border Width</xs:documentation>
+ </data>
+ <xs:documentation>Border Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="shadow">
+ <text/>
+ <xs:documentation>Border shadow</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="wrap">
+ <element name="wrap">
+ <ref name="CT_Wrap"/>
+ </element>
+ </define>
+ <define name="CT_Wrap">
+ <optional>
+ <attribute name="type">
+ <ref name="ST_WrapType"/>
+ <xs:documentation>Wrapping type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="side">
+ <ref name="ST_WrapSide"/>
+ <xs:documentation>Wrapping side</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="anchorx">
+ <ref name="ST_HorizontalAnchor"/>
+ <xs:documentation>Horizontal Positioning Base</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="anchory">
+ <ref name="ST_VerticalAnchor"/>
+ <xs:documentation>Vertical Positioning Base</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="anchorlock">
+ <element name="anchorlock">
+ <ref name="CT_AnchorLock"/>
+ </element>
+ </define>
+ <define name="CT_AnchorLock">
+ <empty/>
+ </define>
+ <define name="ST_BorderType">
+ <list>
+ <xs:documentation>Border Type</xs:documentation>
+ <choice>
+ <!-- No Border -->
+ <value>none</value>
+ <!-- Single Line Border -->
+ <value>single</value>
+ <!-- Thick Line Border -->
+ <value>thick</value>
+ <!-- Double Line Border -->
+ <value>double</value>
+ <!-- Hairline Border -->
+ <value>hairline</value>
+ <!-- Dotted Border -->
+ <value>dot</value>
+ <!-- pecifies a line border consisting of a dashed line around the parent object. -->
+ <value>dash</value>
+ <!-- Dot Dash Border -->
+ <value>dotDash</value>
+ <!-- Dash Dot Dot Border -->
+ <value>dashDotDot</value>
+ <!-- Triple Line Border -->
+ <value>triple</value>
+ <!-- Thin Thick Small Gap Border -->
+ <value>thinThickSmall</value>
+ <!-- Small thick-thin lines border -->
+ <value>thickThinSmall</value>
+ <!-- Small thin-thick-thin Lines Border -->
+ <value>thickBetweenThinSmall</value>
+ <!-- Thin Thick Line Border -->
+ <value>thinThick</value>
+ <!-- Thick Thin Line Border -->
+ <value>thickThin</value>
+ <!-- Thin-thick-thin Border -->
+ <value>thickBetweenThin</value>
+ <!-- Thin Thick Large Gap Border -->
+ <value>thinThickLarge</value>
+ <!-- Thick Thin Large Gap Border -->
+ <value>thickThinLarge</value>
+ <!-- Large thin-thick-thin Border -->
+ <value>thickBetweenThinLarge</value>
+ <!-- Wavy Border -->
+ <value>wave</value>
+ <!-- Double Wavy Lines Border -->
+ <value>doubleWave</value>
+ <!-- Small Dash Border -->
+ <value>dashedSmall</value>
+ <!-- Stroked Dash Dot Border -->
+ <value>dashDotStroked</value>
+ <!-- 3D Embossed Border -->
+ <value>threeDEmboss</value>
+ <!-- 3D Engraved Border -->
+ <value>threeDEngrave</value>
+ <!-- Outset Border -->
+ <value>HTMLOutset</value>
+ <!-- Inset Border -->
+ <value>HTMLInset</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_BorderShadow">
+ <list>
+ <xs:documentation>Border Shadow Type</xs:documentation>
+ <choice>
+ <!-- True -->
+ <value>t</value>
+ <!-- True -->
+ <value>true</value>
+ <!-- False -->
+ <value>f</value>
+ <!-- False -->
+ <value>false</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_WrapType">
+ <list>
+ <xs:documentation>Text Wrapping Type</xs:documentation>
+ <choice>
+ <!-- Top and bottom wrapping -->
+ <value>topAndBottom</value>
+ <!-- Square wrapping -->
+ <value>square</value>
+ <!-- No wrapping -->
+ <value>none</value>
+ <!-- Tight wrapping -->
+ <value>tight</value>
+ <!-- Through wrapping -->
+ <value>through</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_WrapSide">
+ <list>
+ <xs:documentation>Text Wrapping Side</xs:documentation>
+ <choice>
+ <!-- Both sides -->
+ <value>both</value>
+ <!-- Left side -->
+ <value>left</value>
+ <!-- Right side -->
+ <value>right</value>
+ <!-- Largest side -->
+ <value>largest</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_HorizontalAnchor">
+ <list>
+ <xs:documentation>Horizontal Anchor Type</xs:documentation>
+ <choice>
+ <!-- Margin -->
+ <value>margin</value>
+ <!-- Page -->
+ <value>page</value>
+ <!-- Text -->
+ <value>text</value>
+ <!-- Character -->
+ <value>char</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_VerticalAnchor">
+ <list>
+ <xs:documentation>Vertical Anchor Type</xs:documentation>
+ <choice>
+ <!-- Margin -->
+ <value>margin</value>
+ <!-- Page -->
+ <value>page</value>
+ <!-- Text -->
+ <value>text</value>
+ <!-- Line -->
+ <value>line</value>
+ </choice>
+ </list>
+ </define>
+ </grammar>
+ <resource name="wrap" resource="Properties" tag="shape">
+ <element name="wrap" tokenid="ooxml:wrap_wrap"/>
+ </resource>
+ <resource name="CT_Wrap" resource="Properties" tag="shape">
+ <attribute name="type" tokenid="ooxml:CT_Wrap_type"/>
+ <attribute name="side" tokenid="ooxml:CT_Wrap_side"/>
+ <attribute name="anchorx" tokenid="ooxml:CT_Wrap_anchorx"/>
+ <attribute name="anchory" tokenid="ooxml:CT_Wrap_anchory"/>
+ </resource>
+ <resource name="ST_BorderType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_none">none</value>
+ <value name="single" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_single">single</value>
+ <value name="thick" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thick">thick</value>
+ <value name="double" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_double">double</value>
+ <value name="hairline" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_hairline">hairline</value>
+ <value name="dot" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_dot">dot</value>
+ <value name="dash" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_dash">dash</value>
+ <value name="dotDash" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_dotDash">dotDash</value>
+ <value name="dashDotDot" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_dashDotDot">dashDotDot</value>
+ <value name="triple" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_triple">triple</value>
+ <value name="thinThickSmall" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thinThickSmall">thinThickSmall</value>
+ <value name="thickThinSmall" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thickThinSmall">thickThinSmall</value>
+ <value name="thickBetweenThinSmall" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thickBetweenThinSmall">thickBetweenThinSmall</value>
+ <value name="thinThick" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thinThick">thinThick</value>
+ <value name="thickThin" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thickThin">thickThin</value>
+ <value name="thickBetweenThin" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thickBetweenThin">thickBetweenThin</value>
+ <value name="thinThickLarge" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thinThickLarge">thinThickLarge</value>
+ <value name="thickThinLarge" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thickThinLarge">thickThinLarge</value>
+ <value name="thickBetweenThinLarge" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_thickBetweenThinLarge">thickBetweenThinLarge</value>
+ <value name="wave" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_wave">wave</value>
+ <value name="doubleWave" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_doubleWave">doubleWave</value>
+ <value name="dashedSmall" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_dashedSmall">dashedSmall</value>
+ <value name="dashDotStroked" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_dashDotStroked">dashDotStroked</value>
+ <value name="threeDEmboss" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_threeDEmboss">threeDEmboss</value>
+ <value name="threeDEngrave" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_threeDEngrave">threeDEngrave</value>
+ <value name="HTMLOutset" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_HTMLOutset">HTMLOutset</value>
+ <value name="HTMLInset" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderType_HTMLInset">HTMLInset</value>
+ </resource>
+ <resource name="ST_BorderShadow" resource="List" generated="yes">
+ <value name="t" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderShadow_t">t</value>
+ <value name="true" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderShadow_true">true</value>
+ <value name="f" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderShadow_f">f</value>
+ <value name="false" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_BorderShadow_false">false</value>
+ </resource>
+ <resource name="ST_WrapType" resource="List" generated="yes">
+ <value name="topAndBottom" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_topAndBottom">topAndBottom</value>
+ <value name="square" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_square">square</value>
+ <value name="none" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_none">none</value>
+ <value name="tight" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_tight">tight</value>
+ <value name="through" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapType_through">through</value>
+ </resource>
+ <resource name="ST_WrapSide" resource="List" generated="yes">
+ <value name="both" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_both">both</value>
+ <value name="left" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_left">left</value>
+ <value name="right" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_right">right</value>
+ <value name="largest" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_WrapSide_largest">largest</value>
+ </resource>
+ <resource name="ST_HorizontalAnchor" resource="List" generated="yes">
+ <value name="margin" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_margin">margin</value>
+ <value name="page" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_page">page</value>
+ <value name="text" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_text">text</value>
+ <value name="char" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_HorizontalAnchor_char">char</value>
+ </resource>
+ <resource name="ST_VerticalAnchor" resource="List" generated="yes">
+ <value name="margin" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_margin">margin</value>
+ <value name="page" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_page">page</value>
+ <value name="text" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_text">text</value>
+ <value name="line" tokenid="ooxml:Value_vml_wordprocessingDrawing_ST_VerticalAnchor_line">line</value>
+ </resource>
+ </namespace>
+ <namespace name="wml" file="wml.rng">
+ <start name="recipients"/>
+ <start name="txbxContent"/>
+ <start name="comments"/>
+ <start name="footnotes"/>
+ <start name="endnotes"/>
+ <start name="hdr"/>
+ <start name="ftr"/>
+ <start name="settings"/>
+ <start name="webSettings"/>
+ <start name="fonts"/>
+ <start name="numbering"/>
+ <start name="styles"/>
+ <start name="document"/>
+ <start name="glossaryDocument"/>
+ <grammar xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:rel="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2006/xpath-functions" xmlns="http://relaxng.org/ns/structure/1.0" ns="http://schemas.openxmlformats.org/wordprocessingml/2006/main" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes" attributeFormDefault="qualified">
+ <!-- ISO RELAX NG Schema -->
+ <include href="shared-customXmlSchemaProperties.rng"/>
+ <include href="shared-math.rng"/>
+ <include href="dml-wordprocessingDrawing.rng"/>
+ <include href="shared-relationshipReference.rng"/>
+ <!-- start = recipients | txbxContent | comments | footnotes | endnotes | hdr | ftr | settings | webSettings | fonts | numbering | styles | document | glossaryDocument -->
+ <define name="CT_Empty">
+ <empty/>
+ </define>
+ <define name="ST_OnOff">
+ <list>
+ <xs:documentation>On/Off Value</xs:documentation>
+ <choice>
+ <!-- True -->
+ <value>true</value>
+ <!-- False -->
+ <value>false</value>
+ <!-- True -->
+ <value>on</value>
+ <!-- False -->
+ <value>off</value>
+ <!-- False -->
+ <value>0</value>
+ <!-- True -->
+ <value>1</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_OnOff">
+ <attribute name="val">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>On/Off Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_LongHexNumber">
+ <data type="hexBinary">
+ <xs:documentation>Four Digit Hexadecimal Number Value</xs:documentation>
+ <param name="length">4</param>
+ </data>
+ </define>
+ <define name="CT_LongHexNumber">
+ <attribute name="val">
+ <ref name="ST_LongHexNumber"/>
+ <xs:documentation>Long Hexadecimal Number Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_ShortHexNumber">
+ <data type="hexBinary">
+ <xs:documentation>Two Digit Hexadecimal Number Value</xs:documentation>
+ <param name="length">2</param>
+ </data>
+ </define>
+ <define name="CT_ShortHexNumber">
+ <attribute name="val">
+ <ref name="ST_ShortHexNumber"/>
+ <xs:documentation>Two Digit Hexadecimal Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_UcharHexNumber">
+ <data type="hexBinary">
+ <xs:documentation>Two Digit Hexadecimal Number Value</xs:documentation>
+ <param name="length">1</param>
+ </data>
+ </define>
+ <define name="CT_UcharHexNumber">
+ <attribute name="val">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_DecimalNumber">
+ <data type="integer">
+ <xs:documentation>Decimal Number Value</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_DecimalNumber">
+ <attribute name="val">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Decimal Number Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_UnsignedDecimalNumber">
+ <data type="unsignedLong">
+ <xs:documentation>Unsigned Decimal Number Value</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_TwipsMeasure">
+ <data type="unsignedLong">
+ <xs:documentation>Measurement in Twentieths of a Point</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_TwipsMeasure">
+ <attribute name="val">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Measurement in Twentieths of a Point</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_SignedTwipsMeasure">
+ <data type="integer">
+ <xs:documentation>Signed Measurement in Twentieths of a Point</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_SignedTwipsMeasure">
+ <attribute name="val">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Positive or Negative Value in Twentieths of a Point</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_PixelsMeasure">
+ <data type="unsignedLong">
+ <xs:documentation>Measurement in Pixels</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_PixelsMeasure">
+ <attribute name="val">
+ <ref name="ST_PixelsMeasure"/>
+ <xs:documentation>Measurement in Pixels</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_HpsMeasure">
+ <data type="unsignedLong">
+ <xs:documentation>Measurement in Half-Points</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_HpsMeasure">
+ <attribute name="val">
+ <ref name="ST_HpsMeasure"/>
+ <xs:documentation>Half Point Measurement</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_SignedHpsMeasure">
+ <data type="integer">
+ <xs:documentation>Signed Measurement in Half-Points</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_SignedHpsMeasure">
+ <attribute name="val">
+ <ref name="ST_SignedHpsMeasure"/>
+ <xs:documentation>Signed Half-Point Measurement</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_DateTime">
+ <data type="dateTime">
+ <xs:documentation>Standard Date and Time Storage Format</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_MacroName">
+ <data type="string">
+ <xs:documentation>Script Subroutine Name Value</xs:documentation>
+ <param name="maxLength">33</param>
+ </data>
+ </define>
+ <define name="CT_MacroName">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Name of Script Function</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_EighthPointMeasure">
+ <data type="unsignedLong">
+ <xs:documentation>Measurement in Eighths of a Point</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_PointMeasure">
+ <data type="unsignedLong">
+ <xs:documentation>Measurement in Points</xs:documentation>
+ </data>
+ </define>
+ <define name="ST_String">
+ <data type="string">
+ <xs:documentation>String</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_String">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>String Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TextScale">
+ <data type="integer">
+ <xs:documentation>Text Expansion/Compression Percentage</xs:documentation>
+ <param name="minInclusive">0</param>
+ <param name="maxInclusive">600</param>
+ </data>
+ </define>
+ <define name="CT_TextScale">
+ <attribute name="val">
+ <ref name="ST_TextScale"/>
+ <xs:documentation>Text Expansion/Compression Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_HighlightColor">
+ <list>
+ <xs:documentation>Text Highlight Colors</xs:documentation>
+ <choice>
+ <!-- Black Highlighting Color -->
+ <value>black</value>
+ <!-- Blue Highlighting Color -->
+ <value>blue</value>
+ <!-- Cyan Highlighting Color -->
+ <value>cyan</value>
+ <!-- Green Highlighting Color -->
+ <value>green</value>
+ <!-- Magenta Highlighting Color -->
+ <value>magenta</value>
+ <!-- Red Highlighting Color -->
+ <value>red</value>
+ <!-- Yellow Highlighting Color -->
+ <value>yellow</value>
+ <!-- White Highlighting Color -->
+ <value>white</value>
+ <!-- Dark Blue Highlighting Color -->
+ <value>darkBlue</value>
+ <!-- Dark Cyan Highlighting Color -->
+ <value>darkCyan</value>
+ <!-- Dark Green Highlighting Color -->
+ <value>darkGreen</value>
+ <!-- Dark Magenta Highlighting Color -->
+ <value>darkMagenta</value>
+ <!-- Dark Red Highlighting Color -->
+ <value>darkRed</value>
+ <!-- Dark Yellow Highlighting Color -->
+ <value>darkYellow</value>
+ <!-- Dark Gray Highlighting Color -->
+ <value>darkGray</value>
+ <!-- Light Gray Highlighting Color -->
+ <value>lightGray</value>
+ <!-- No Text Highlighting -->
+ <value>none</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Highlight">
+ <attribute name="val">
+ <ref name="ST_HighlightColor"/>
+ <xs:documentation>Highlighting Color</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_HexColorAuto">
+ <list>
+ <xs:documentation>‘Automatic’ Color Value</xs:documentation>
+ <!-- Automatically Determined Color -->
+ <value>auto</value>
+ </list>
+ </define>
+ <define name="ST_HexColorRGB">
+ <data type="hexBinary">
+ <xs:documentation>Hexadecimal Color Value</xs:documentation>
+ <param name="length">3</param>
+ </data>
+ </define>
+ <define name="ST_HexColor">
+ <choice>
+ <ref name="ST_HexColorAuto"/>
+ <ref name="ST_HexColorRGB"/>
+ </choice>
+ </define>
+ <!-- Union -->
+ <define name="CT_Color">
+ <attribute name="val">
+ <ref name="ST_HexColor"/>
+ <xs:documentation>Run Content Color</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="themeColor">
+ <ref name="ST_ThemeColor"/>
+ <xs:documentation>Run Content Theme Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeTint">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Run Content Theme Color Tint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeShade">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Run Content Theme Color Shade</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_LangCode">
+ <data type="hexBinary">
+ <xs:documentation>Two Digit Hexadecimal Language Code</xs:documentation>
+ <param name="length">2</param>
+ </data>
+ </define>
+ <define name="ST_Lang">
+ <choice>
+ <ref name="ST_LangCode"/>
+ <ref name="ST_String"/>
+ </choice>
+ </define>
+ <!-- Union -->
+ <define name="CT_Lang">
+ <attribute name="val">
+ <ref name="ST_Lang"/>
+ <xs:documentation>Language Code</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Guid">
+ <data type="token">
+ <xs:documentation>128-Bit GUID</xs:documentation>
+ <param name="pattern">\{[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}\}</param>
+ </data>
+ </define>
+ <define name="CT_Guid">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>GUID Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Underline">
+ <list>
+ <xs:documentation>Underline Patterns</xs:documentation>
+ <choice>
+ <!-- Single Underline -->
+ <value>single</value>
+ <!-- Underline Non-Space Characters Only -->
+ <value>words</value>
+ <!-- Double Underline -->
+ <value>double</value>
+ <!-- Thick Underline -->
+ <value>thick</value>
+ <!-- Dotted Underline -->
+ <value>dotted</value>
+ <!-- Thick Dotted Underline -->
+ <value>dottedHeavy</value>
+ <!-- Dashed Underline -->
+ <value>dash</value>
+ <!-- Thick Dashed Underline -->
+ <value>dashedHeavy</value>
+ <!-- Long Dashed Underline -->
+ <value>dashLong</value>
+ <!-- Thick Long Dashed Underline -->
+ <value>dashLongHeavy</value>
+ <!-- Dash-Dot Underline -->
+ <value>dotDash</value>
+ <!-- Thick Dash-Dot Underline -->
+ <value>dashDotHeavy</value>
+ <!-- Dash-Dot-Dot Underline -->
+ <value>dotDotDash</value>
+ <!-- Thick Dash-Dot-Dot Underline -->
+ <value>dashDotDotHeavy</value>
+ <!-- Wave Underline -->
+ <value>wave</value>
+ <!-- Heavy Wave Underline -->
+ <value>wavyHeavy</value>
+ <!-- Double Wave Underline -->
+ <value>wavyDouble</value>
+ <!-- No Underline -->
+ <value>none</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Underline">
+ <optional><attribute name="val"><ref name="ST_Underline"/><xs:documentation>Underline Style</xs:documentation></attribute>ST_String
+ </optional>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Underline Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeColor">
+ <text/>
+ <xs:documentation>Underline Theme Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeTint">
+ <text/>
+ <xs:documentation>Underline Theme Color Tint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeShade">
+ <text/>
+ <xs:documentation>Underline Theme Color Shade</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_TextEffect">
+ <list>
+ <xs:documentation>Animated Text Effects</xs:documentation>
+ <choice>
+ <!-- Blinking Background Animation -->
+ <value>blinkBackground</value>
+ <!-- Colored Lights Animation -->
+ <value>lights</value>
+ <!-- Black Dashed Line Animation -->
+ <value>antsBlack</value>
+ <!-- Marching Red Ants -->
+ <value>antsRed</value>
+ <!-- Shimmer Animation -->
+ <value>shimmer</value>
+ <!-- Sparkling Lights Animation -->
+ <value>sparkle</value>
+ <!-- No Animation -->
+ <value>none</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TextEffect">
+ <attribute name="val">
+ <ref name="ST_TextEffect"/>
+ <xs:documentation>Animated Text Effect Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Border">
+ <list>
+ <xs:documentation>Border Styles</xs:documentation>
+ <choice>
+ <!-- No Border -->
+ <value>nil</value>
+ <!-- No Border -->
+ <value>none</value>
+ <!-- Single Line Border -->
+ <value>single</value>
+ <!-- Single Line Border -->
+ <value>thick</value>
+ <!-- Double Line Border -->
+ <value>double</value>
+ <!-- Dotted Line Border -->
+ <value>dotted</value>
+ <!-- Dashed Line Border -->
+ <value>dashed</value>
+ <!-- Dot Dash Line Border -->
+ <value>dotDash</value>
+ <!-- Dot Dot Dash Line Border -->
+ <value>dotDotDash</value>
+ <!-- Triple Line Border -->
+ <value>triple</value>
+ <!-- Thin, Thick Line Border -->
+ <value>thinThickSmallGap</value>
+ <!-- Thick, Thin Line Border -->
+ <value>thickThinSmallGap</value>
+ <!-- Thin, Thick, Thin Line Border -->
+ <value>thinThickThinSmallGap</value>
+ <!-- Thin, Thick Line Border -->
+ <value>thinThickMediumGap</value>
+ <!-- Thick, Thin Line Border -->
+ <value>thickThinMediumGap</value>
+ <!-- Thin, Thick, Thin Line Border -->
+ <value>thinThickThinMediumGap</value>
+ <!-- Thin, Thick Line Border -->
+ <value>thinThickLargeGap</value>
+ <!-- Thick, Thin Line Border -->
+ <value>thickThinLargeGap</value>
+ <!-- Thin, Thick, Thin Line Border -->
+ <value>thinThickThinLargeGap</value>
+ <!-- Wavy Line Border -->
+ <value>wave</value>
+ <!-- Double Wave Line Border -->
+ <value>doubleWave</value>
+ <!-- Dashed Line Border -->
+ <value>dashSmallGap</value>
+ <!-- Dash Dot Strokes Line Border -->
+ <value>dashDotStroked</value>
+ <!-- 3D Embossed Line Border -->
+ <value>threeDEmboss</value>
+ <!-- 3D Engraved Line Border -->
+ <value>threeDEngrave</value>
+ <!-- Outset Line Border -->
+ <value>outset</value>
+ <!-- Inset Line Border -->
+ <value>inset</value>
+ <!-- Apples Art Border -->
+ <value>apples</value>
+ <!-- Arched Scallops Art Border -->
+ <value>archedScallops</value>
+ <!-- Baby Pacifier Art Border -->
+ <value>babyPacifier</value>
+ <!-- Baby Rattle Art Border -->
+ <value>babyRattle</value>
+ <!-- Three Color Balloons Art Border -->
+ <value>balloons3Colors</value>
+ <!-- Hot Air Balloons Art Border -->
+ <value>balloonsHotAir</value>
+ <!-- Black Dash Art Border -->
+ <value>basicBlackDashes</value>
+ <!-- Black Dot Art Border -->
+ <value>basicBlackDots</value>
+ <!-- Black Square Art Border -->
+ <value>basicBlackSquares</value>
+ <!-- Thin Line Art Border -->
+ <value>basicThinLines</value>
+ <!-- White Dash Art Border -->
+ <value>basicWhiteDashes</value>
+ <!-- White Dot Art Border -->
+ <value>basicWhiteDots</value>
+ <!-- White Square Art Border -->
+ <value>basicWhiteSquares</value>
+ <!-- Wide Inline Art Border -->
+ <value>basicWideInline</value>
+ <!-- Wide Midline Art Border -->
+ <value>basicWideMidline</value>
+ <!-- Wide Outline Art Border -->
+ <value>basicWideOutline</value>
+ <!-- Bats Art Border -->
+ <value>bats</value>
+ <!-- Birds Art Border -->
+ <value>birds</value>
+ <!-- Birds Flying Art Border -->
+ <value>birdsFlight</value>
+ <!-- Cabin Art Border -->
+ <value>cabins</value>
+ <!-- Cake Art Border -->
+ <value>cakeSlice</value>
+ <!-- Candy Corn Art Border -->
+ <value>candyCorn</value>
+ <!-- Knot Work Art Border -->
+ <value>celticKnotwork</value>
+ <!-- Certificate Banner Art Border -->
+ <value>certificateBanner</value>
+ <!-- Chain Link Art Border -->
+ <value>chainLink</value>
+ <!-- Champagne Bottle Art Border -->
+ <value>champagneBottle</value>
+ <!-- Black and White Bar Art Border -->
+ <value>checkedBarBlack</value>
+ <!-- Color Checked Bar Art Border -->
+ <value>checkedBarColor</value>
+ <!-- Checkerboard Art Border -->
+ <value>checkered</value>
+ <!-- Christmas Tree Art Border -->
+ <value>christmasTree</value>
+ <!-- Circles And Lines Art Border -->
+ <value>circlesLines</value>
+ <!-- Circles and Rectangles Art Border -->
+ <value>circlesRectangles</value>
+ <!-- Wave Art Border -->
+ <value>classicalWave</value>
+ <!-- Clocks Art Border -->
+ <value>clocks</value>
+ <!-- Compass Art Border -->
+ <value>compass</value>
+ <!-- Confetti Art Border -->
+ <value>confetti</value>
+ <!-- Confetti Art Border -->
+ <value>confettiGrays</value>
+ <!-- Confetti Art Border -->
+ <value>confettiOutline</value>
+ <!-- Confetti Streamers Art Border -->
+ <value>confettiStreamers</value>
+ <!-- Confetti Art Border -->
+ <value>confettiWhite</value>
+ <!-- Corner Triangle Art Border -->
+ <value>cornerTriangles</value>
+ <!-- Dashed Line Art Border -->
+ <value>couponCutoutDashes</value>
+ <!-- Dotted Line Art Border -->
+ <value>couponCutoutDots</value>
+ <!-- Maze Art Border -->
+ <value>crazyMaze</value>
+ <!-- Butterfly Art Border -->
+ <value>creaturesButterfly</value>
+ <!-- Fish Art Border -->
+ <value>creaturesFish</value>
+ <!-- Insects Art Border -->
+ <value>creaturesInsects</value>
+ <!-- Ladybug Art Border -->
+ <value>creaturesLadyBug</value>
+ <!-- Cross-stitch Art Border -->
+ <value>crossStitch</value>
+ <!-- Cupid Art Border -->
+ <value>cup</value>
+ <!-- Archway Art Border -->
+ <value>decoArch</value>
+ <!-- Color Archway Art Border -->
+ <value>decoArchColor</value>
+ <!-- Blocks Art Border -->
+ <value>decoBlocks</value>
+ <!-- Gray Diamond Art Border -->
+ <value>diamondsGray</value>
+ <!-- Double D Art Border -->
+ <value>doubleD</value>
+ <!-- Diamond Art Border -->
+ <value>doubleDiamonds</value>
+ <!-- Earth Art Border -->
+ <value>earth1</value>
+ <!-- Earth Art Border -->
+ <value>earth2</value>
+ <!-- Shadowed Square Art Border -->
+ <value>eclipsingSquares1</value>
+ <!-- Shadowed Square Art Border -->
+ <value>eclipsingSquares2</value>
+ <!-- Painted Egg Art Border -->
+ <value>eggsBlack</value>
+ <!-- Fans Art Border -->
+ <value>fans</value>
+ <!-- Film Reel Art Border -->
+ <value>film</value>
+ <!-- Firecracker Art Border -->
+ <value>firecrackers</value>
+ <!-- Flowers Art Border -->
+ <value>flowersBlockPrint</value>
+ <!-- Daisy Art Border -->
+ <value>flowersDaisies</value>
+ <!-- Flowers Art Border -->
+ <value>flowersModern1</value>
+ <!-- Flowers Art Border -->
+ <value>flowersModern2</value>
+ <!-- Pansy Art Border -->
+ <value>flowersPansy</value>
+ <!-- Red Rose Art Border -->
+ <value>flowersRedRose</value>
+ <!-- Roses Art Border -->
+ <value>flowersRoses</value>
+ <!-- Flowers in a Teacup Art Border -->
+ <value>flowersTeacup</value>
+ <!-- Small Flower Art Border -->
+ <value>flowersTiny</value>
+ <!-- Gems Art Border -->
+ <value>gems</value>
+ <!-- Gingerbread Man Art Border -->
+ <value>gingerbreadMan</value>
+ <!-- Triangle Gradient Art Border -->
+ <value>gradient</value>
+ <!-- Handmade Art Border -->
+ <value>handmade1</value>
+ <!-- Handmade Art Border -->
+ <value>handmade2</value>
+ <!-- Heart-Shaped Balloon Art Border -->
+ <value>heartBalloon</value>
+ <!-- Gray Heart Art Border -->
+ <value>heartGray</value>
+ <!-- Hearts Art Border -->
+ <value>hearts</value>
+ <!-- Pattern Art Border -->
+ <value>heebieJeebies</value>
+ <!-- Holly Art Border -->
+ <value>holly</value>
+ <!-- House Art Border -->
+ <value>houseFunky</value>
+ <!-- Circular Art Border -->
+ <value>hypnotic</value>
+ <!-- Ice Cream Cone Art Border -->
+ <value>iceCreamCones</value>
+ <!-- Light Bulb Art Border -->
+ <value>lightBulb</value>
+ <!-- Lightning Art Border -->
+ <value>lightning1</value>
+ <!-- Lightning Art Border -->
+ <value>lightning2</value>
+ <!-- Map Pins Art Border -->
+ <value>mapPins</value>
+ <!-- Maple Leaf Art Border -->
+ <value>mapleLeaf</value>
+ <!-- Muffin Art Border -->
+ <value>mapleMuffins</value>
+ <!-- Marquee Art Border -->
+ <value>marquee</value>
+ <!-- Marquee Art Border -->
+ <value>marqueeToothed</value>
+ <!-- Moon Art Border -->
+ <value>moons</value>
+ <!-- Mosaic Art Border -->
+ <value>mosaic</value>
+ <!-- Musical Note Art Border -->
+ <value>musicNotes</value>
+ <!-- Patterned Art Border -->
+ <value>northwest</value>
+ <!-- Oval Art Border -->
+ <value>ovals</value>
+ <!-- Package Art Border -->
+ <value>packages</value>
+ <!-- Black Palm Tree Art Border -->
+ <value>palmsBlack</value>
+ <!-- Color Palm Tree Art Border -->
+ <value>palmsColor</value>
+ <!-- Paper Clip Art Border -->
+ <value>paperClips</value>
+ <!-- Papyrus Art Border -->
+ <value>papyrus</value>
+ <!-- Party Favor Art Border -->
+ <value>partyFavor</value>
+ <!-- Party Glass Art Border -->
+ <value>partyGlass</value>
+ <!-- Pencils Art Border -->
+ <value>pencils</value>
+ <!-- Character Art Border -->
+ <value>people</value>
+ <!-- Waving Character Border -->
+ <value>peopleWaving</value>
+ <!-- Character With Hat Art Border -->
+ <value>peopleHats</value>
+ <!-- Poinsettia Art Border -->
+ <value>poinsettias</value>
+ <!-- Postage Stamp Art Border -->
+ <value>postageStamp</value>
+ <!-- Pumpkin Art Border -->
+ <value>pumpkin1</value>
+ <!-- Push Pin Art Border -->
+ <value>pushPinNote2</value>
+ <!-- Push Pin Art Border -->
+ <value>pushPinNote1</value>
+ <!-- Pyramid Art Border -->
+ <value>pyramids</value>
+ <!-- Pyramid Art Border -->
+ <value>pyramidsAbove</value>
+ <!-- Quadrants Art Border -->
+ <value>quadrants</value>
+ <!-- Rings Art Border -->
+ <value>rings</value>
+ <!-- Safari Art Border -->
+ <value>safari</value>
+ <!-- Saw tooth Art Border -->
+ <value>sawtooth</value>
+ <!-- Gray Saw tooth Art Border -->
+ <value>sawtoothGray</value>
+ <!-- Scared Cat Art Border -->
+ <value>scaredCat</value>
+ <!-- Umbrella Art Border -->
+ <value>seattle</value>
+ <!-- Shadowed Squares Art Border -->
+ <value>shadowedSquares</value>
+ <!-- Shark Tooth Art Border -->
+ <value>sharksTeeth</value>
+ <!-- Bird Tracks Art Border -->
+ <value>shorebirdTracks</value>
+ <!-- Rocket Art Border -->
+ <value>skyrocket</value>
+ <!-- Snowflake Art Border -->
+ <value>snowflakeFancy</value>
+ <!-- Snowflake Art Border -->
+ <value>snowflakes</value>
+ <!-- Sombrero Art Border -->
+ <value>sombrero</value>
+ <!-- Southwest-themed Art Border -->
+ <value>southwest</value>
+ <!-- Stars Art Border -->
+ <value>stars</value>
+ <!-- Stars On Top Art Border -->
+ <value>starsTop</value>
+ <!-- 3-D Stars Art Border -->
+ <value>stars3d</value>
+ <!-- Stars Art Border -->
+ <value>starsBlack</value>
+ <!-- Stars With Shadows Art Border -->
+ <value>starsShadowed</value>
+ <!-- Sun Art Border -->
+ <value>sun</value>
+ <!-- Whirligig Art Border -->
+ <value>swirligig</value>
+ <!-- Torn Paper Art Border -->
+ <value>tornPaper</value>
+ <!-- Black Torn Paper Art Border -->
+ <value>tornPaperBlack</value>
+ <!-- Tree Art Border -->
+ <value>trees</value>
+ <!-- Triangle Art Border -->
+ <value>triangleParty</value>
+ <!-- Triangles Art Border -->
+ <value>triangles</value>
+ <!-- Tribal Art Border One -->
+ <value>tribal1</value>
+ <!-- Tribal Art Border Two -->
+ <value>tribal2</value>
+ <!-- Tribal Art Border Three -->
+ <value>tribal3</value>
+ <!-- Tribal Art Border Four -->
+ <value>tribal4</value>
+ <!-- Tribal Art Border Five -->
+ <value>tribal5</value>
+ <!-- Tribal Art Border Six -->
+ <value>tribal6</value>
+ <!-- Twisted Lines Art Border -->
+ <value>twistedLines1</value>
+ <!-- Twisted Lines Art Border -->
+ <value>twistedLines2</value>
+ <!-- Vine Art Border -->
+ <value>vine</value>
+ <!-- Wavy Line Art Border -->
+ <value>waveline</value>
+ <!-- Weaving Angles Art Border -->
+ <value>weavingAngles</value>
+ <!-- Weaving Braid Art Border -->
+ <value>weavingBraid</value>
+ <!-- Weaving Ribbon Art Border -->
+ <value>weavingRibbon</value>
+ <!-- Weaving Strips Art Border -->
+ <value>weavingStrips</value>
+ <!-- White Flowers Art Border -->
+ <value>whiteFlowers</value>
+ <!-- Woodwork Art Border -->
+ <value>woodwork</value>
+ <!-- Crisscross Art Border -->
+ <value>xIllusions</value>
+ <!-- Triangle Art Border -->
+ <value>zanyTriangles</value>
+ <!-- Zigzag Art Border -->
+ <value>zigZag</value>
+ <!-- Zigzag stitch -->
+ <value>zigZagStitch</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Border">
+ <attribute name="val">
+ <ref name="ST_Border"/>
+ <xs:documentation>Border Style</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="color">
+ <ref name="ST_HexColor"/>
+ <xs:documentation>Border Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeColor">
+ <ref name="ST_ThemeColor"/>
+ <xs:documentation>Border Theme Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeTint">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Border Theme Color Tint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeShade">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Border Theme Color Shade</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sz">
+ <ref name="ST_EighthPointMeasure"/>
+ <xs:documentation>Border Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="space">
+ <ref name="ST_PointMeasure"/>
+ <xs:documentation>Border Spacing Measurement</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="shadow">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Border Shadow</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="frame">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Create Frame Effect</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_Shd">
+ <list>
+ <xs:documentation>Shading Patterns</xs:documentation>
+ <choice>
+ <!-- No Pattern -->
+ <value>nil</value>
+ <!-- No Pattern -->
+ <value>clear</value>
+ <!-- 100% Fill Pattern -->
+ <value>solid</value>
+ <!-- Horizontal Stripe Pattern -->
+ <value>horzStripe</value>
+ <!-- Vertical Stripe Pattern -->
+ <value>vertStripe</value>
+ <!-- Reverse Diagonal Stripe Pattern -->
+ <value>reverseDiagStripe</value>
+ <!-- Diagonal Stripe Pattern -->
+ <value>diagStripe</value>
+ <!-- Horizontal Cross Pattern -->
+ <value>horzCross</value>
+ <!-- Diagonal Cross Pattern -->
+ <value>diagCross</value>
+ <!-- Thin Horizontal Stripe Pattern -->
+ <value>thinHorzStripe</value>
+ <!-- Thin Vertical Stripe Pattern -->
+ <value>thinVertStripe</value>
+ <!-- Thin Reverse Diagonal Stripe Pattern -->
+ <value>thinReverseDiagStripe</value>
+ <!-- Thin Diagonal Stripe Pattern -->
+ <value>thinDiagStripe</value>
+ <!-- Thin Horizontal Cross Pattern -->
+ <value>thinHorzCross</value>
+ <!-- Thin Diagonal Cross Pattern -->
+ <value>thinDiagCross</value>
+ <!-- 5% Fill Pattern -->
+ <value>pct5</value>
+ <!-- 10% Fill Pattern -->
+ <value>pct10</value>
+ <!-- 12.5% Fill Pattern -->
+ <value>pct12</value>
+ <!-- 15% Fill Pattern -->
+ <value>pct15</value>
+ <!-- 20% Fill Pattern -->
+ <value>pct20</value>
+ <!-- 25% Fill Pattern -->
+ <value>pct25</value>
+ <!-- 30% Fill Pattern -->
+ <value>pct30</value>
+ <!-- 35% Fill Pattern -->
+ <value>pct35</value>
+ <!-- 37.5% Fill Pattern -->
+ <value>pct37</value>
+ <!-- 40% Fill Pattern -->
+ <value>pct40</value>
+ <!-- 45% Fill Pattern -->
+ <value>pct45</value>
+ <!-- 50% Fill Pattern -->
+ <value>pct50</value>
+ <!-- 55% Fill Pattern -->
+ <value>pct55</value>
+ <!-- 60% Fill Pattern -->
+ <value>pct60</value>
+ <!-- 62.5% Fill Pattern -->
+ <value>pct62</value>
+ <!-- 65% Fill Pattern -->
+ <value>pct65</value>
+ <!-- 70% Fill Pattern -->
+ <value>pct70</value>
+ <!-- 75% Fill Pattern -->
+ <value>pct75</value>
+ <!-- 80% Fill Pattern -->
+ <value>pct80</value>
+ <!-- 85% Fill Pattern -->
+ <value>pct85</value>
+ <!-- 87.5% Fill Pattern -->
+ <value>pct87</value>
+ <!-- 90% Fill Pattern -->
+ <value>pct90</value>
+ <!-- 95% Fill Pattern -->
+ <value>pct95</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Shd">
+ <attribute name="val">
+ <ref name="ST_Shd"/>
+ <xs:documentation>Shading Pattern</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="color">
+ <ref name="ST_HexColor"/>
+ <xs:documentation>Shading Pattern Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeColor">
+ <ref name="ST_ThemeColor"/>
+ <xs:documentation>Shading Pattern Theme Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeTint">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Shading Pattern Theme Color Tint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeShade">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Shading Pattern Theme Color Shade</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="fill">
+ <ref name="ST_HexColor"/>
+ <xs:documentation>Shading Background Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeFill">
+ <ref name="ST_ThemeColor"/>
+ <xs:documentation>Shading Background Theme Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeFillTint">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Shading Background Theme Color Tint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeFillShade">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Shading Background Theme Color Shade</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_VerticalAlignRun">
+ <list>
+ <xs:documentation>Vertical Positioning Location</xs:documentation>
+ <choice>
+ <!-- Regular Vertical Positioning -->
+ <value>baseline</value>
+ <!-- Superscript -->
+ <value>superscript</value>
+ <!-- Subscript -->
+ <value>subscript</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_VerticalAlignRun">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Subscript/Superscript Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FitText">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Fit Text Run ID</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_Em">
+ <list>
+ <xs:documentation>Emphasis Mark Type</xs:documentation>
+ <choice>
+ <!-- No Emphasis Mark -->
+ <value>none</value>
+ <!-- Dot Emphasis Mark Above Characters -->
+ <value>dot</value>
+ <!-- Comma Emphasis Mark Above Characters -->
+ <value>comma</value>
+ <!-- Circle Emphasis Mark Above Characters -->
+ <value>circle</value>
+ <!-- Dot Emphasis Mark Below Characters -->
+ <value>underDot</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Em">
+ <attribute name="val">
+ <ref name="ST_Em"/>
+ <xs:documentation>Emphasis Mark Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Language">
+ <optional>
+ <attribute name="val">
+ <ref name="ST_Lang"/>
+ <xs:documentation>Latin Language</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="eastAsia">
+ <ref name="ST_Lang"/>
+ <xs:documentation>East Asian Language</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="bidi">
+ <ref name="ST_Lang"/>
+ <xs:documentation>Complex Script Language</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_CombineBrackets">
+ <list>
+ <xs:documentation>Two Lines in One Enclosing Character Type</xs:documentation>
+ <choice>
+ <!-- No Enclosing Brackets -->
+ <value>none</value>
+ <!-- Round Brackets -->
+ <value>round</value>
+ <!-- Square Brackets -->
+ <value>square</value>
+ <!-- Angle Brackets -->
+ <value>angle</value>
+ <!-- Curly Brackets -->
+ <value>curly</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_EastAsianLayout">
+ <optional>
+ <attribute name="id">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>East Asian Typography Run ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="combine">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Two Lines in One</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="combineBrackets">
+ <ref name="ST_CombineBrackets"/>
+ <xs:documentation>Display Brackets Around Two Lines in One</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="vert">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Horizontal in Vertical (Rotate Text)</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="vertCompress">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Compress Rotated Text to Line Height</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_XAlign">
+ <list>
+ <xs:documentation>Horizontal Alignment Location</xs:documentation>
+ <choice>
+ <!-- Left Aligned Horizontally -->
+ <value>left</value>
+ <!-- Centered Horizontally -->
+ <value>center</value>
+ <!-- Right Aligned Horizontally -->
+ <value>right</value>
+ <!-- Inside -->
+ <value>inside</value>
+ <!-- Outside -->
+ <value>outside</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_YAlign">
+ <list>
+ <xs:documentation>Vertical Alignment Location</xs:documentation>
+ <choice>
+ <!-- In line With Text -->
+ <value>inline</value>
+ <!-- Top -->
+ <value>top</value>
+ <!-- Centered Vertically -->
+ <value>center</value>
+ <!-- Bottom -->
+ <value>bottom</value>
+ <!-- Inside Anchor Extents -->
+ <value>inside</value>
+ <!-- Outside Anchor Extents -->
+ <value>outside</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_HeightRule">
+ <list>
+ <xs:documentation>Height Rule</xs:documentation>
+ <choice>
+ <!-- Determine Height Based On Contents -->
+ <value>auto</value>
+ <!-- Exact Height -->
+ <value>exact</value>
+ <!-- Minimum Height -->
+ <value>atLeast</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_Wrap">
+ <list>
+ <xs:documentation>Text Wrapping around Text Frame Type</xs:documentation>
+ <choice>
+ <!-- Default Text Wrapping Around Frame -->
+ <value>auto</value>
+ <!-- No Text Wrapping Beside Frame -->
+ <value>notBeside</value>
+ <!-- Allow Text Wrapping Around Frame -->
+ <value>around</value>
+ <!-- Tight Text Wrapping Around Frame -->
+ <value>tight</value>
+ <!-- Through Text Wrapping Around Frame -->
+ <value>through</value>
+ <!-- No Text Wrapping Around Frame -->
+ <value>none</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_VAnchor">
+ <list>
+ <xs:documentation>Vertical Anchor Location</xs:documentation>
+ <choice>
+ <!-- Relative To Vertical Text Extents -->
+ <value>text</value>
+ <!-- Relative To Margin -->
+ <value>margin</value>
+ <!-- Relative To Page -->
+ <value>page</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_HAnchor">
+ <list>
+ <xs:documentation>Horizontal Anchor Location</xs:documentation>
+ <choice>
+ <!-- Relative to Text Extents -->
+ <value>text</value>
+ <!-- Relative To Margin -->
+ <value>margin</value>
+ <!-- Relative to Page -->
+ <value>page</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_DropCap">
+ <list>
+ <xs:documentation>Text Frame Drop Cap Location</xs:documentation>
+ <choice>
+ <!-- Not Drop Cap -->
+ <value>none</value>
+ <!-- Drop Cap Inside Margin -->
+ <value>drop</value>
+ <!-- Drop Cap Outside Margin -->
+ <value>margin</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FramePr">
+ <optional>
+ <attribute name="dropCap">
+ <ref name="ST_DropCap"/>
+ <xs:documentation>Drop Cap Frame</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lines">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Drop Cap Vertical Height in Lines</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="w">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Frame Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="h">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Frame Height</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="vSpace">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Vertical Frame Padding</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="hSpace">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Horizontal Frame Padding</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="wrap">
+ <ref name="ST_Wrap"/>
+ <xs:documentation>Text Wrapping Around Frame</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="hAnchor">
+ <ref name="ST_HAnchor"/>
+ <xs:documentation>Frame Horizontal Positioning Base</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="vAnchor">
+ <ref name="ST_VAnchor"/>
+ <xs:documentation>Frame Vertical Positioning Base</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="x">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Absolute Horizontal Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="xAlign">
+ <ref name="ST_XAlign"/>
+ <xs:documentation>Relative Horizontal Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="y">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Absolute Vertical Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="yAlign">
+ <ref name="ST_YAlign"/>
+ <xs:documentation>Relative Vertical Position</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="hRule">
+ <ref name="ST_HeightRule"/>
+ <xs:documentation>Frame Height Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="anchorLock">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Lock Frame Anchor to Paragraph</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_TabJc">
+ <list>
+ <xs:documentation>Custom Tab Stop Type</xs:documentation>
+ <choice>
+ <!-- No Tab Stop -->
+ <value>clear</value>
+ <!-- Left Tab -->
+ <value>left</value>
+ <!-- Centered Tab -->
+ <value>center</value>
+ <!-- Right Tab -->
+ <value>right</value>
+ <!-- Decimal Tab -->
+ <value>decimal</value>
+ <!-- Bar Tab -->
+ <value>bar</value>
+ <!-- List Tab -->
+ <value>num</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_TabTlc">
+ <list>
+ <xs:documentation>Custom Tab Stop Leader Character</xs:documentation>
+ <choice>
+ <!-- No tab stop leader -->
+ <value>none</value>
+ <!-- Dotted leader line -->
+ <value>dot</value>
+ <!-- Dashed tab stop leader line -->
+ <value>hyphen</value>
+ <!-- Solid leader line -->
+ <value>underscore</value>
+ <!-- Heavy solid leader line -->
+ <value>heavy</value>
+ <!-- Middle dot leader line -->
+ <value>middleDot</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TabStop">
+ <attribute name="val">
+ <ref name="ST_TabJc"/>
+ <xs:documentation>Tab Stop Type</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="leader">
+ <ref name="ST_TabTlc"/>
+ <xs:documentation>Tab Leader Character</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="pos">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Tab Stop Position</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_LineSpacingRule">
+ <list>
+ <xs:documentation>Line Spacing Rule</xs:documentation>
+ <choice>
+ <!-- Automatically Determined Line Height -->
+ <value>auto</value>
+ <!-- Exact Line Height -->
+ <value>exact</value>
+ <!-- Minimum Line Height -->
+ <value>atLeast</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Spacing">
+ <optional>
+ <attribute name="before">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Spacing Above Paragraph</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="beforeLines">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Spacing Above Paragraph IN Line Units</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="beforeAutospacing">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Automatically Determine Spacing Above Paragraph</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="after">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Spacing Below Paragraph</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="afterLines">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Spacing Below Paragraph in Line Units</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="afterAutospacing">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Automatically Determine Spacing Below Paragraph</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="line">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Spacing Between Lines in Paragraph</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="lineRule">
+ <ref name="ST_LineSpacingRule"/>
+ <xs:documentation>Type of Spacing Between Lines</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Ind">
+ <optional>
+ <attribute name="left">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Left Indentation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="leftChars">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Left Indentation in Character Units</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="right">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Right Indentation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="rightChars">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Right Indentation in Character Units</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="hanging">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Indentation Removed from First Line</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="hangingChars">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Indentation Removed From First Line in Character Units</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="firstLine">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Additional First Line Indentation</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="firstLineChars">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Additional First Line Indentation in Character Units</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_Jc">
+ <list>
+ <xs:documentation>Horizontal Alignment Type</xs:documentation>
+ <choice>
+ <!-- Align Left -->
+ <value>left</value>
+ <!-- Align Center -->
+ <value>center</value>
+ <!-- Align Right -->
+ <value>right</value>
+ <!-- Justified -->
+ <value>both</value>
+ <!-- Medium Kashida Length -->
+ <value>mediumKashida</value>
+ <!-- Distribute All Characters Equally -->
+ <value>distribute</value>
+ <!-- Align to List Tab -->
+ <value>numTab</value>
+ <!-- Widest Kashida Length -->
+ <value>highKashida</value>
+ <!-- Low Kashida Length -->
+ <value>lowKashida</value>
+ <!-- Thai Language Justification -->
+ <value>thaiDistribute</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Jc">
+ <attribute name="val">
+ <ref name="ST_Jc"/>
+ <xs:documentation>Alignment Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_View">
+ <list>
+ <xs:documentation>Document View Values</xs:documentation>
+ <choice>
+ <!-- Default View -->
+ <value>none</value>
+ <!-- Print Layout View -->
+ <value>print</value>
+ <!-- Outline View -->
+ <value>outline</value>
+ <!-- Master Document View -->
+ <value>masterPages</value>
+ <!-- Draft View -->
+ <value>normal</value>
+ <!-- Web Page View -->
+ <value>web</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_View">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Document View Setting Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Zoom">
+ <list>
+ <xs:documentation>Magnification Preset Values</xs:documentation>
+ <choice>
+ <!-- No Preset Magnification -->
+ <value>none</value>
+ <!-- Display One Full Page -->
+ <value>fullPage</value>
+ <!-- Display Page Width -->
+ <value>bestFit</value>
+ <!-- Display Text Width -->
+ <value>textFit</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_Percentage">
+ <data type="int">
+ <xs:documentation>Percentage</xs:documentation>
+ </data>
+ </define>
+ <define name="CT_Zoom">
+ <optional>
+ <attribute name="val">
+ <ref name="ST_Zoom"/>
+ <xs:documentation>Zoom Type</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="percent">
+ <ref name="ST_Percentage"/>
+ <xs:documentation>Zoom Percentage</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_WritingStyle">
+ <attribute name="lang">
+ <text/>
+ <xs:documentation>Writing Style Language</xs:documentation>
+ </attribute>
+ <attribute name="vendorID">
+ <text/>
+ <xs:documentation>Grammatical Engine ID</xs:documentation>
+ </attribute>
+ <attribute name="dllVersion">
+ <text/>
+ <xs:documentation>Grammatical Check Engine Version</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="nlCheck">
+ <text/>
+ <xs:documentation>Natural Language Grammar Check</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="checkStyle">
+ <text/>
+ <xs:documentation>Check Stylistic Rules With Grammar</xs:documentation>
+ </attribute>
+ <attribute name="appName">
+ <text/>
+ <xs:documentation>Application Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Proof">
+ <list>
+ <xs:documentation>Proofing State Values</xs:documentation>
+ <choice>
+ <!-- Check Completed -->
+ <value>clean</value>
+ <!-- Check Not Completed -->
+ <value>dirty</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Proof">
+ <optional>
+ <attribute name="spelling">
+ <text/>
+ <xs:documentation>Spell Checking State</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="grammar">
+ <text/>
+ <xs:documentation>Grammatical Checking State</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_DocType">
+ <list>
+ <xs:documentation>Document Classification Values</xs:documentation>
+ <choice>
+ <!-- Default Document -->
+ <value>notSpecified</value>
+ <!-- Letter -->
+ <value>letter</value>
+ <!-- E-Mail Message -->
+ <value>eMail</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_DocType">
+ <attribute name="val">
+ <ref name="ST_DocType"/>
+ <xs:documentation>Document Classification Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_DocProtect">
+ <list>
+ <xs:documentation>Document Protection Types</xs:documentation>
+ <choice>
+ <!-- No Editing Restrictions -->
+ <value>none</value>
+ <!-- Allow No Editing -->
+ <value>readOnly</value>
+ <!-- Allow Editing of Comments -->
+ <value>comments</value>
+ <!-- Allow Editing With Revision Tracking -->
+ <value>trackedChanges</value>
+ <!-- Allow Editing of Form Fields -->
+ <value>forms</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_CryptProv">
+ <list>
+ <xs:documentation>Cryptographic Provider Types</xs:documentation>
+ <choice>
+ <!-- AES Provider -->
+ <value>rsaAES</value>
+ <!-- Any Provider -->
+ <value>rsaFull</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_AlgClass">
+ <list>
+ <xs:documentation>Cryptographic Algorithm Classes</xs:documentation>
+ <!-- Hashing -->
+ <value>hash</value>
+ </list>
+ </define>
+ <define name="ST_AlgType">
+ <list>
+ <xs:documentation>Cryptographic Algorithm Types</xs:documentation>
+ <!-- Any Type -->
+ <value>typeAny</value>
+ </list>
+ </define>
+ <define name="AG_Password">
+ <attribute name="cryptProviderType">
+ <ref name="ST_CryptProv"/>
+ <xs:documentation>Cryptographic Provider Type</xs:documentation>
+ </attribute>
+ <attribute name="cryptAlgorithmClass">
+ <ref name="ST_AlgClass"/>
+ <xs:documentation>Cryptographic Algorithm Class</xs:documentation>
+ </attribute>
+ <attribute name="cryptAlgorithmType">
+ <ref name="ST_AlgType"/>
+ <xs:documentation>Cryptographic Algorithm Type</xs:documentation>
+ </attribute>
+ <attribute name="cryptAlgorithmSid">
+ <text/>
+ <xs:documentation>Cryptographic Hashing Algorithm</xs:documentation>
+ </attribute>
+ <attribute name="cryptSpinCount">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Iterations to Run Hashing Algorithm</xs:documentation>
+ </attribute>
+ <attribute name="cryptProvider">
+ <text/>
+ <xs:documentation>Cryptographic Provider</xs:documentation>
+ </attribute>
+ <attribute name="algIdExt">
+ <text/>
+ <xs:documentation>Cryptographic Algorithm Extensibility</xs:documentation>
+ </attribute>
+ <attribute name="algIdExtSource">
+ <text/>
+ <xs:documentation>Algorithm Extensibility Source</xs:documentation>
+ </attribute>
+ <attribute name="cryptProviderTypeExt">
+ <text/>
+ <xs:documentation>Cryptographic Provider Type Extensibility</xs:documentation>
+ </attribute>
+ <attribute name="cryptProviderTypeExtSource">
+ <text/>
+ <xs:documentation>Provider Type Extensibility Source</xs:documentation>
+ </attribute>
+ <attribute name="hash">
+ <data type="base64Binary">
+ <xs:documentation>Password Hash</xs:documentation>
+ </data>
+ <xs:documentation>Password Hash</xs:documentation>
+ </attribute>
+ <attribute name="salt">
+ <data type="base64Binary">
+ <xs:documentation>Salt for Password Verifier</xs:documentation>
+ </data>
+ <xs:documentation>Salt for Password Verifier</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_DocProtect">
+ <optional>
+ <attribute name="edit">
+ <ref name="ST_DocProtect"/>
+ <xs:documentation>Document Editing Restrictions</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="formatting">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Only Allow Formatting With Unlocked Styles</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="enforcement">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Enforce Document Protection Settings</xs:documentation>
+ </attribute>
+ <ref name="AG_Password"/>
+ </define>
+ <define name="ST_MailMergeDocType">
+ <list>
+ <xs:documentation>Source Document Types</xs:documentation>
+ <choice>
+ <!-- Catalog Source Document -->
+ <value>catalog</value>
+ <!-- Envelope Source Document -->
+ <value>envelopes</value>
+ <!-- Mailing Label Source Document -->
+ <value>mailingLabels</value>
+ <!-- Form Letter Source Document -->
+ <value>formLetters</value>
+ <!-- E-Mail Source Document -->
+ <value>email</value>
+ <!-- Fax Source Document -->
+ <value>fax</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_MailMergeDocType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Mail Merge Source Document Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_MailMergeDataType">
+ <list>
+ <xs:documentation>Mail Merge Data Source Type Values</xs:documentation>
+ <choice>
+ <!-- Text File Data Source -->
+ <value>textFile</value>
+ <!-- Database Data Source -->
+ <value>database</value>
+ <!-- Spreadsheet Data Source -->
+ <value>spreadsheet</value>
+ <!-- Query Data Source -->
+ <value>query</value>
+ <!-- Open Database Connectivity Data Source -->
+ <value>odbc</value>
+ <!-- Office Data Source Object Data Source -->
+ <value>native</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_MailMergeDataType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_MailMergeDest">
+ <list>
+ <xs:documentation>Merged Document Destination Types</xs:documentation>
+ <choice>
+ <!-- Send Merged Documents to New Documents -->
+ <value>newDocument</value>
+ <!-- Send Merged Documents to Printer -->
+ <value>printer</value>
+ <!-- Send Merged Documents as E-mail Messages -->
+ <value>email</value>
+ <!-- Send Merged Documents as Faxes -->
+ <value>fax</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_MailMergeDest">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Mail Merge Merged Document Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_MailMergeOdsoFMDFieldType">
+ <list>
+ <xs:documentation>Merge Field Mapping Types</xs:documentation>
+ <choice>
+ <!-- Field Not Mapped -->
+ <value>null</value>
+ <!-- Field Mapping to Data Source Column -->
+ <value>dbColumn</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_MailMergeOdsoFMDFieldType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Merge Field Mapping Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TrackChangesView">
+ <optional>
+ <attribute name="markup">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Display Visual Indicator Of Markup Area</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="comments">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Display Comments</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="insDel">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Display Content Revisions</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="formatting">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Display Formatting Revisions</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="inkAnnotations">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Display Ink Annotations</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Kinsoku">
+ <attribute name="lang">
+ <ref name="ST_Lang"/>
+ <xs:documentation>Language For Which Custom Line Breaking Rule Applies</xs:documentation>
+ </attribute>
+ <attribute name="val">
+ <ref name="ST_String"/>
+ <xs:documentation>Characters For Custom Line Breaking Rule</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TextDirection">
+ <list>
+ <xs:documentation>Text Flow Direction</xs:documentation>
+ <choice>
+ <!-- Left to Right, Top to Bottom -->
+ <value>lrTb</value>
+ <!-- Top to Bottom, Right to Left -->
+ <value>tbRl</value>
+ <!-- Bottom to Top, Left to Right -->
+ <value>btLr</value>
+ <!-- Left to Right, Top to Bottom Rotated -->
+ <value>lrTbV</value>
+ <!-- Top to Bottom, Right to Left Rotated -->
+ <value>tbRlV</value>
+ <!-- Top to Bottom, Left to Right Rotated -->
+ <value>tbLrV</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TextDirection">
+ <attribute name="val">
+ <ref name="ST_TextDirection"/>
+ <xs:documentation>Direction of Text Flow</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TextAlignment">
+ <list>
+ <xs:documentation>Vertical Text Alignment Types</xs:documentation>
+ <choice>
+ <!-- Align Text at Top -->
+ <value>top</value>
+ <!-- Align Text at Center -->
+ <value>center</value>
+ <!-- Align Text at Baseline -->
+ <value>baseline</value>
+ <!-- Align Text at Bottom -->
+ <value>bottom</value>
+ <!-- Automatically Determine Alignment -->
+ <value>auto</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TextAlignment">
+ <attribute name="val">
+ <ref name="ST_TextAlignment"/>
+ <xs:documentation>Vertical Character Alignment Position</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_DisplacedByCustomXml">
+ <list>
+ <xs:documentation>Location of Custom XML Markup Displacing an Annotation</xs:documentation>
+ <choice>
+ <!-- Displaced by Next Custom XML Markup Tag -->
+ <value>next</value>
+ <!-- Displaced by Previous Custom XML Markup Tag -->
+ <value>prev</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_AnnotationVMerge">
+ <list>
+ <xs:documentation>Table Cell Vertical Merge Revision Type</xs:documentation>
+ <choice>
+ <!-- Vertically Merged Cell -->
+ <value>cont</value>
+ <!-- Vertically Split Cell -->
+ <value>rest</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Markup">
+ <attribute name="id">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Annotation Identifier</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TrackChange">
+ <ref name="CT_Markup"/>
+ <attribute name="author">
+ <ref name="ST_String"/>
+ <xs:documentation>Annotation Author</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="date">
+ <ref name="ST_DateTime"/>
+ <xs:documentation>Annotation Date</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_CellMergeTrackChange">
+ <ref name="CT_TrackChange"/>
+ <optional>
+ <attribute name="vMerge">
+ <ref name="ST_AnnotationVMerge"/>
+ <xs:documentation>Revised Vertical Merge Setting</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="vMergeOrig">
+ <ref name="ST_AnnotationVMerge"/>
+ <xs:documentation>Vertical Merge Setting Removed by Revision</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_TrackChangeRange">
+ <ref name="CT_TrackChange"/>
+ <optional>
+ <attribute name="displacedByCustomXml">
+ <ref name="ST_DisplacedByCustomXml"/>
+ <xs:documentation>Annotation Marker Displaced By Custom XML Markup</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_MarkupRange">
+ <ref name="CT_Markup"/>
+ <optional>
+ <attribute name="displacedByCustomXml">
+ <ref name="ST_DisplacedByCustomXml"/>
+ <xs:documentation>Annotation Marker Relocated For Custom XML Markup</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_MarkupRangeBookmark">
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Annotation Identifier</xs:documentation>
+ </attribute>
+ <ref name="CT_MarkupRange"/>
+ </define>
+ <define name="CT_BookmarkRange">
+ <ref name="CT_MarkupRangeBookmark"/>
+ <optional>
+ <attribute name="colFirst">
+ <text/>
+ <xs:documentation>First Table Column Covered By Bookmark</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colLast">
+ <text/>
+ <xs:documentation>Last Table Column Covered By Bookmark</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Bookmark">
+ <ref name="CT_BookmarkRange"/>
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Bookmark Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_MoveBookmark">
+ <ref name="CT_Bookmark"/>
+ <attribute name="author">
+ <text/>
+ <xs:documentation>Annotation Author</xs:documentation>
+ </attribute>
+ <attribute name="date">
+ <text/>
+ <xs:documentation>Annotation Date</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Comment">
+ <attribute name="id">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Annotation Identifier</xs:documentation>
+ </attribute>
+ <ref name="CT_TrackChange"/>
+ <zeroOrMore>
+ <ref name="EG_BlockLevelElts"/>
+ </zeroOrMore>
+ <optional>
+ <attribute name="initials">
+ <ref name="ST_String"/>
+ <xs:documentation>Initials of Comment Author</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_TrackChangeNumbering">
+ <ref name="CT_TrackChange"/>
+ <optional>
+ <attribute name="original">
+ <text/>
+ <xs:documentation>Previous Numbering Value</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_TblPrExChange">
+ <ref name="CT_TrackChange"/>
+ <element name="tblPrEx">
+ <ref name="CT_TblPrExBase"/>
+ </element>
+ </define>
+ <define name="CT_TcPrChange">
+ <ref name="CT_TrackChange"/>
+ <element name="tcPr">
+ <ref name="CT_TcPrInner"/>
+ </element>
+ </define>
+ <define name="CT_TrPrChange">
+ <ref name="CT_TrackChange"/>
+ <element name="trPr">
+ <ref name="CT_TrPrBase"/>
+ </element>
+ </define>
+ <define name="CT_TblGridChange">
+ <ref name="CT_Markup"/>
+ <element name="tblGrid">
+ <ref name="CT_TblGridBase"/>
+ </element>
+ </define>
+ <define name="CT_TblPrChange">
+ <ref name="CT_TrackChange"/>
+ <element name="tblPr">
+ <ref name="CT_TblPrBase"/>
+ </element>
+ </define>
+ <define name="CT_SectPrChange">
+ <ref name="CT_TrackChange"/>
+ <optional>
+ <element name="sectPr">
+ <ref name="CT_SectPrBase"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_PPrChange">
+ <ref name="CT_TrackChange"/>
+ <element name="pPr">
+ <ref name="CT_PPrBase"/>
+ </element>
+ </define>
+ <define name="CT_RPrChange">
+ <ref name="CT_TrackChange"/>
+ <element name="rPr">
+ <ref name="CT_RPrOriginal"/>
+ </element>
+ </define>
+ <define name="CT_ParaRPrChange">
+ <ref name="CT_TrackChange"/>
+ <element name="rPr">
+ <ref name="CT_ParaRPrOriginal"/>
+ </element>
+ </define>
+ <define name="CT_RunTrackChange">
+ <ref name="CT_TrackChange"/>
+ <zeroOrMore>
+ <choice>
+ <ref name="EG_ContentRunContent"/>
+ <ref name="EG_OMathMathElements"/>
+ </choice>
+ </zeroOrMore>
+ </define>
+ <define name="EG_CellMarkupElements">
+ <choice>
+ <optional>
+ <element name="cellIns">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cellDel">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cellMerge">
+ <ref name="CT_CellMergeTrackChange"/>
+ </element>
+ </optional>
+ </choice>
+ </define>
+ <define name="EG_RangeMarkupElements">
+ <choice>
+ <element name="bookmarkStart">
+ <ref name="CT_Bookmark"/>
+ </element>
+ <element name="bookmarkEnd">
+ <ref name="CT_MarkupRangeBookmark"/>
+ </element>
+ <element name="moveFromRangeStart">
+ <ref name="CT_MoveBookmark"/>
+ </element>
+ <element name="moveFromRangeEnd">
+ <ref name="CT_MarkupRange"/>
+ </element>
+ <element name="moveToRangeStart">
+ <ref name="CT_MoveBookmark"/>
+ </element>
+ <element name="moveToRangeEnd">
+ <ref name="CT_MarkupRange"/>
+ </element>
+ <element name="commentRangeStart">
+ <ref name="CT_MarkupRange"/>
+ </element>
+ <element name="commentRangeEnd">
+ <ref name="CT_MarkupRange"/>
+ </element>
+ <element name="customXmlInsRangeStart">
+ <ref name="CT_TrackChange"/>
+ </element>
+ <element name="customXmlInsRangeEnd">
+ <ref name="CT_Markup"/>
+ </element>
+ <element name="customXmlDelRangeStart">
+ <ref name="CT_TrackChange"/>
+ </element>
+ <element name="customXmlDelRangeEnd">
+ <ref name="CT_Markup"/>
+ </element>
+ <element name="customXmlMoveFromRangeStart">
+ <ref name="CT_TrackChange"/>
+ </element>
+ <element name="customXmlMoveFromRangeEnd">
+ <ref name="CT_Markup"/>
+ </element>
+ <element name="customXmlMoveToRangeStart">
+ <ref name="CT_TrackChange"/>
+ </element>
+ <element name="customXmlMoveToRangeEnd">
+ <ref name="CT_Markup"/>
+ </element>
+ </choice>
+ </define>
+ <define name="CT_NumPr">
+ <optional>
+ <element name="ilvl">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numId">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numberingChange">
+ <ref name="CT_TrackChangeNumbering"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ins">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_PBdr">
+ <optional>
+ <element name="top">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="between">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bar">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Tabs">
+ <oneOrMore>
+ <element name="tab">
+ <ref name="CT_TabStop"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="ST_TextboxTightWrap">
+ <list>
+ <xs:documentation>Lines To Tight Wrap Within Text Box</xs:documentation>
+ <choice>
+ <!-- Do Not Tight Wrap -->
+ <value>none</value>
+ <!-- Tight Wrap All Lines -->
+ <value>allLines</value>
+ <!-- Tight Wrap First and Last Lines -->
+ <value>firstAndLastLine</value>
+ <!-- Tight Wrap First Line -->
+ <value>firstLineOnly</value>
+ <!-- Tight Wrap Last Line -->
+ <value>lastLineOnly</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TextboxTightWrap">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Lines to Tight Wrap to Paragraph Extents</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_PPrBase">
+ <optional>
+ <element name="pStyle">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="keepNext">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="keepLines">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pageBreakBefore">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="framePr">
+ <ref name="CT_FramePr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="widowControl">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numPr">
+ <ref name="CT_NumPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressLineNumbers">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pBdr">
+ <ref name="CT_PBdr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shd">
+ <ref name="CT_Shd"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tabs">
+ <ref name="CT_Tabs"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressAutoHyphens">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="kinsoku">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="wordWrap">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="overflowPunct">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="topLinePunct">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autoSpaceDE">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autoSpaceDN">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bidi">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="adjustRightInd">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="snapToGrid">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="spacing">
+ <ref name="CT_Spacing"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ind">
+ <ref name="CT_Ind"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="contextualSpacing">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mirrorIndents">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressOverlap">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="jc">
+ <ref name="CT_Jc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="textDirection">
+ <ref name="CT_TextDirection"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="textAlignment">
+ <ref name="CT_TextAlignment"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="textboxTightWrap">
+ <ref name="CT_TextboxTightWrap"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="outlineLvl">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="divId">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cnfStyle">
+ <ref name="CT_Cnf"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_PPr">
+ <ref name="CT_PPrBase"/>
+ <group>
+ <optional>
+ <element name="rPr">
+ <ref name="CT_ParaRPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sectPr">
+ <ref name="CT_SectPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pPrChange">
+ <ref name="CT_PPrChange"/>
+ </element>
+ </optional>
+ </group>
+ </define>
+ <define name="CT_Control">
+ <optional>
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Unique Name for Embedded Control</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="shapeid">
+ <text/>
+ <xs:documentation>Associated VML Data Reference</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="r:id">
+ <ref name="ST_String"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Background">
+ <ref name="CT_PictureBase"/>
+ <optional>
+ <attribute name="color">
+ <text/>
+ <xs:documentation>Background Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeColor">
+ <text/>
+ <xs:documentation>Background Theme Color</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeTint">
+ <text/>
+ <xs:documentation>Border Theme Color Tint</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="themeShade">
+ <text/>
+ <xs:documentation>Border Theme Color Shade</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Rel">
+ <attribute name="r:id">
+ <ref name="ST_String"/>
+ </attribute>
+ </define>
+ <define name="CT_PictureBase">
+ <oneOrMore>
+ <optional>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </optional>
+ </oneOrMore>
+ </define>
+ <define name="CT_Object">
+ <ref name="CT_PictureBase"/>
+ <optional>
+ <element name="control">
+ <ref name="CT_Control"/>
+ </element>
+ </optional>
+ <optional>
+ <attribute name="dxaOrig">
+ <text/>
+ <xs:documentation>Original Image Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="dyaOrig">
+ <text/>
+ <xs:documentation>Original Image Height</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Picture">
+ <ref name="CT_PictureBase"/>
+ <group>
+ <optional>
+ <element name="movie">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="control">
+ <ref name="CT_Control"/>
+ </element>
+ </optional>
+ </group>
+ </define>
+ <define name="CT_Drawing">
+ <oneOrMore>
+ <choice>
+ <optional>
+ <ref name="anchor"/>
+ </optional>
+ <optional>
+ <ref name="inline"/>
+ </optional>
+ </choice>
+ </oneOrMore>
+ </define>
+ <define name="CT_SimpleField">
+ <group>
+ <optional>
+ <element name="fldData">
+ <ref name="CT_Text"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_PContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="instr">
+ <text/>
+ <xs:documentation>Field Codes</xs:documentation>
+ </attribute>
+ <attribute name="fldLock">
+ <text/>
+ <xs:documentation>Field Should Not Be Recalculated</xs:documentation>
+ </attribute>
+ <attribute name="dirty">
+ <text/>
+ <xs:documentation>Field Result Invalidated</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_FldCharType">
+ <list>
+ <xs:documentation>Complex Field Character Type</xs:documentation>
+ <choice>
+ <!-- Start Character -->
+ <value>begin</value>
+ <!-- Separator Character -->
+ <value>separate</value>
+ <!-- End Character -->
+ <value>end</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_InfoTextType">
+ <list>
+ <xs:documentation>Help or Status Text Type</xs:documentation>
+ <choice>
+ <!-- Literal Text -->
+ <value>text</value>
+ <!-- Glossary Document Entry -->
+ <value>autoText</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_FFHelpTextVal">
+ <data type="string">
+ <xs:documentation>Help Text Value</xs:documentation>
+ <param name="maxLength">256</param>
+ </data>
+ </define>
+ <define name="ST_FFStatusTextVal">
+ <data type="string">
+ <xs:documentation>Status Text Value</xs:documentation>
+ <param name="maxLength">140</param>
+ </data>
+ </define>
+ <define name="ST_FFName">
+ <data type="string">
+ <xs:documentation>Form Field Name Value</xs:documentation>
+ <param name="maxLength">65</param>
+ </data>
+ </define>
+ <define name="ST_FFTextType">
+ <list>
+ <xs:documentation>Text Box Form Field Type Values</xs:documentation>
+ <choice>
+ <!-- Text Box -->
+ <value>regular</value>
+ <!-- Number -->
+ <value>number</value>
+ <!-- Date -->
+ <value>date</value>
+ <!-- Current Time Display -->
+ <value>currentTime</value>
+ <!-- Current Date Display -->
+ <value>currentDate</value>
+ <!-- Field Calculation -->
+ <value>calculated</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FFTextType">
+ <attribute name="val">
+ <ref name="ST_FFName"/>
+ <xs:documentation>Text Box Form Field Type Values</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FFName">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Form Field Name Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FldChar">
+ <choice>
+ <optional>
+ <element name="fldData">
+ <ref name="CT_Text"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ffData">
+ <ref name="CT_FFData"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numberingChange">
+ <ref name="CT_TrackChangeNumbering"/>
+ </element>
+ </optional>
+ </choice>
+ <attribute name="fldCharType">
+ <ref name="ST_FldCharType"/>
+ <xs:documentation>Field Character Type</xs:documentation>
+ </attribute>
+ <attribute name="fldLock">
+ <text/>
+ <xs:documentation>Field Should Not Be Recalculated</xs:documentation>
+ </attribute>
+ <attribute name="dirty">
+ <text/>
+ <xs:documentation>Field Result Invalidated</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Hyperlink">
+ <zeroOrMore>
+ <ref name="EG_PContent"/>
+ </zeroOrMore>
+ <optional>
+ <attribute name="tgtFrame">
+ <text/>
+ <xs:documentation>Hyperlink Target Frame</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="tooltip">
+ <text/>
+ <xs:documentation>Associated String</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="docLocation">
+ <text/>
+ <xs:documentation>Location in Target Document</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="history">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Add To Viewed Hyperlinks</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="anchor">
+ <text/>
+ <xs:documentation>Hyperlink Anchor</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="r:id">
+ <ref name="ST_String"/>
+ </attribute>
+ </define>
+ <define name="CT_FFData">
+ <oneOrMore>
+ <choice>
+ <element name="name">
+ <ref name="CT_FFName"/>
+ </element>
+ <element name="enabled">
+ <ref name="CT_OnOff"/>
+ </element>
+ <element name="calcOnExit">
+ <ref name="CT_OnOff"/>
+ </element>
+ <optional>
+ <element name="entryMacro">
+ <ref name="CT_MacroName"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="exitMacro">
+ <ref name="CT_MacroName"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="helpText">
+ <ref name="CT_FFHelpText"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="statusText">
+ <ref name="CT_FFStatusText"/>
+ </element>
+ </optional>
+ <choice>
+ <element name="checkBox">
+ <ref name="CT_FFCheckBox"/>
+ </element>
+ <element name="ddList">
+ <ref name="CT_FFDDList"/>
+ </element>
+ <element name="textInput">
+ <ref name="CT_FFTextInput"/>
+ </element>
+ </choice>
+ </choice>
+ </oneOrMore>
+ </define>
+ <define name="CT_FFHelpText">
+ <attribute name="type">
+ <ref name="ST_InfoTextType"/>
+ <xs:documentation>Help Text Type</xs:documentation>
+ </attribute>
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Help Text Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FFStatusText">
+ <attribute name="type">
+ <ref name="ST_InfoTextType"/>
+ <xs:documentation>Status Text Type</xs:documentation>
+ </attribute>
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Status Text Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FFCheckBox">
+ <choice>
+ <element name="size">
+ <ref name="CT_HpsMeasure"/>
+ </element>
+ <element name="sizeAuto">
+ <ref name="CT_OnOff"/>
+ </element>
+ </choice>
+ <optional>
+ <element name="default">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="checked">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_FFDDList">
+ <optional>
+ <element name="result">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="default">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="listEntry">
+ <ref name="CT_String"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_FFTextInput">
+ <optional>
+ <element name="type">
+ <ref name="CT_FFTextType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="default">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="maxLength">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="format">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_SectionMark">
+ <list>
+ <xs:documentation>Section Type</xs:documentation>
+ <choice>
+ <!-- Next Page Section Break -->
+ <value>nextPage</value>
+ <!-- Column Section Break -->
+ <value>nextColumn</value>
+ <!-- Continuous Section Break -->
+ <value>continuous</value>
+ <!-- Even Page Section Break -->
+ <value>evenPage</value>
+ <!-- Odd Page Section Break -->
+ <value>oddPage</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_SectType">
+ <attribute name="val">
+ <ref name="ST_SectionMark"/>
+ <xs:documentation>Section Type Setting</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_PaperSource">
+ <attribute name="first">
+ <text/>
+ <xs:documentation>First Page Printer Tray Code</xs:documentation>
+ </attribute>
+ <attribute name="other">
+ <text/>
+ <xs:documentation>Non-First Page Printer Tray Code</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_NumberFormat">
+ <list>
+ <xs:documentation>Numbering Format</xs:documentation>
+ <choice>
+ <!-- Decimal Numbers -->
+ <value>decimal</value>
+ <!-- Uppercase Roman Numerals -->
+ <value>upperRoman</value>
+ <!-- Lowercase Roman Numerals -->
+ <value>lowerRoman</value>
+ <!-- Uppercase Latin Alphabet -->
+ <value>upperLetter</value>
+ <!-- Lowercase Latin Alphabet -->
+ <value>lowerLetter</value>
+ <!-- Ordinal -->
+ <value>ordinal</value>
+ <!-- Cardinal Text -->
+ <value>cardinalText</value>
+ <!-- Ordinal Text -->
+ <value>ordinalText</value>
+ <!-- Hexadecimal Numbering -->
+ <value>hex</value>
+ <!-- Chicago Manual of Style -->
+ <value>chicago</value>
+ <!-- Ideographs -->
+ <value>ideographDigital</value>
+ <!-- Japanese Counting System -->
+ <value>japaneseCounting</value>
+ <!-- AIUEO Order Hiragana -->
+ <value>aiueo</value>
+ <!-- Iroha Ordered Katakana -->
+ <value>iroha</value>
+ <!-- Double Byte Arabic Numerals -->
+ <value>decimalFullWidth</value>
+ <!-- Single Byte Arabic Numerals -->
+ <value>decimalHalfWidth</value>
+ <!-- Japanese Legal Numbering -->
+ <value>japaneseLegal</value>
+ <!-- Japanese Digital Ten Thousand Counting System -->
+ <value>japaneseDigitalTenThousand</value>
+ <!-- Decimal Numbers Enclosed in a Circle -->
+ <value>decimalEnclosedCircle</value>
+ <!-- Double Byte Arabic Numerals Alternate -->
+ <value>decimalFullWidth2</value>
+ <!-- Full-Width AIUEO Order Hiragana -->
+ <value>aiueoFullWidth</value>
+ <!-- Full-Width Iroha Ordered Katakana -->
+ <value>irohaFullWidth</value>
+ <!-- Initial Zero Arabic Numerals -->
+ <value>decimalZero</value>
+ <!-- Bullet -->
+ <value>bullet</value>
+ <!-- Korean Ganada Numbering -->
+ <value>ganada</value>
+ <!-- Korean Chosung Numbering -->
+ <value>chosung</value>
+ <!-- Decimal Numbers Followed by a Period -->
+ <value>decimalEnclosedFullstop</value>
+ <!-- Decimal Numbers Enclosed in Parenthesis -->
+ <value>decimalEnclosedParen</value>
+ <!-- Decimal Numbers Enclosed in a Circle -->
+ <value>decimalEnclosedCircleChinese</value>
+ <!-- Ideographs Enclosed in a Circle -->
+ <value>ideographEnclosedCircle</value>
+ <!-- Traditional Ideograph Format -->
+ <value>ideographTraditional</value>
+ <!-- Zodiac Ideograph Format -->
+ <value>ideographZodiac</value>
+ <!-- Traditional Zodiac Ideograph Format -->
+ <value>ideographZodiacTraditional</value>
+ <!-- Taiwanese Counting System -->
+ <value>taiwaneseCounting</value>
+ <!-- Traditional Legal Ideograph Format -->
+ <value>ideographLegalTraditional</value>
+ <!-- Taiwanese Counting Thousand System -->
+ <value>taiwaneseCountingThousand</value>
+ <!-- Taiwanese Digital Counting System -->
+ <value>taiwaneseDigital</value>
+ <!-- Chinese Counting System -->
+ <value>chineseCounting</value>
+ <!-- Chinese Legal Simplified Format -->
+ <value>chineseLegalSimplified</value>
+ <!-- Chinese Counting Thousand System -->
+ <value>chineseCountingThousand</value>
+ <!-- Korean Digital Counting System -->
+ <value>koreanDigital</value>
+ <!-- Korean Counting System -->
+ <value>koreanCounting</value>
+ <!-- Korean Legal Numbering -->
+ <value>koreanLegal</value>
+ <!-- Korean Digital Counting System Alternate -->
+ <value>koreanDigital2</value>
+ <!-- Vietnamese Numerals -->
+ <value>vietnameseCounting</value>
+ <!-- Lowercase Russian Alphabet -->
+ <value>russianLower</value>
+ <!-- Uppercase Russian Alphabet -->
+ <value>russianUpper</value>
+ <!-- No Numbering -->
+ <value>none</value>
+ <!-- Number With Dashes -->
+ <value>numberInDash</value>
+ <!-- Hebrew Numerals -->
+ <value>hebrew1</value>
+ <!-- Hebrew Alphabet -->
+ <value>hebrew2</value>
+ <!-- Arabic Alphabet -->
+ <value>arabicAlpha</value>
+ <!-- Arabic Abjad Numerals -->
+ <value>arabicAbjad</value>
+ <!-- Hindi Vowels -->
+ <value>hindiVowels</value>
+ <!-- Hindi Consonants -->
+ <value>hindiConsonants</value>
+ <!-- Hindi Numbers -->
+ <value>hindiNumbers</value>
+ <!-- Hindi Counting System -->
+ <value>hindiCounting</value>
+ <!-- Thai Letters -->
+ <value>thaiLetters</value>
+ <!-- Thai Numerals -->
+ <value>thaiNumbers</value>
+ <!-- Thai Counting System -->
+ <value>thaiCounting</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_PageOrientation">
+ <list>
+ <xs:documentation>Page Orientation</xs:documentation>
+ <choice>
+ <!-- Portrait Mode -->
+ <value>portrait</value>
+ <!-- Landscape Mode -->
+ <value>landscape</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PageSz">
+ <optional>
+ <attribute name="w">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Page Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="h">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Page Height</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="orient">
+ <ref name="ST_PageOrientation"/>
+ <xs:documentation>Page Orientation</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="code">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Printer Paper Code</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_PageMar">
+ <attribute name="top">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Top Margin Spacing</xs:documentation>
+ </attribute>
+ <attribute name="right">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Right Margin Spacing</xs:documentation>
+ </attribute>
+ <attribute name="bottom">
+ <ref name="ST_SignedTwipsMeasure"/>
+ <xs:documentation>Page Bottom Spacing</xs:documentation>
+ </attribute>
+ <attribute name="left">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Left Margin Spacing</xs:documentation>
+ </attribute>
+ <attribute name="header">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Spacing to Top of Header</xs:documentation>
+ </attribute>
+ <attribute name="footer">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Spacing to Bottom of Footer</xs:documentation>
+ </attribute>
+ <attribute name="gutter">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Page Gutter Spacing</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_PageBorderZOrder">
+ <list>
+ <xs:documentation>Page Border Z-Order</xs:documentation>
+ <choice>
+ <!-- Page Border Ahead of Text -->
+ <value>front</value>
+ <!-- Page Border Behind Text -->
+ <value>back</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_PageBorderDisplay">
+ <list>
+ <xs:documentation>Page Border Display Options</xs:documentation>
+ <choice>
+ <!-- Display Page Border on All Pages -->
+ <value>allPages</value>
+ <!-- Display Page Border on First Page -->
+ <value>firstPage</value>
+ <!-- Display Page Border on All Pages Except First -->
+ <value>notFirstPage</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_PageBorderOffset">
+ <list>
+ <xs:documentation>Page Border Positioning Base</xs:documentation>
+ <choice>
+ <!-- Page Border Is Positioned Relative to Page Edges -->
+ <value>page</value>
+ <!-- Page Border Is Positioned Relative to Text Extents -->
+ <value>text</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PageBorders">
+ <group>
+ <optional>
+ <element name="top">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="zOrder">
+ <ref name="ST_PageBorderZOrder"/>
+ <xs:documentation>Z-Ordering of Page Border</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="display">
+ <ref name="ST_PageBorderDisplay"/>
+ <xs:documentation>Pages to Display Page Borders</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="offsetFrom">
+ <ref name="ST_PageBorderOffset"/>
+ <xs:documentation>Page Border Positioning</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_ChapterSep">
+ <list>
+ <xs:documentation>Chapter Separator Types</xs:documentation>
+ <choice>
+ <!-- Hyphen Chapter Separator -->
+ <value>hyphen</value>
+ <!-- Period Chapter Separator -->
+ <value>period</value>
+ <!-- Colon Chapter Separator -->
+ <value>colon</value>
+ <!-- Em Dash Chapter Separator -->
+ <value>emDash</value>
+ <!-- En Dash Chapter Separator -->
+ <value>enDash</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_LineNumberRestart">
+ <list>
+ <xs:documentation>Line Numbering Restart Position</xs:documentation>
+ <choice>
+ <!-- Restart Line Numbering on Each Page -->
+ <value>newPage</value>
+ <!-- Restart Line Numbering for Each Section -->
+ <value>newSection</value>
+ <!-- Continue Line Numbering From Previous Section -->
+ <value>continuous</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_LineNumber">
+ <optional>
+ <attribute name="countBy">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Line Number Increments to Display</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="start">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Line Numbering Starting Value</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="distance">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Distance Between Text and Line Numbering</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="restart">
+ <ref name="ST_LineNumberRestart"/>
+ <xs:documentation>Line Numbering Restart Setting</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_PageNumber">
+ <optional>
+ <attribute name="fmt">
+ <ref name="ST_NumberFormat"/>
+ <xs:documentation>Page Number Format</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="start">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Starting Page Number</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="chapStyle">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Chapter Heading Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="chapSep">
+ <ref name="ST_ChapterSep"/>
+ <xs:documentation>Chapter Separator Character</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Column">
+ <optional>
+ <attribute name="w">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Column Width</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="space">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Space Before Following Column</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Columns">
+ <zeroOrMore>
+ <element name="col">
+ <ref name="CT_Column"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <attribute name="equalWidth">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Equal Column Widths</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="space">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Spacing Between Equal Width Columns</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="num">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Number of Equal Width Columns</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sep">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Draw Line Between Columns</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_VerticalJc">
+ <list>
+ <xs:documentation>Vertical Alignment Type</xs:documentation>
+ <choice>
+ <!-- Align Top -->
+ <value>top</value>
+ <!-- Align Center -->
+ <value>center</value>
+ <!-- Vertical Justification -->
+ <value>both</value>
+ <!-- Align Bottom -->
+ <value>bottom</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_VerticalJc">
+ <attribute name="val">
+ <ref name="ST_VerticalJc"/>
+ <xs:documentation>Vertical Alignment Setting</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_DocGrid">
+ <list>
+ <xs:documentation>Document Grid Types</xs:documentation>
+ <choice>
+ <!-- No Document Grid -->
+ <value>default</value>
+ <!-- Line Grid Only -->
+ <value>lines</value>
+ <!-- Line and Character Grid -->
+ <value>linesAndChars</value>
+ <!-- Character Grid Only -->
+ <value>snapToChars</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_DocGrid">
+ <attribute name="type">
+ <ref name="ST_DocGrid"/>
+ <xs:documentation>Document Grid Type</xs:documentation>
+ </attribute>
+ <attribute name="linePitch">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Document Grid Line Pitch</xs:documentation>
+ </attribute>
+ <attribute name="charSpace">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Document Grid Character Pitch</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_HdrFtr">
+ <list>
+ <xs:documentation>Header or Footer Type</xs:documentation>
+ <choice>
+ <!-- Even Numbered Pages Only -->
+ <value>even</value>
+ <!-- Default Header or Footer -->
+ <value>default</value>
+ <!-- First Page Only -->
+ <value>first</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_FtnEdn">
+ <list>
+ <xs:documentation>Footnote or Endnote Type</xs:documentation>
+ <choice>
+ <!-- Normal Footnote/Endnote -->
+ <value>normal</value>
+ <!-- Separator -->
+ <value>separator</value>
+ <!-- Continuation Separator -->
+ <value>continuationSeparator</value>
+ <!-- Continuation Notice Separator -->
+ <value>continuationNotice</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_HdrFtrRef">
+ <attribute name="type">
+ <ref name="ST_HdrFtr"/>
+ <xs:documentation>Header or Footer Type</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="r:id">
+ <ref name="ST_String"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="EG_HdrFtrReferences">
+ <choice>
+ <optional>
+ <element name="headerReference">
+ <ref name="CT_HdrFtrRef"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="footerReference">
+ <ref name="CT_HdrFtrRef"/>
+ </element>
+ </optional>
+ </choice>
+ </define>
+ <define name="CT_HdrFtr">
+ <oneOrMore>
+ <ref name="EG_BlockLevelElts"/>
+ </oneOrMore>
+ </define>
+ <define name="EG_SectPrContents">
+ <optional>
+ <element name="footnotePr">
+ <ref name="CT_FtnProps"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="endnotePr">
+ <ref name="CT_EdnProps"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="type">
+ <ref name="CT_SectType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pgSz">
+ <ref name="CT_PageSz"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pgMar">
+ <ref name="CT_PageMar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="paperSrc">
+ <ref name="CT_PaperSource"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pgBorders">
+ <ref name="CT_PageBorders"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lnNumType">
+ <ref name="CT_LineNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pgNumType">
+ <ref name="CT_PageNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cols">
+ <ref name="CT_Columns"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="formProt">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="vAlign">
+ <ref name="CT_VerticalJc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noEndnote">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="titlePg">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="textDirection">
+ <ref name="CT_TextDirection"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bidi">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rtlGutter">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="docGrid">
+ <ref name="CT_DocGrid"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printerSettings">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ </define>
+ <define name="AG_SectPrAttributes">
+ <attribute name="rsidRPr">
+ <text/>
+ <xs:documentation>Physical Section Mark Character Revision ID</xs:documentation>
+ </attribute>
+ <attribute name="rsidDel">
+ <text/>
+ <xs:documentation>Section Deletion Revision ID</xs:documentation>
+ </attribute>
+ <attribute name="rsidR">
+ <text/>
+ <xs:documentation>Section Addition Revision ID</xs:documentation>
+ </attribute>
+ <attribute name="rsidSect">
+ <text/>
+ <xs:documentation>Section Properties Revision ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SectPrBase">
+ <optional>
+ <ref name="EG_SectPrContents"/>
+ </optional>
+ <ref name="AG_SectPrAttributes"/>
+ </define>
+ <define name="CT_SectPr">
+ <group>
+ <zeroOrMore>
+ <ref name="EG_HdrFtrReferences"/>
+ </zeroOrMore>
+ <optional>
+ <ref name="EG_SectPrContents"/>
+ </optional>
+ <optional>
+ <element name="sectPrChange">
+ <ref name="CT_SectPrChange"/>
+ </element>
+ </optional>
+ </group>
+ <ref name="AG_SectPrAttributes"/>
+ </define>
+ <define name="ST_BrType">
+ <list>
+ <xs:documentation>Break Types</xs:documentation>
+ <choice>
+ <!-- Page Break -->
+ <value>page</value>
+ <!-- Column Break -->
+ <value>column</value>
+ <!-- Line Break -->
+ <value>textWrapping</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_BrClear">
+ <list>
+ <xs:documentation>Line Break Text Wrapping Restart Location</xs:documentation>
+ <choice>
+ <!-- Restart On Next Line -->
+ <value>none</value>
+ <!-- Restart In Next Text Region When In Leftmost Position -->
+ <value>left</value>
+ <!-- Restart In Next Text Region When In Rightmost Position -->
+ <value>right</value>
+ <!-- Restart On Next Full Line -->
+ <value>all</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Br">
+ <optional>
+ <attribute name="type">
+ <ref name="ST_BrType"/>
+ <xs:documentation>Break Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="clear">
+ <ref name="ST_BrClear"/>
+ <xs:documentation>Restart Location For Text Wrapping Break</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_PTabAlignment">
+ <list>
+ <xs:documentation>Absolute Position Tab Alignment</xs:documentation>
+ <choice>
+ <!-- Left -->
+ <value>left</value>
+ <!-- Center -->
+ <value>center</value>
+ <!-- Right -->
+ <value>right</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_PTabRelativeTo">
+ <list>
+ <xs:documentation>Absolute Position Tab Positioning Base</xs:documentation>
+ <choice>
+ <!-- Relative To Text Margins -->
+ <value>margin</value>
+ <!-- Relative To Indents -->
+ <value>indent</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_PTabLeader">
+ <list>
+ <xs:documentation>Absolute Position Tab Leader Character</xs:documentation>
+ <choice>
+ <!-- No Leader Character -->
+ <value>none</value>
+ <!-- Dot Leader Character -->
+ <value>dot</value>
+ <!-- Hyphen Leader Character -->
+ <value>hyphen</value>
+ <!-- Underscore Leader Character -->
+ <value>underscore</value>
+ <!-- Centered Dot Leader Character -->
+ <value>middleDot</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_PTab">
+ <attribute name="alignment">
+ <ref name="ST_PTabAlignment"/>
+ <xs:documentation>Positional Tab Stop Alignment</xs:documentation>
+ </attribute>
+ <attribute name="relativeTo">
+ <ref name="ST_PTabRelativeTo"/>
+ <xs:documentation>Positional Tab Base</xs:documentation>
+ </attribute>
+ <attribute name="leader">
+ <ref name="ST_PTabLeader"/>
+ <xs:documentation>Tab Leader Character</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Sym">
+ <attribute name="font">
+ <text/>
+ <xs:documentation>Symbol Character Font</xs:documentation>
+ </attribute>
+ <attribute name="char">
+ <ref name="ST_ShortHexNumber"/>
+ <xs:documentation>Symbol Character Code</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_ProofErr">
+ <list>
+ <xs:documentation>Proofing Error Type</xs:documentation>
+ <choice>
+ <!-- Start of Region Marked as Spelling Error -->
+ <value>spellStart</value>
+ <!-- End of Region Marked as Spelling Error -->
+ <value>spellEnd</value>
+ <!-- Start of Region Marked as Grammatical Error -->
+ <value>gramStart</value>
+ <!-- End of Region Marked as Grammatical Error -->
+ <value>gramEnd</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_ProofErr">
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Proofing Error Anchor Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_EdGrp">
+ <list>
+ <xs:documentation>Range Permision Editing Group</xs:documentation>
+ <choice>
+ <!-- No Users Have Editing Permissions -->
+ <value>none</value>
+ <!-- All Users Have Editing Permissions -->
+ <value>everyone</value>
+ <!-- Administrator Group -->
+ <value>administrators</value>
+ <!-- Contributors Group -->
+ <value>contributors</value>
+ <!-- Editors Group -->
+ <value>editors</value>
+ <!-- Owners Group -->
+ <value>owners</value>
+ <!-- Current Group -->
+ <value>current</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Perm">
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Annotation ID</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="displacedByCustomXml">
+ <text/>
+ <xs:documentation>Annotation Displaced By Custom XML Markup</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_PermStart">
+ <ref name="CT_Perm"/>
+ <optional>
+ <attribute name="edGrp">
+ <text/>
+ <xs:documentation>Editor Group For Range Permission</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="ed">
+ <text/>
+ <xs:documentation>Single User For Range Permission</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colFirst">
+ <text/>
+ <xs:documentation>First Table Column Covered By Range Permission</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="colLast">
+ <text/>
+ <xs:documentation>Last Table Column Covered By Range Permission</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Text">
+ <ref name="ST_String"/>
+ <optional>
+ <attribute name="xml:space">
+ <text/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_FtnEdnRefChar">
+ <empty/>
+ </define>
+ <define name="CT_FtnEdnSep">
+ <empty/>
+ </define>
+ <define name="CT_FtnEdnCont">
+ <empty/>
+ </define>
+ <define name="CT_PgNum">
+ <empty/>
+ </define>
+ <define name="CT_Cr">
+ <empty/>
+ </define>
+ <define name="CT_Tab">
+ <empty/>
+ </define>
+ <define name="EG_RunInnerContent">
+ <choice>
+ <element name="br">
+ <ref name="CT_Br"/>
+ </element>
+ <element name="t">
+ <ref name="CT_Text"/>
+ </element>
+ <element name="delText">
+ <ref name="CT_Text"/>
+ </element>
+ <element name="instrText">
+ <ref name="CT_Text"/>
+ </element>
+ <element name="delInstrText">
+ <ref name="CT_Text"/>
+ </element>
+ <element name="noBreakHyphen">
+ <ref name="CT_Empty"/>
+ </element>
+ <optional>
+ <element name="softHyphen">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dayShort">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="monthShort">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="yearShort">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dayLong">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="monthLong">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="yearLong">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="annotationRef">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="footnoteRef">
+ <ref name="CT_FtnEdnRefChar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="endnoteRef">
+ <ref name="CT_FtnEdnRefChar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="separator">
+ <ref name="CT_FtnEdnSep"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="continuationSeparator">
+ <ref name="CT_FtnEdnCont"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sym">
+ <ref name="CT_Sym"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pgNum">
+ <ref name="CT_PgNum"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cr">
+ <ref name="CT_Cr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tab">
+ <ref name="CT_Tab"/>
+ </element>
+ </optional>
+ <element name="object">
+ <ref name="CT_Object"/>
+ </element>
+ <element name="pict">
+ <ref name="CT_Picture"/>
+ </element>
+ <element name="fldChar">
+ <ref name="CT_FldChar"/>
+ </element>
+ <element name="ruby">
+ <ref name="CT_Ruby"/>
+ </element>
+ <element name="footnoteReference">
+ <ref name="CT_FtnEdnRef"/>
+ </element>
+ <element name="endnoteReference">
+ <ref name="CT_FtnEdnRef"/>
+ </element>
+ <element name="commentReference">
+ <ref name="CT_CommentRef"/>
+ </element>
+ <element name="drawing">
+ <ref name="CT_Drawing"/>
+ </element>
+ <optional>
+ <element name="ptab">
+ <ref name="CT_PTab"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lastRenderedPageBreak">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ </choice>
+ </define>
+ <define name="CT_R">
+ <group>
+ <optional>
+ <ref name="EG_RPr"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_RunInnerContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="rsidRPr">
+ <text/>
+ <xs:documentation>Revision Identifier for Run Properties</xs:documentation>
+ </attribute>
+ <attribute name="rsidDel">
+ <text/>
+ <xs:documentation>Revision Identifier for Run Deletion</xs:documentation>
+ </attribute>
+ <attribute name="rsidR">
+ <text/>
+ <xs:documentation>Revision Identifier for Run</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Hint">
+ <list>
+ <xs:documentation>Font Type Hint</xs:documentation>
+ <choice>
+ <!-- High ANSI Font -->
+ <value>default</value>
+ <!-- East Asian Font -->
+ <value>eastAsia</value>
+ <!-- Complex Script Font -->
+ <value>cs</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_Theme">
+ <list>
+ <xs:documentation>Theme Font</xs:documentation>
+ <choice>
+ <!-- Major East Asian Theme Font -->
+ <value>majorEastAsia</value>
+ <!-- Major Complex Script Theme Font -->
+ <value>majorBidi</value>
+ <!-- Major ASCII Theme Font -->
+ <value>majorAscii</value>
+ <!-- Major High ANSI Theme Font -->
+ <value>majorHAnsi</value>
+ <!-- Minor East Asian Theme Font -->
+ <value>minorEastAsia</value>
+ <!-- Minor Complex Script Theme Font -->
+ <value>minorBidi</value>
+ <!-- Minor ASCII Theme Font -->
+ <value>minorAscii</value>
+ <!-- Minor High ANSI Theme Font -->
+ <value>minorHAnsi</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Fonts">
+ <attribute name="hint">
+ <ref name="ST_Hint"/>
+ <xs:documentation>Font Content Type</xs:documentation>
+ </attribute>
+ <attribute name="ascii">
+ <ref name="ST_String"/>
+ <xs:documentation>ASCII Font</xs:documentation>
+ </attribute>
+ <attribute name="hAnsi">
+ <ref name="ST_String"/>
+ <xs:documentation>High ANSI Font</xs:documentation>
+ </attribute>
+ <attribute name="eastAsia">
+ <ref name="ST_String"/>
+ <xs:documentation>East Asian Font</xs:documentation>
+ </attribute>
+ <attribute name="cs">
+ <ref name="ST_String"/>
+ <xs:documentation>Complex Script Font</xs:documentation>
+ </attribute>
+ <attribute name="asciiTheme">
+ <ref name="ST_Theme"/>
+ <xs:documentation>ASCII Theme Font</xs:documentation>
+ </attribute>
+ <attribute name="hAnsiTheme">
+ <ref name="ST_Theme"/>
+ <xs:documentation>High ANSI Theme Font</xs:documentation>
+ </attribute>
+ <attribute name="eastAsiaTheme">
+ <ref name="ST_Theme"/>
+ <xs:documentation>East Asian Theme Font</xs:documentation>
+ </attribute>
+ <attribute name="cstheme">
+ <ref name="ST_Theme"/>
+ <xs:documentation>Complex Script Theme Font</xs:documentation>
+ </attribute>
+ </define>
+ <define name="EG_RPrBase">
+ <optional>
+ <element name="rStyle">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rFonts">
+ <ref name="CT_Fonts"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="b">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bCs">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="i">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="iCs">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="caps">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="smallCaps">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="strike">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dstrike">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="outline">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shadow">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="emboss">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="imprint">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noProof">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="snapToGrid">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="vanish">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="webHidden">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="color">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="spacing">
+ <ref name="CT_SignedTwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="w">
+ <ref name="CT_TextScale"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="kern">
+ <ref name="CT_HpsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="position">
+ <ref name="CT_SignedHpsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sz">
+ <ref name="CT_HpsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="szCs">
+ <ref name="CT_HpsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="highlight">
+ <ref name="CT_Highlight"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="u">
+ <ref name="CT_Underline"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="effect">
+ <ref name="CT_TextEffect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bdr">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shd">
+ <ref name="CT_Shd"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="fitText">
+ <ref name="CT_FitText"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="vertAlign">
+ <ref name="CT_VerticalAlignRun"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rtl">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cs">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="em">
+ <ref name="CT_Em"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lang">
+ <ref name="CT_Language"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="eastAsianLayout">
+ <ref name="CT_EastAsianLayout"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="specVanish">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="oMath">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="EG_RPrContent">
+ <optional>
+ <ref name="EG_RPrBase"/>
+ </optional>
+ <optional>
+ <element name="rPrChange">
+ <ref name="CT_RPrChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_RPr">
+ <optional>
+ <ref name="EG_RPrContent"/>
+ </optional>
+ </define>
+ <define name="EG_RPr">
+ <optional>
+ <element name="rPr">
+ <ref name="CT_RPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="EG_RPrMath">
+ <choice>
+ <ref name="EG_RPr"/>
+ <element name="ins">
+ <ref name="CT_RPrChange"/>
+ </element>
+ <element name="del">
+ <ref name="CT_RPrChange"/>
+ </element>
+ </choice>
+ </define>
+ <define name="CT_RPrOriginal">
+ <zeroOrMore>
+ <ref name="EG_RPrBase"/>
+ </zeroOrMore>
+ </define>
+ <define name="CT_ParaRPrOriginal">
+ <optional>
+ <ref name="EG_ParaRPrTrackChanges"/>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_RPrBase"/>
+ </zeroOrMore>
+ </define>
+ <define name="CT_ParaRPr">
+ <optional>
+ <ref name="EG_ParaRPrTrackChanges"/>
+ </optional>
+ <optional>
+ <ref name="EG_RPrBase"/>
+ </optional>
+ <optional>
+ <element name="rPrChange">
+ <ref name="CT_ParaRPrChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_ParaTrackChange">
+ <ref name="CT_TrackChange"/>
+ </define>
+ <define name="EG_ParaRPrTrackChanges">
+ <optional>
+ <element name="ins">
+ <ref name="CT_ParaTrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="del">
+ <ref name="CT_ParaTrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="moveFrom">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="moveTo">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_AltChunk">
+ <optional>
+ <element name="altChunkPr">
+ <ref name="CT_AltChunkPr"/>
+ </element>
+ </optional>
+ <optional>
+ <attribute name="r:id">
+ <ref name="ST_String"/>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_AltChunkPr">
+ <optional>
+ <element name="matchSrc">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_RubyAlign">
+ <list>
+ <xs:documentation>Phonetic Guide Text Alignment</xs:documentation>
+ <choice>
+ <!-- Center -->
+ <value>center</value>
+ <!-- Distribute All Characters -->
+ <value>distributeLetter</value>
+ <!-- Distribute all Characters w/ Additional Space On Either Side -->
+ <value>distributeSpace</value>
+ <!-- Left Aligned -->
+ <value>left</value>
+ <!-- Right Aligned -->
+ <value>right</value>
+ <!-- Vertically Aligned to Right of Base Text -->
+ <value>rightVertical</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_RubyAlign">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Phonetic Guide Text Alignment Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_RubyPr">
+ <element name="rubyAlign">
+ <ref name="CT_RubyAlign"/>
+ </element>
+ <element name="hps">
+ <ref name="CT_HpsMeasure"/>
+ </element>
+ <element name="hpsRaise">
+ <ref name="CT_HpsMeasure"/>
+ </element>
+ <element name="hpsBaseText">
+ <ref name="CT_HpsMeasure"/>
+ </element>
+ <element name="lid">
+ <ref name="CT_Lang"/>
+ </element>
+ <optional>
+ <element name="dirty">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="EG_RubyContent">
+ <choice>
+ <element name="r">
+ <ref name="CT_R"/>
+ </element>
+ <zeroOrMore>
+ <ref name="EG_RunLevelElts"/>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="CT_RubyContent">
+ <zeroOrMore>
+ <ref name="EG_RubyContent"/>
+ </zeroOrMore>
+ </define>
+ <define name="CT_Ruby">
+ <element name="rubyPr">
+ <ref name="CT_RubyPr"/>
+ </element>
+ <element name="rt">
+ <ref name="CT_RubyContent"/>
+ </element>
+ <element name="rubyBase">
+ <ref name="CT_RubyContent"/>
+ </element>
+ </define>
+ <define name="ST_Lock">
+ <list>
+ <xs:documentation>Locking Types</xs:documentation>
+ <choice>
+ <!-- SDT Cannot Be Deleted -->
+ <value>sdtLocked</value>
+ <!-- Contents Cannot Be Edited At Runtime -->
+ <value>contentLocked</value>
+ <!-- No Locking -->
+ <value>unlocked</value>
+ <!-- Contents Cannot Be Edited At Runtime And SDT Cannot Be Deleted -->
+ <value>sdtContentLocked</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Lock">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Locking Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SdtListItem">
+ <attribute name="displayText">
+ <text/>
+ <xs:documentation>List Entry Display Text</xs:documentation>
+ </attribute>
+ <attribute name="value">
+ <text/>
+ <xs:documentation>List Entry Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_SdtDateMappingType">
+ <list>
+ <xs:documentation>Date Storage Format Types</xs:documentation>
+ <choice>
+ <!-- Same As Display -->
+ <value>text</value>
+ <!-- XML Schema Date Format -->
+ <value>date</value>
+ <!-- XML Schema DateTime Format -->
+ <value>dateTime</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_SdtDateMappingType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Date Storage Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_CalendarType">
+ <list>
+ <xs:documentation>Calendar Types</xs:documentation>
+ <choice>
+ <!-- Gregorian -->
+ <value>gregorian</value>
+ <!-- Hijri -->
+ <value>hijri</value>
+ <!-- Hebrew -->
+ <value>hebrew</value>
+ <!-- Taiwan -->
+ <value>taiwan</value>
+ <!-- Japanese Emperor Era -->
+ <value>japan</value>
+ <!-- Thai -->
+ <value>thai</value>
+ <!-- Korean Tangun Era -->
+ <value>korea</value>
+ <!-- Saka Era -->
+ <value>saka</value>
+ <!-- Gregorian transliterated English -->
+ <value>gregorianXlitEnglish</value>
+ <!-- Gregorian transliterated French -->
+ <value>gregorianXlitFrench</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_CalendarType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Calendar Type Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SdtDate">
+ <group>
+ <optional>
+ <element name="dateFormat">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lid">
+ <ref name="CT_Lang"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="storeMappedDataAs">
+ <ref name="CT_SdtDateMappingType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="calendar">
+ <ref name="CT_CalendarType"/>
+ </element>
+ </optional>
+ </group>
+ <optional>
+ <attribute name="fullDate">
+ <text/>
+ <xs:documentation>Last Known Date in XML Schema DateTime Format</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_SdtComboBox">
+ <zeroOrMore>
+ <element name="listItem">
+ <ref name="CT_SdtListItem"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <attribute name="lastValue">
+ <text/>
+ <xs:documentation>Combo Box Last Saved Value</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_SdtDocPart">
+ <optional>
+ <element name="docPartGallery">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="docPartCategory">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="docPartUnique">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SdtDropDownList">
+ <zeroOrMore>
+ <element name="listItem">
+ <ref name="CT_SdtListItem"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <attribute name="lastValue">
+ <text/>
+ <xs:documentation>Drop-down List Last Saved Value</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Placeholder">
+ <element name="docPart">
+ <ref name="CT_String"/>
+ </element>
+ </define>
+ <define name="CT_SdtText">
+ <attribute name="multiLine">
+ <text/>
+ <xs:documentation>Allow Soft Line Breaks</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_DataBinding">
+ <attribute name="prefixMappings">
+ <text/>
+ <xs:documentation>XML Namespace Prefix Mappings</xs:documentation>
+ </attribute>
+ <attribute name="xpath">
+ <text/>
+ <xs:documentation>XPath</xs:documentation>
+ </attribute>
+ <attribute name="storeItemID">
+ <text/>
+ <xs:documentation>Custom XML Data Storage ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SdtPr">
+ <oneOrMore>
+ <choice>
+ <optional>
+ <element name="rPr">
+ <ref name="CT_RPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="alias">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lock">
+ <ref name="CT_Lock"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="placeholder">
+ <ref name="CT_Placeholder"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="showingPlcHdr">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dataBinding">
+ <ref name="CT_DataBinding"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="temporary">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="id">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tag">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <choice>
+ <element name="equation">
+ <ref name="CT_Empty"/>
+ </element>
+ <element name="comboBox">
+ <ref name="CT_SdtComboBox"/>
+ </element>
+ <element name="date">
+ <ref name="CT_SdtDate"/>
+ </element>
+ <element name="docPartObj">
+ <ref name="CT_SdtDocPart"/>
+ </element>
+ <element name="docPartList">
+ <ref name="CT_SdtDocPart"/>
+ </element>
+ <element name="dropDownList">
+ <ref name="CT_SdtDropDownList"/>
+ </element>
+ <element name="picture">
+ <ref name="CT_Empty"/>
+ </element>
+ <element name="richText">
+ <ref name="CT_Empty"/>
+ </element>
+ <element name="text">
+ <ref name="CT_SdtText"/>
+ </element>
+ <element name="citation">
+ <ref name="CT_Empty"/>
+ </element>
+ <element name="group">
+ <ref name="CT_Empty"/>
+ </element>
+ <element name="bibliography">
+ <ref name="CT_Empty"/>
+ </element>
+ </choice>
+ </optional>
+ </choice>
+ </oneOrMore>
+ </define>
+ <define name="CT_SdtEndPr">
+ <oneOrMore>
+ <optional>
+ <element name="rPr">
+ <ref name="CT_RPr"/>
+ </element>
+ </optional>
+ </oneOrMore>
+ </define>
+ <define name="EG_ContentRunContent">
+ <choice>
+ <element name="customXml">
+ <ref name="CT_CustomXmlRun"/>
+ </element>
+ <element name="smartTag">
+ <ref name="CT_SmartTagRun"/>
+ </element>
+ <element name="sdt">
+ <ref name="CT_SdtRun"/>
+ </element>
+ <element name="r">
+ <ref name="CT_R"/>
+ </element>
+ <zeroOrMore>
+ <ref name="EG_RunLevelElts"/>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="CT_SdtContentRun">
+ <zeroOrMore>
+ <ref name="EG_PContent"/>
+ </zeroOrMore>
+ </define>
+ <define name="EG_ContentBlockContent">
+ <choice>
+ <element name="customXml">
+ <ref name="CT_CustomXmlBlock"/>
+ </element>
+ <element name="sdt">
+ <ref name="CT_SdtBlock"/>
+ </element>
+ <zeroOrMore>
+ <element name="p">
+ <ref name="CT_P"/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="tbl">
+ <ref name="CT_Tbl"/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <ref name="EG_RunLevelElts"/>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="CT_SdtContentBlock">
+ <zeroOrMore>
+ <ref name="EG_ContentBlockContent"/>
+ </zeroOrMore>
+ </define>
+ <define name="EG_ContentRowContent">
+ <choice>
+ <zeroOrMore>
+ <element name="tr">
+ <ref name="CT_Row"/>
+ </element>
+ </zeroOrMore>
+ <element name="customXml">
+ <ref name="CT_CustomXmlRow"/>
+ </element>
+ <element name="sdt">
+ <ref name="CT_SdtRow"/>
+ </element>
+ <zeroOrMore>
+ <ref name="EG_RunLevelElts"/>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="CT_SdtContentRow">
+ <zeroOrMore>
+ <ref name="EG_ContentRowContent"/>
+ </zeroOrMore>
+ </define>
+ <define name="EG_ContentCellContent">
+ <choice>
+ <zeroOrMore>
+ <element name="tc">
+ <ref name="CT_Tc"/>
+ </element>
+ </zeroOrMore>
+ <element name="customXml">
+ <ref name="CT_CustomXmlCell"/>
+ </element>
+ <element name="sdt">
+ <ref name="CT_SdtCell"/>
+ </element>
+ <zeroOrMore>
+ <ref name="EG_RunLevelElts"/>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="CT_SdtContentCell">
+ <zeroOrMore>
+ <ref name="EG_ContentCellContent"/>
+ </zeroOrMore>
+ </define>
+ <define name="CT_SdtBlock">
+ <optional>
+ <element name="sdtPr">
+ <ref name="CT_SdtPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtEndPr">
+ <ref name="CT_SdtEndPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtContent">
+ <ref name="CT_SdtContentBlock"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SdtRun">
+ <optional>
+ <element name="sdtPr">
+ <ref name="CT_SdtPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtEndPr">
+ <ref name="CT_SdtEndPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtContent">
+ <ref name="CT_SdtContentRun"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SdtCell">
+ <optional>
+ <element name="sdtPr">
+ <ref name="CT_SdtPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtEndPr">
+ <ref name="CT_SdtEndPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtContent">
+ <ref name="CT_SdtContentCell"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_SdtRow">
+ <optional>
+ <element name="sdtPr">
+ <ref name="CT_SdtPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtEndPr">
+ <ref name="CT_SdtEndPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sdtContent">
+ <ref name="CT_SdtContentRow"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Attr">
+ <attribute name="uri">
+ <text/>
+ <xs:documentation>Namespace</xs:documentation>
+ </attribute>
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Name</xs:documentation>
+ </attribute>
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomXmlRun">
+ <group>
+ <optional>
+ <element name="customXmlPr">
+ <ref name="CT_CustomXmlPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_PContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="uri">
+ <text/>
+ <xs:documentation>Custom XML Markup Namespace</xs:documentation>
+ </attribute>
+ <attribute name="element">
+ <text/>
+ <xs:documentation>Element name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SmartTagRun">
+ <group>
+ <optional>
+ <element name="smartTagPr">
+ <ref name="CT_SmartTagPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_PContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="uri">
+ <text/>
+ <xs:documentation>Smart Tag Namespace</xs:documentation>
+ </attribute>
+ <attribute name="element">
+ <text/>
+ <xs:documentation>Smart Tag Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomXmlBlock">
+ <group>
+ <optional>
+ <element name="customXmlPr">
+ <ref name="CT_CustomXmlPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_ContentBlockContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="uri">
+ <text/>
+ <xs:documentation>Custom XML Element Namespace</xs:documentation>
+ </attribute>
+ <attribute name="element">
+ <text/>
+ <xs:documentation>Custom XML Element Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomXmlPr">
+ <optional>
+ <element name="placeholder">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="attr">
+ <ref name="CT_Attr"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_CustomXmlRow">
+ <group>
+ <optional>
+ <element name="customXmlPr">
+ <ref name="CT_CustomXmlPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_ContentRowContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="uri">
+ <text/>
+ <xs:documentation>Custom XML Element Namespace</xs:documentation>
+ </attribute>
+ <attribute name="element">
+ <text/>
+ <xs:documentation>Custom XML Element Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CustomXmlCell">
+ <group>
+ <optional>
+ <element name="customXmlPr">
+ <ref name="CT_CustomXmlPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_ContentCellContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="uri">
+ <text/>
+ <xs:documentation>Custom XML Element Namespace</xs:documentation>
+ </attribute>
+ <attribute name="element">
+ <text/>
+ <xs:documentation>Custom XML Element Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SmartTagPr">
+ <zeroOrMore>
+ <element name="attr">
+ <ref name="CT_Attr"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="EG_PContent">
+ <choice>
+ <zeroOrMore>
+ <ref name="EG_ContentRunContent"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="fldSimple">
+ <ref name="CT_SimpleField"/>
+ </element>
+ </zeroOrMore>
+ <element name="hyperlink">
+ <ref name="CT_Hyperlink"/>
+ </element>
+ <element name="subDoc">
+ <ref name="CT_Rel"/>
+ </element>
+ </choice>
+ </define>
+ <define name="CT_P">
+ <group>
+ <optional>
+ <element name="pPr">
+ <ref name="CT_PPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_PContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="rsidRPr">
+ <text/>
+ <xs:documentation>Revision Identifier for Paragraph Glyph Formatting</xs:documentation>
+ </attribute>
+ <attribute name="rsidR">
+ <text/>
+ <xs:documentation>Revision Identifier for Paragraph</xs:documentation>
+ </attribute>
+ <attribute name="rsidDel">
+ <text/>
+ <xs:documentation>Revision Identifier for Paragraph Deletion</xs:documentation>
+ </attribute>
+ <attribute name="rsidP">
+ <text/>
+ <xs:documentation>Revision Identifier for Paragraph Properties</xs:documentation>
+ </attribute>
+ <attribute name="rsidRDefault">
+ <text/>
+ <xs:documentation>Default Revision Identifier for Runs</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TblWidth">
+ <list>
+ <xs:documentation>Table Width Units</xs:documentation>
+ <choice>
+ <!-- No Width -->
+ <value>nil</value>
+ <!-- Width in Fiftieths of a Percent -->
+ <value>pct</value>
+ <!-- Width in Twentieths of a Point -->
+ <value>dxa</value>
+ <!-- Automatically Determined Width -->
+ <value>auto</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Height">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Table Row Height</xs:documentation>
+ </attribute>
+ <attribute name="hRule">
+ <text/>
+ <xs:documentation>Table Row Height Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TblWidth">
+ <attribute name="w">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Table Width Value</xs:documentation>
+ </attribute>
+ <attribute name="type">
+ <ref name="ST_TblWidth"/>
+ <xs:documentation>Table Width Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TblGridCol">
+ <attribute name="w">
+ <ref name="ST_TwipsMeasure"/>
+ <xs:documentation>Grid Column Width</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TblGridBase">
+ <zeroOrMore>
+ <element name="gridCol">
+ <ref name="CT_TblGridCol"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_TblGrid">
+ <ref name="CT_TblGridBase"/>
+ <optional>
+ <element name="tblGridChange">
+ <ref name="CT_TblGridChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TcBorders">
+ <optional>
+ <element name="top">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="insideH">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="insideV">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tl2br">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tr2bl">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TcMar">
+ <optional>
+ <element name="top">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_Merge">
+ <list>
+ <xs:documentation>Merged Cell Type</xs:documentation>
+ <choice>
+ <!-- Continue Merged Region -->
+ <value>continue</value>
+ <!-- Start/Restart Merged Region -->
+ <value>restart</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_VMerge">
+ <attribute name="val">
+ <ref name="ST_Merge"/>
+ <xs:documentation>Vertical Merge Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_HMerge">
+ <attribute name="val">
+ <ref name="ST_Merge"/>
+ <xs:documentation>Horizontal Merge Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TcPrBase">
+ <optional>
+ <element name="cnfStyle">
+ <ref name="CT_Cnf"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tcW">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="gridSpan">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hMerge">
+ <ref name="CT_HMerge"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="vMerge">
+ <ref name="CT_VMerge"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tcBorders">
+ <ref name="CT_TcBorders"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shd">
+ <ref name="CT_Shd"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noWrap">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tcMar">
+ <ref name="CT_TcMar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="textDirection">
+ <ref name="CT_TextDirection"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tcFitText">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="vAlign">
+ <ref name="CT_VerticalJc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hideMark">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TcPr">
+ <ref name="CT_TcPrInner"/>
+ <optional>
+ <element name="tcPrChange">
+ <ref name="CT_TcPrChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TcPrInner">
+ <ref name="CT_TcPrBase"/>
+ <optional>
+ <ref name="EG_CellMarkupElements"/>
+ </optional>
+ </define>
+ <define name="CT_Tc">
+ <optional>
+ <element name="tcPr">
+ <ref name="CT_TcPr"/>
+ </element>
+ </optional>
+ <oneOrMore>
+ <ref name="EG_BlockLevelElts"/>
+ </oneOrMore>
+ </define>
+ <define name="ST_Cnf">
+ <data type="string">
+ <xs:documentation>Conditional Formatting Bitmask</xs:documentation>
+ <param name="length">12</param>
+ <param name="pattern">[01]*</param>
+ </data>
+ </define>
+ <define name="CT_Cnf">
+ <attribute name="val">
+ <ref name="ST_Cnf"/>
+ <xs:documentation>Conditional Formatting Bit Mask</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TrPrBase">
+ <oneOrMore>
+ <choice>
+ <optional>
+ <element name="cnfStyle">
+ <ref name="CT_Cnf"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="divId">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="gridBefore">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="gridAfter">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="wBefore">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="wAfter">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cantSplit">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="trHeight">
+ <ref name="CT_Height"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblHeader">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblCellSpacing">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="jc">
+ <ref name="CT_Jc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hidden">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </choice>
+ </oneOrMore>
+ </define>
+ <define name="CT_TrPr">
+ <ref name="CT_TrPrBase"/>
+ <group>
+ <optional>
+ <element name="ins">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="del">
+ <ref name="CT_TrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="trPrChange">
+ <ref name="CT_TrPrChange"/>
+ </element>
+ </optional>
+ </group>
+ </define>
+ <define name="CT_Row">
+ <group>
+ <optional>
+ <element name="tblPrEx">
+ <ref name="CT_TblPrEx"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="trPr">
+ <ref name="CT_TrPr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_ContentCellContent"/>
+ </zeroOrMore>
+ </group>
+ <attribute name="rsidRPr">
+ <text/>
+ <xs:documentation>Revision Identifier for Table Row Glyph Formatting</xs:documentation>
+ </attribute>
+ <attribute name="rsidR">
+ <text/>
+ <xs:documentation>Revision Identifier for Table Row</xs:documentation>
+ </attribute>
+ <attribute name="rsidDel">
+ <text/>
+ <xs:documentation>Revision Identifier for Table Row Deletion</xs:documentation>
+ </attribute>
+ <attribute name="rsidTr">
+ <text/>
+ <xs:documentation>Revision Identifier for Table Row Properties</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TblLayoutType">
+ <list>
+ <xs:documentation>Table Layout Type</xs:documentation>
+ <choice>
+ <!-- Fixed Width Table Layout -->
+ <value>fixed</value>
+ <!-- AutoFit Table Layout -->
+ <value>autofit</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TblLayoutType">
+ <attribute name="type">
+ <text/>
+ <xs:documentation>Table Layout Setting</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_TblOverlap">
+ <list>
+ <xs:documentation>Table Overlap Setting</xs:documentation>
+ <choice>
+ <!-- Floating Table Cannot Overlap -->
+ <value>never</value>
+ <!-- Floating Table Can Overlap -->
+ <value>overlap</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TblOverlap">
+ <attribute name="val">
+ <ref name="ST_TblOverlap"/>
+ <xs:documentation>Floating Table Overlap Setting</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TblPPr">
+ <attribute name="leftFromText">
+ <text/>
+ <xs:documentation>Distance From Left of Table to Text</xs:documentation>
+ </attribute>
+ <attribute name="rightFromText">
+ <text/>
+ <xs:documentation>(Distance From Right of Table to Text</xs:documentation>
+ </attribute>
+ <attribute name="topFromText">
+ <text/>
+ <xs:documentation>Distance From Top of Table to Text</xs:documentation>
+ </attribute>
+ <attribute name="bottomFromText">
+ <text/>
+ <xs:documentation>Distance From Bottom of Table to Text</xs:documentation>
+ </attribute>
+ <attribute name="vertAnchor">
+ <text/>
+ <xs:documentation>Table Vertical Anchor</xs:documentation>
+ </attribute>
+ <attribute name="horzAnchor">
+ <text/>
+ <xs:documentation>Table Horizontal Anchor</xs:documentation>
+ </attribute>
+ <attribute name="tblpXSpec">
+ <text/>
+ <xs:documentation>Relative Horizontal Alignment From Anchor</xs:documentation>
+ </attribute>
+ <attribute name="tblpX">
+ <text/>
+ <xs:documentation>Absolute Horizontal Distance From Anchor</xs:documentation>
+ </attribute>
+ <attribute name="tblpYSpec">
+ <text/>
+ <xs:documentation>Relative Vertical Alignment from Anchor</xs:documentation>
+ </attribute>
+ <attribute name="tblpY">
+ <text/>
+ <xs:documentation>Absolute Vertical Distance From Anchor</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_TblCellMar">
+ <optional>
+ <element name="top">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TblBorders">
+ <optional>
+ <element name="top">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="insideH">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="insideV">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TblPrBase">
+ <optional>
+ <element name="tblStyle">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblpPr">
+ <ref name="CT_TblPPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblOverlap">
+ <ref name="CT_TblOverlap"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bidiVisual">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblStyleRowBandSize">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblStyleColBandSize">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblW">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="jc">
+ <ref name="CT_Jc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblCellSpacing">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblInd">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblBorders">
+ <ref name="CT_TblBorders"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shd">
+ <ref name="CT_Shd"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblLayout">
+ <ref name="CT_TblLayoutType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblCellMar">
+ <ref name="CT_TblCellMar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblLook">
+ <ref name="CT_ShortHexNumber"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TblPr">
+ <ref name="CT_TblPrBase"/>
+ <optional>
+ <element name="tblPrChange">
+ <ref name="CT_TblPrChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TblPrExBase">
+ <optional>
+ <element name="tblW">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="jc">
+ <ref name="CT_Jc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblCellSpacing">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblInd">
+ <ref name="CT_TblWidth"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblBorders">
+ <ref name="CT_TblBorders"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shd">
+ <ref name="CT_Shd"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblLayout">
+ <ref name="CT_TblLayoutType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblCellMar">
+ <ref name="CT_TblCellMar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblLook">
+ <ref name="CT_ShortHexNumber"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_TblPrEx">
+ <ref name="CT_TblPrExBase"/>
+ <optional>
+ <element name="tblPrExChange">
+ <ref name="CT_TblPrExChange"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Tbl">
+ <zeroOrMore>
+ <ref name="EG_RangeMarkupElements"/>
+ </zeroOrMore>
+ <element name="tblPr">
+ <ref name="CT_TblPr"/>
+ </element>
+ <element name="tblGrid">
+ <ref name="CT_TblGrid"/>
+ </element>
+ <zeroOrMore>
+ <ref name="EG_ContentRowContent"/>
+ </zeroOrMore>
+ </define>
+ <define name="ST_FtnPos">
+ <list>
+ <xs:documentation>Footnote Positioning Location</xs:documentation>
+ <choice>
+ <!-- Footnotes Positioned at Page Bottom -->
+ <value>pageBottom</value>
+ <!-- Footnotes Positioned Beneath Text -->
+ <value>beneathText</value>
+ <!-- Footnotes Positioned At End of Section -->
+ <value>sectEnd</value>
+ <!-- Footnotes Positioned At End of Document -->
+ <value>docEnd</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FtnPos">
+ <attribute name="val">
+ <ref name="ST_FtnPos"/>
+ <xs:documentation>Footnote Position Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_EdnPos">
+ <list>
+ <xs:documentation>Endnote Positioning Location</xs:documentation>
+ <choice>
+ <!-- Endnotes Positioned at End of Section -->
+ <value>sectEnd</value>
+ <!-- Endnotes Positioned at End of Document -->
+ <value>docEnd</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_EdnPos">
+ <attribute name="val">
+ <ref name="ST_EdnPos"/>
+ <xs:documentation>Endnote Position Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_NumFmt">
+ <attribute name="val">
+ <ref name="ST_NumberFormat"/>
+ <xs:documentation>Numbering Format Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_RestartNumber">
+ <list>
+ <xs:documentation>Footnote/Endnote Numbering Restart Locations</xs:documentation>
+ <choice>
+ <!-- Continue Numbering From Previous Section -->
+ <value>continuous</value>
+ <!-- Restart Numbering For Each Section -->
+ <value>eachSect</value>
+ <!-- Restart Numbering On Each Page -->
+ <value>eachPage</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_NumRestart">
+ <attribute name="val">
+ <ref name="ST_RestartNumber"/>
+ <xs:documentation>Automatic Numbering Restart Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FtnEdnRef">
+ <optional>
+ <attribute name="customMarkFollows">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Suppress Footnote/Endnote Reference Mark</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Footnote/Endnote ID Reference</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FtnEdnSepRef">
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Footnote/Endnote ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FtnEdn">
+ <oneOrMore>
+ <ref name="EG_BlockLevelElts"/>
+ </oneOrMore>
+ <optional>
+ <attribute name="type">
+ <ref name="ST_FtnEdn"/>
+ <xs:documentation>Footnote/Endnote Type</xs:documentation>
+ </attribute>
+ </optional>
+ <attribute name="id">
+ <text/>
+ <xs:documentation>Footnote/Endnote ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_CommentRef">
+ <ref name="CT_Markup"/>
+ </define>
+ <define name="EG_FtnEdnNumProps">
+ <optional>
+ <element name="numStart">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numRestart">
+ <ref name="CT_NumRestart"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_FtnProps">
+ <optional>
+ <element name="pos">
+ <ref name="CT_FtnPos"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numFmt">
+ <ref name="CT_NumFmt"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_FtnEdnNumProps"/>
+ </optional>
+ </define>
+ <define name="CT_EdnProps">
+ <optional>
+ <element name="pos">
+ <ref name="CT_EdnPos"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numFmt">
+ <ref name="CT_NumFmt"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="EG_FtnEdnNumProps"/>
+ </optional>
+ </define>
+ <define name="CT_FtnDocProps">
+ <ref name="CT_FtnProps"/>
+ <zeroOrMore>
+ <element name="footnote">
+ <ref name="CT_FtnEdnSepRef"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_EdnDocProps">
+ <ref name="CT_EdnProps"/>
+ <zeroOrMore>
+ <element name="endnote">
+ <ref name="CT_FtnEdnSepRef"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_RecipientData">
+ <optional>
+ <element name="active">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <element name="column">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ <element name="uniqueTag">
+ <data type="base64Binary">
+ <xs:documentation>Unique Value for Record</xs:documentation>
+ </data>
+ </element>
+ </define>
+ <define name="CT_Recipients">
+ <oneOrMore>
+ <element name="recipientData">
+ <ref name="CT_RecipientData"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="recipients">
+ <element name="recipients">
+ <ref name="CT_Recipients"/>
+ </element>
+ </define>
+ <define name="CT_OdsoFieldMapData">
+ <optional>
+ <element name="type">
+ <ref name="CT_MailMergeOdsoFMDFieldType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="name">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mappedName">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="column">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lid">
+ <ref name="CT_Lang"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dynamicAddress">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_MailMergeSourceType">
+ <list>
+ <xs:documentation>Mail Merge ODSO Data Source Types</xs:documentation>
+ <choice>
+ <!-- Database Data Source -->
+ <value>database</value>
+ <!-- Address Book Data Source -->
+ <value>addressBook</value>
+ <!-- Alternate Document Format Data Source -->
+ <value>document1</value>
+ <!-- Alternate Document Format Data Source Two -->
+ <value>document2</value>
+ <!-- Text File Data Source -->
+ <value>text</value>
+ <!-- E-Mail Program Data Source -->
+ <value>email</value>
+ <!-- Native Data Souce -->
+ <value>native</value>
+ <!-- Legacy Document Format Data Source -->
+ <value>legacy</value>
+ <!-- Aggregate Data Source -->
+ <value>master</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_MailMergeSourceType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Data Source Type Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Odso">
+ <optional>
+ <element name="udl">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="table">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="src">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="colDelim">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="type">
+ <ref name="CT_MailMergeSourceType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="fHdr">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="fieldMapData">
+ <ref name="CT_OdsoFieldMapData"/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="recipientData">
+ <ref name="CT_Rel"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_MailMerge">
+ <element name="mainDocumentType">
+ <ref name="CT_MailMergeDocType"/>
+ </element>
+ <optional>
+ <element name="linkToQuery">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <element name="dataType">
+ <ref name="CT_MailMergeDataType"/>
+ </element>
+ <optional>
+ <element name="connectString">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="query">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="dataSource">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="headerSource">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotSuppressBlankLines">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="destination">
+ <ref name="CT_MailMergeDest"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="addressFieldName">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mailSubject">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mailAsAttachment">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="viewMergedData">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="activeRecord">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="checkErrors">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="odso">
+ <ref name="CT_Odso"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_TargetScreenSz">
+ <list>
+ <xs:documentation>Target Screen Sizes for Generated Web Pages</xs:documentation>
+ <choice>
+ <!-- Optimize for 544x376 -->
+ <value>544x376</value>
+ <!-- Optimize for 640x480 -->
+ <value>640x480</value>
+ <!-- Optimize for 720x512 -->
+ <value>720x512</value>
+ <!-- Optimize for 800x600 -->
+ <value>800x600</value>
+ <!-- Optimize for 1024x768 -->
+ <value>1024x768</value>
+ <!-- Optimize for 1152x882 -->
+ <value>1152x882</value>
+ <!-- Optimize for 1152x900 -->
+ <value>1152x900</value>
+ <!-- Optimize for 1280x1024 -->
+ <value>1280x1024</value>
+ <!-- Optimize for 1600x1200 -->
+ <value>1600x1200</value>
+ <!-- Optimize for 1800x1440 -->
+ <value>1800x1440</value>
+ <!-- Optimize for 1920x1200 -->
+ <value>1920x1200</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_TargetScreenSz">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Target Screen Size Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Compat">
+ <optional>
+ <element name="useSingleBorderforContiguousCells">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="wpJustification">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noTabHangInd">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noLeading">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="spaceForUL">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noColumnBalance">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="balanceSingleByteDoubleByteWidth">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noExtraLineSpacing">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotLeaveBackslashAlone">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ulTrailSpace">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotExpandShiftReturn">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="spacingInWholePoints">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lineWrapLikeWord6">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printBodyTextBeforeHeader">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printColBlack">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="wpSpaceWidth">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="showBreaksInFrames">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="subFontBySize">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressBottomSpacing">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressTopSpacing">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressSpacingAtTopOfPage">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressTopSpacingWP">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suppressSpBfAfterPgBrk">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="swapBordersFacingPages">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="convMailMergeEsc">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="truncateFontHeightsLikeWP6">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mwSmallCaps">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="usePrinterMetrics">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotSuppressParagraphBorders">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="wrapTrailSpaces">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="footnoteLayoutLikeWW8">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="shapeLayoutLikeWW8">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="alignTablesRowByRow">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="forgetLastTabAlignment">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="adjustLineHeightInTable">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autoSpaceLikeWord95">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noSpaceRaiseLower">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotUseHTMLParagraphAutoSpacing">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="layoutRawTableWidth">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="layoutTableRowsApart">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useWord97LineBreakRules">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotBreakWrappedTables">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotSnapToGridInCell">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="selectFldWithFirstOrLastChar">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="applyBreakingRules">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotWrapTextWithPunct">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotUseEastAsianBreakRules">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useWord2002TableStyleRules">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="growAutofit">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useFELayout">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useNormalStyleForList">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotUseIndentAsNumberingTabStop">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useAltKinsokuLineBreakRules">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="allowSpaceOfSameStyleInTable">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotSuppressIndentation">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotAutofitConstrainedTables">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autofitToFirstFixedWidthCell">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="underlineTabInNumList">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="displayHangulFixedWidth">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="splitPgBreakAndParaMark">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotVertAlignCellWithSp">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotBreakConstrainedForcedTable">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotVertAlignInTxbx">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useAnsiKerningPairs">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="cachedColBalance">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_DocVar">
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Document Variable Name</xs:documentation>
+ </attribute>
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Document Variable Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_DocVars">
+ <zeroOrMore>
+ <element name="docVar">
+ <ref name="CT_DocVar"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_DocRsids">
+ <optional>
+ <element name="rsidRoot">
+ <ref name="CT_LongHexNumber"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="rsid">
+ <ref name="CT_LongHexNumber"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="ST_CharacterSpacing">
+ <list>
+ <xs:documentation>Character-Level Whitespace Compression Settings</xs:documentation>
+ <choice>
+ <!-- Do Not Compress Whitespace -->
+ <value>doNotCompress</value>
+ <!-- Compress Whitespace From Punctuation Characters -->
+ <value>compressPunctuation</value>
+ <!-- Compress Whitespace From Both Japanese Kana And Punctuation Characters -->
+ <value>compressPunctuationAndJapaneseKana</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_CharacterSpacing">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_SaveThroughXslt">
+ <optional>
+ <attribute name="r:id">
+ <ref name="ST_String"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="solutionID">
+ <text/>
+ <xs:documentation>Local Identifier for XSL Transform</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_RPrDefault">
+ <optional>
+ <element name="rPr">
+ <ref name="CT_RPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_PPrDefault">
+ <optional>
+ <element name="pPr">
+ <ref name="CT_PPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_DocDefaults">
+ <optional>
+ <element name="rPrDefault">
+ <ref name="CT_RPrDefault"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pPrDefault">
+ <ref name="CT_PPrDefault"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_ColorSchemeIndex">
+ <list>
+ <xs:documentation>Theme Color Reference</xs:documentation>
+ <choice>
+ <!-- Dark 1 Theme Color Reference -->
+ <value>dark1</value>
+ <!-- Light 1 Theme Color Reference -->
+ <value>light1</value>
+ <!-- Dark 2 Theme Color Reference -->
+ <value>dark2</value>
+ <!-- Light 2 Theme Color Reference -->
+ <value>light2</value>
+ <!-- Accent 1 Theme Color Reference -->
+ <value>accent1</value>
+ <!-- Accent 2 Theme Color Reference -->
+ <value>accent2</value>
+ <!-- Accent 3 Theme Color Reference -->
+ <value>accent3</value>
+ <!-- Accent4 Theme Color Reference -->
+ <value>accent4</value>
+ <!-- Accent5 Theme Color Reference -->
+ <value>accent5</value>
+ <!-- Accent 6 Theme Color Reference -->
+ <value>accent6</value>
+ <!-- Hyperlink Theme Color Reference -->
+ <value>hyperlink</value>
+ <!-- Followed Hyperlink Theme Color Reference -->
+ <value>followedHyperlink</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_ColorSchemeMapping">
+ <attribute name="bg1">
+ <text/>
+ <xs:documentation>Background 1 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="t1">
+ <text/>
+ <xs:documentation>Text 1 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="bg2">
+ <text/>
+ <xs:documentation>Background 2 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="t2">
+ <text/>
+ <xs:documentation>Text 2 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="accent1">
+ <text/>
+ <xs:documentation>Accent 1 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="accent2">
+ <text/>
+ <xs:documentation>Accent 2 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="accent3">
+ <text/>
+ <xs:documentation>Accent3 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="accent4">
+ <text/>
+ <xs:documentation>Accent4 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="accent5">
+ <text/>
+ <xs:documentation>Accent5 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="accent6">
+ <text/>
+ <xs:documentation>Accent6 Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="hyperlink">
+ <text/>
+ <xs:documentation>Hyperlink Theme Color Mapping</xs:documentation>
+ </attribute>
+ <attribute name="followedHyperlink">
+ <text/>
+ <xs:documentation>Followed Hyperlink Theme Color Mapping</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_ReadingModeInkLockDown">
+ <attribute name="actualPg">
+ <text/>
+ <xs:documentation>Use Actual Pages, Not Virtual Pages</xs:documentation>
+ </attribute>
+ <attribute name="w">
+ <text/>
+ <xs:documentation>Virtual Page Width</xs:documentation>
+ </attribute>
+ <attribute name="h">
+ <text/>
+ <xs:documentation>Virtual Page Height</xs:documentation>
+ </attribute>
+ <attribute name="fontSz">
+ <text/>
+ <xs:documentation>Font Size Scaling</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_WriteProtection">
+ <optional>
+ <attribute name="recommended">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Recommend Write Protection in User Interface</xs:documentation>
+ </attribute>
+ </optional>
+ <ref name="AG_Password"/>
+ </define>
+ <define name="CT_Settings">
+ <optional>
+ <element name="writeProtection">
+ <ref name="CT_WriteProtection"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="view">
+ <ref name="CT_View"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="zoom">
+ <ref name="CT_Zoom"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="removePersonalInformation">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="removeDateAndTime">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotDisplayPageBoundaries">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="displayBackgroundShape">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printPostScriptOverText">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printFractionalCharacterWidth">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printFormsData">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="embedTrueTypeFonts">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="embedSystemFonts">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="saveSubsetFonts">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="saveFormsData">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mirrorMargins">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="alignBordersAndEdges">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bordersDoNotSurroundHeader">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bordersDoNotSurroundFooter">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="gutterAtTop">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hideSpellingErrors">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hideGrammaticalErrors">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="activeWritingStyle">
+ <ref name="CT_WritingStyle"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="proofState">
+ <ref name="CT_Proof"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="formsDesign">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="attachedTemplate">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="linkStyles">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="stylePaneFormatFilter">
+ <ref name="CT_ShortHexNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="stylePaneSortMethod">
+ <ref name="CT_ShortHexNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="documentType">
+ <ref name="CT_DocType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="mailMerge">
+ <ref name="CT_MailMerge"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="revisionView">
+ <ref name="CT_TrackChangesView"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="trackRevisions">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotTrackMoves">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotTrackFormatting">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="documentProtection">
+ <ref name="CT_DocProtect"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autoFormatOverride">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="styleLockTheme">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="styleLockQFSet">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="defaultTabStop">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autoHyphenation">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="consecutiveHyphenLimit">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hyphenationZone">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotHyphenateCaps">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="showEnvelope">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="summaryLength">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="clickAndTypeStyle">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="defaultTableStyle">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="evenAndOddHeaders">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bookFoldRevPrinting">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bookFoldPrinting">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bookFoldPrintingSheets">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="drawingGridHorizontalSpacing">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="drawingGridVerticalSpacing">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="displayHorizontalDrawingGridEvery">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="displayVerticalDrawingGridEvery">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotUseMarginsForDrawingGridOrigin">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="drawingGridHorizontalOrigin">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="drawingGridVerticalOrigin">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotShadeFormData">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noPunctuationKerning">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="characterSpacingControl">
+ <ref name="CT_CharacterSpacing"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="printTwoOnOne">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="strictFirstAndLastChars">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noLineBreaksAfter">
+ <ref name="CT_Kinsoku"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noLineBreaksBefore">
+ <ref name="CT_Kinsoku"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="savePreviewPicture">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotValidateAgainstSchema">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="saveInvalidXml">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="ignoreMixedContent">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="alwaysShowPlaceholderText">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotDemarcateInvalidXml">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="saveXmlDataOnly">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="useXSLTWhenSaving">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="saveThroughXslt">
+ <ref name="CT_SaveThroughXslt"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="showXMLTags">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="alwaysMergeEmptyNamespace">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="updateFields">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hdrShapeDefaults">
+ <ref name="CT_ShapeDefaults"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="footnotePr">
+ <ref name="CT_FtnDocProps"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="endnotePr">
+ <ref name="CT_EdnDocProps"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="compat">
+ <ref name="CT_Compat"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="docVars">
+ <ref name="CT_DocVars"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rsids">
+ <ref name="CT_DocRsids"/>
+ </element>
+ </optional>
+ <optional>
+ <ref name="mathPr"/>
+ </optional>
+ <optional>
+ <element name="uiCompat97To2003">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="attachedSchema">
+ <ref name="CT_String"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="themeFontLang">
+ <ref name="CT_Language"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="clrSchemeMapping">
+ <ref name="CT_ColorSchemeMapping"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotIncludeSubdocsInStats">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotAutoCompressPictures">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="forceUpgrade">
+ <ref name="CT_Empty"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="captions">
+ <ref name="CT_Captions"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="readModeInkLockDown">
+ <ref name="CT_ReadingModeInkLockDown"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="smartTagType">
+ <ref name="CT_SmartTagType"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <ref name="schemaLibrary"/>
+ </optional>
+ <optional>
+ <element name="shapeDefaults">
+ <ref name="CT_ShapeDefaults"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotEmbedSmartTags">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="decimalSymbol">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="listSeparator">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_WebSettings">
+ <optional>
+ <element name="frameset">
+ <ref name="CT_Frameset"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="divs">
+ <ref name="CT_Divs"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="encoding">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="optimizeForBrowser">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="relyOnVML">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="allowPNG">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotRelyOnCSS">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotSaveAsSingleFile">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotOrganizeInFolder">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="doNotUseLongFileNames">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pixelsPerInch">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="targetScreenSz">
+ <ref name="CT_TargetScreenSz"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="saveSmartTagsAsXml">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_FrameScrollbar">
+ <list>
+ <xs:documentation>Frame Scrollbar Visibility</xs:documentation>
+ <choice>
+ <!-- Always Show Scrollbar -->
+ <value>on</value>
+ <!-- Never Show Scrollbar -->
+ <value>off</value>
+ <!-- Automatically Show Scrollbar As Needed -->
+ <value>auto</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FrameScrollbar">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Scrollbar Display Option Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Frame">
+ <optional>
+ <element name="sz">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="name">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sourceFileName">
+ <ref name="CT_Rel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="marW">
+ <ref name="CT_PixelsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="marH">
+ <ref name="CT_PixelsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="scrollbar">
+ <ref name="CT_FrameScrollbar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noResizeAllowed">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="linkedToFile">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_FrameLayout">
+ <list>
+ <xs:documentation>Frameset Layout Order</xs:documentation>
+ <choice>
+ <!-- Stack Frames Vertically -->
+ <value>rows</value>
+ <!-- Stack Frames Horizontally -->
+ <value>cols</value>
+ <!-- Do Not Stack Frames -->
+ <value>none</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FrameLayout">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Frameset Layout Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FramesetSplitbar">
+ <optional>
+ <element name="w">
+ <ref name="CT_TwipsMeasure"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="color">
+ <ref name="CT_Color"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="noBorder">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="flatBorders">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Frameset">
+ <optional>
+ <element name="sz">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="framesetSplitbar">
+ <ref name="CT_FramesetSplitbar"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="frameLayout">
+ <ref name="CT_FrameLayout"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <choice>
+ <zeroOrMore>
+ <element name="frameset">
+ <ref name="CT_Frameset"/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="frame">
+ <ref name="CT_Frame"/>
+ </element>
+ </zeroOrMore>
+ </choice>
+ </zeroOrMore>
+ </define>
+ <define name="CT_NumPicBullet">
+ <element name="pict">
+ <ref name="CT_Picture"/>
+ </element>
+ <attribute name="numPicBulletId">
+ <text/>
+ <xs:documentation>Picture Numbering Symbol ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_LevelSuffix">
+ <list>
+ <xs:documentation>Content Between Numbering Symbol and Paragraph Text</xs:documentation>
+ <choice>
+ <!-- Tab Between Numbering and Text -->
+ <value>tab</value>
+ <!-- Space Between Numbering and Text -->
+ <value>space</value>
+ <!-- Nothing Between Numbering and Text -->
+ <value>nothing</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_LevelSuffix">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Character Type Between Numbering and Text</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_LevelText">
+ <optional>
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Level Text</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="null">
+ <text/>
+ <xs:documentation>Level Text Is Null Character</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_LvlLegacy">
+ <optional>
+ <attribute name="legacy">
+ <text/>
+ <xs:documentation>Use Legacy Numbering Properties</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="legacySpace">
+ <text/>
+ <xs:documentation>Legacy Spacing</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="legacyIndent">
+ <text/>
+ <xs:documentation>Legacy Indent</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_Lvl">
+ <group>
+ <optional>
+ <element name="start">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numFmt">
+ <ref name="CT_NumFmt"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lvlRestart">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pStyle">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="isLgl">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="suff">
+ <ref name="CT_LevelSuffix"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lvlText">
+ <ref name="CT_LevelText"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lvlPicBulletId">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="legacy">
+ <ref name="CT_LvlLegacy"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lvlJc">
+ <ref name="CT_Jc"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pPr">
+ <ref name="CT_PPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rPr">
+ <ref name="CT_RPr"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="ilvl">
+ <text/>
+ <xs:documentation>Numbering Level</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="tplc">
+ <text/>
+ <xs:documentation>Template Code</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="tentative">
+ <text/>
+ <xs:documentation>Tentative Numbering</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_MultiLevelType">
+ <list>
+ <xs:documentation>Numbering Definition Type</xs:documentation>
+ <choice>
+ <!-- Single Level Numbering Definition -->
+ <value>singleLevel</value>
+ <!-- Multilevel Numbering Definition -->
+ <value>multilevel</value>
+ <!-- Hybrid Multilevel Numbering Definition -->
+ <value>hybridMultilevel</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_MultiLevelType">
+ <attribute name="val">
+ <ref name="ST_MultiLevelType"/>
+ <xs:documentation>Abstract Numbering Definition Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_AbstractNum">
+ <group>
+ <optional>
+ <element name="nsid">
+ <ref name="CT_LongHexNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="multiLevelType">
+ <ref name="CT_MultiLevelType"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tmpl">
+ <ref name="CT_LongHexNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="name">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="styleLink">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="numStyleLink">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="lvl">
+ <ref name="CT_Lvl"/>
+ </element>
+ </zeroOrMore>
+ </group>
+ <attribute name="abstractNumId">
+ <text/>
+ <xs:documentation>Abstract Numbering Definition ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_NumLvl">
+ <group>
+ <optional>
+ <element name="startOverride">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="lvl">
+ <ref name="CT_Lvl"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="ilvl">
+ <text/>
+ <xs:documentation>Numbering Level ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Num">
+ <group>
+ <element name="abstractNumId">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ <zeroOrMore>
+ <element name="lvlOverride">
+ <ref name="CT_NumLvl"/>
+ </element>
+ </zeroOrMore>
+ </group>
+ <attribute name="numId">
+ <text/>
+ <xs:documentation>Numbering Definition Instance ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Numbering">
+ <zeroOrMore>
+ <element name="numPicBullet">
+ <ref name="CT_NumPicBullet"/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="abstractNum">
+ <ref name="CT_AbstractNum"/>
+ </element>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="num">
+ <ref name="CT_Num"/>
+ </element>
+ </zeroOrMore>
+ <optional>
+ <element name="numIdMacAtCleanup">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ </define>
+ <define name="ST_TblStyleOverrideType">
+ <list>
+ <xs:documentation>Conditional Table Style Formatting Types</xs:documentation>
+ <choice>
+ <!-- Whole table formatting -->
+ <value>wholeTable</value>
+ <!-- First Row Conditional Formatting -->
+ <value>firstRow</value>
+ <!-- Last table row formatting -->
+ <value>lastRow</value>
+ <!-- First Column Conditional Formatting -->
+ <value>firstCol</value>
+ <!-- Last table column formatting -->
+ <value>lastCol</value>
+ <!-- Banded Column Conditional Formatting -->
+ <value>band1Vert</value>
+ <!-- Even Column Stripe Conditional Formatting -->
+ <value>band2Vert</value>
+ <!-- Banded Row Conditional Formatting -->
+ <value>band1Horz</value>
+ <!-- Even Row Stripe Conditional Formatting -->
+ <value>band2Horz</value>
+ <!-- Top right table cell formatting -->
+ <value>neCell</value>
+ <!-- Top left table cell formatting -->
+ <value>nwCell</value>
+ <!-- Bottom right table cell formatting -->
+ <value>seCell</value>
+ <!-- Bottom left table cell formatting -->
+ <value>swCell</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Style_tblStylePr">
+ <group>
+ <optional>
+ <element name="pPr">
+ <ref name="CT_PPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rPr">
+ <ref name="EG_RPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblPr">
+ <ref name="CT_TblPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="trPr">
+ <ref name="CT_TrPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tcPr">
+ <ref name="CT_TcPrBase"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="type">
+ <ref name="ST_TblStyleOverrideType"/>
+ <xs:documentation>Table Style Conditional Formatting Type</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Style_TblPr">
+ <ref name="CT_TblPrBase"/>
+ </define>
+ <define name="CT_Style_TrPr">
+ <ref name="CT_TrPrBase"/>
+ </define>
+ <define name="CT_Style_TcPr">
+ <ref name="CT_TcPrBase"/>
+ </define>
+ <define name="ST_StyleType">
+ <list>
+ <xs:documentation>Style Types</xs:documentation>
+ <choice>
+ <!-- Paragraph Style -->
+ <value>paragraph</value>
+ <!-- Character Style -->
+ <value>character</value>
+ <!-- Table Style -->
+ <value>table</value>
+ <!-- Numbering Style -->
+ <value>numbering</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Style">
+ <group>
+ <optional>
+ <element name="name">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="aliases">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="basedOn">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="next">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="link">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="autoRedefine">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="hidden">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="uiPriority">
+ <ref name="CT_DecimalNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="semiHidden">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="unhideWhenUsed">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="qFormat">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="locked">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="personal">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="personalCompose">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="personalReply">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rsid">
+ <ref name="CT_LongHexNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pPr">
+ <ref name="CT_PPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="rPr">
+ <ref name="EG_RPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tblPr">
+ <ref name="CT_TblPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="trPr">
+ <ref name="CT_TrPrBase"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="tcPr">
+ <ref name="CT_TcPrBase"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="tblStylePr">
+ <ref name="CT_Style_tblStylePr"/>
+ </element>
+ </zeroOrMore>
+ </group>
+ <optional>
+ <attribute name="type">
+ <ref name="ST_StyleType"/>
+ <xs:documentation>Style Type</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="styleId">
+ <ref name="ST_String"/>
+ <xs:documentation>Style ID</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="default">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Default Style</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="customStyle">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>User-Defined Style</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_LsdException">
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Primary Style Name</xs:documentation>
+ </attribute>
+ <attribute name="locked">
+ <text/>
+ <xs:documentation>Latent Style Locking Setting</xs:documentation>
+ </attribute>
+ <attribute name="uiPriority">
+ <text/>
+ <xs:documentation>Override default sorting order</xs:documentation>
+ </attribute>
+ <attribute name="semiHidden">
+ <text/>
+ <xs:documentation>Semi hidden text override</xs:documentation>
+ </attribute>
+ <attribute name="unhideWhenUsed">
+ <text/>
+ <xs:documentation>Unhide when used</xs:documentation>
+ </attribute>
+ <attribute name="qFormat">
+ <text/>
+ <xs:documentation>Latent Style Primary Style Setting</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_LatentStyles">
+ <zeroOrMore>
+ <element name="lsdException">
+ <ref name="CT_LsdException"/>
+ </element>
+ </zeroOrMore>
+ <attribute name="defLockedState">
+ <text/>
+ <xs:documentation>Default Style Locking Setting</xs:documentation>
+ </attribute>
+ <attribute name="defUIPriority">
+ <text/>
+ <xs:documentation>Default User Interface Priority Setting</xs:documentation>
+ </attribute>
+ <attribute name="defSemiHidden">
+ <text/>
+ <xs:documentation>Default Semi-Hidden Setting</xs:documentation>
+ </attribute>
+ <attribute name="defUnhideWhenUsed">
+ <text/>
+ <xs:documentation>Default Hidden Until Used Setting</xs:documentation>
+ </attribute>
+ <attribute name="defQFormat">
+ <text/>
+ <xs:documentation>Default Primary Style Setting</xs:documentation>
+ </attribute>
+ <attribute name="count">
+ <text/>
+ <xs:documentation>Latent Style Count</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Styles">
+ <optional>
+ <element name="docDefaults">
+ <ref name="CT_DocDefaults"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="latentStyles">
+ <ref name="CT_LatentStyles"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="style">
+ <ref name="CT_Style"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="ST_Panose">
+ <data type="hexBinary">
+ <xs:documentation>Panose-1 Number</xs:documentation>
+ <param name="length">10</param>
+ </data>
+ </define>
+ <define name="CT_Panose">
+ <attribute name="val">
+ <ref name="ST_Panose"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_FontFamily">
+ <list>
+ <xs:documentation>Font Family Value</xs:documentation>
+ <choice>
+ <!-- Novelty Font -->
+ <value>decorative</value>
+ <!-- Monospace Font -->
+ <value>modern</value>
+ <!-- Proportional Font With Serifs -->
+ <value>roman</value>
+ <!-- Script Font -->
+ <value>script</value>
+ <!-- Proportional Font Without Serifs -->
+ <value>swiss</value>
+ <!-- No Font Family -->
+ <value>auto</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_FontFamily">
+ <attribute name="val">
+ <ref name="ST_FontFamily"/>
+ <xs:documentation>Font Family Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_Pitch">
+ <list>
+ <xs:documentation>Font Pitch Value</xs:documentation>
+ <choice>
+ <!-- Fixed Width -->
+ <value>fixed</value>
+ <!-- Proportional Width -->
+ <value>variable</value>
+ <!-- Default -->
+ <value>default</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Pitch">
+ <attribute name="val">
+ <ref name="ST_Pitch"/>
+ <xs:documentation>Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FontSig">
+ <attribute name="usb0">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>First 32 Bits of Unicode Subset Bitfield</xs:documentation>
+ </attribute>
+ <attribute name="usb1">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Second 32 Bits of Unicode Subset Bitfield</xs:documentation>
+ </attribute>
+ <attribute name="usb2">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Third 32 Bits of Unicode Subset Bitfield</xs:documentation>
+ </attribute>
+ <attribute name="usb3">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Fourth 32 Bits of Unicode Subset Bitfield</xs:documentation>
+ </attribute>
+ <attribute name="csb0">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Lower 32 Bits of Code Page Bit Field</xs:documentation>
+ </attribute>
+ <attribute name="csb1">
+ <ref name="ST_UcharHexNumber"/>
+ <xs:documentation>Upper 32 Bits of Code Page Bit Field</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FontRel">
+ <ref name="CT_Rel"/>
+ <attribute name="fontKey">
+ <text/>
+ <xs:documentation>Embedded Font Obfuscation Key</xs:documentation>
+ </attribute>
+ <attribute name="subsetted">
+ <text/>
+ <xs:documentation>Embedded Font Is Subsetted</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Font">
+ <group>
+ <optional>
+ <element name="altName">
+ <ref name="CT_String"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="panose1">
+ <ref name="CT_Panose"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="charset">
+ <ref name="CT_UcharHexNumber"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="family">
+ <ref name="CT_FontFamily"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="notTrueType">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="pitch">
+ <ref name="CT_Pitch"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="sig">
+ <ref name="CT_FontSig"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="embedRegular">
+ <ref name="CT_FontRel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="embedBold">
+ <ref name="CT_FontRel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="embedItalic">
+ <ref name="CT_FontRel"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="embedBoldItalic">
+ <ref name="CT_FontRel"/>
+ </element>
+ </optional>
+ </group>
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Primary Font Name</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_FontsList">
+ <zeroOrMore>
+ <element name="font">
+ <ref name="CT_Font"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="CT_DivBdr">
+ <optional>
+ <element name="top">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="left">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bottom">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="right">
+ <ref name="CT_Border"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Div">
+ <group>
+ <optional>
+ <element name="blockQuote">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bodyDiv">
+ <ref name="CT_OnOff"/>
+ </element>
+ </optional>
+ <element name="marLeft">
+ <ref name="CT_SignedTwipsMeasure"/>
+ </element>
+ <element name="marRight">
+ <ref name="CT_SignedTwipsMeasure"/>
+ </element>
+ <element name="marTop">
+ <ref name="CT_SignedTwipsMeasure"/>
+ </element>
+ <element name="marBottom">
+ <ref name="CT_SignedTwipsMeasure"/>
+ </element>
+ <optional>
+ <element name="divBdr">
+ <ref name="CT_DivBdr"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <element name="divsChild">
+ <ref name="CT_Divs"/>
+ </element>
+ </zeroOrMore>
+ </group>
+ <attribute name="id">
+ <text/>
+ <xs:documentation>div Data ID</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_Divs">
+ <oneOrMore>
+ <element name="div">
+ <ref name="CT_Div"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_TxbxContent">
+ <oneOrMore>
+ <ref name="EG_BlockLevelElts"/>
+ </oneOrMore>
+ </define>
+ <define name="txbxContent">
+ <element name="txbxContent">
+ <ref name="CT_TxbxContent"/>
+ </element>
+ </define>
+ <define name="EG_MathContent">
+ <choice>
+ <ref name="oMathPara"/>
+ <ref name="oMath"/>
+ </choice>
+ </define>
+ <define name="EG_BlockLevelChunkElts">
+ <zeroOrMore>
+ <ref name="EG_ContentBlockContent"/>
+ </zeroOrMore>
+ </define>
+ <define name="EG_BlockLevelElts">
+ <choice>
+ <zeroOrMore>
+ <ref name="EG_BlockLevelChunkElts"/>
+ </zeroOrMore>
+ <zeroOrMore>
+ <element name="altChunk">
+ <ref name="CT_AltChunk"/>
+ </element>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="EG_RunLevelElts">
+ <choice>
+ <optional>
+ <element name="proofErr">
+ <ref name="CT_ProofErr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="permStart">
+ <ref name="CT_PermStart"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="permEnd">
+ <ref name="CT_Perm"/>
+ </element>
+ </optional>
+ <zeroOrMore>
+ <ref name="EG_RangeMarkupElements"/>
+ </zeroOrMore>
+ <optional>
+ <element name="ins">
+ <ref name="CT_RunTrackChange"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="del">
+ <ref name="CT_RunTrackChange"/>
+ </element>
+ </optional>
+ <element name="moveFrom">
+ <ref name="CT_RunTrackChange"/>
+ </element>
+ <element name="moveTo">
+ <ref name="CT_RunTrackChange"/>
+ </element>
+ <zeroOrMore>
+ <ref name="EG_MathContent"/>
+ </zeroOrMore>
+ </choice>
+ </define>
+ <define name="CT_Body">
+ <zeroOrMore>
+ <ref name="EG_BlockLevelElts"/>
+ </zeroOrMore>
+ <optional>
+ <element name="sectPr">
+ <ref name="CT_SectPr"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_ShapeDefaults">
+ <oneOrMore>
+ <zeroOrMore>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ </zeroOrMore>
+ </oneOrMore>
+ </define>
+ <define name="CT_Comments">
+ <zeroOrMore>
+ <element name="comment">
+ <ref name="CT_Comment"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="comments">
+ <element name="comments">
+ <ref name="CT_Comments"/>
+ </element>
+ </define>
+ <define name="CT_Footnotes">
+ <zeroOrMore>
+ <element name="footnote">
+ <ref name="CT_FtnEdn"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="footnotes">
+ <element name="footnotes">
+ <ref name="CT_Footnotes"/>
+ </element>
+ </define>
+ <define name="CT_Endnotes">
+ <zeroOrMore>
+ <element name="endnote">
+ <ref name="CT_FtnEdn"/>
+ </element>
+ </zeroOrMore>
+ </define>
+ <define name="endnotes">
+ <element name="endnotes">
+ <ref name="CT_Endnotes"/>
+ </element>
+ </define>
+ <define name="hdr">
+ <element name="hdr">
+ <ref name="CT_HdrFtr"/>
+ </element>
+ </define>
+ <define name="ftr">
+ <element name="ftr">
+ <ref name="CT_HdrFtr"/>
+ </element>
+ </define>
+ <define name="CT_SmartTagType">
+ <attribute name="namespaceuri">
+ <text/>
+ <xs:documentation>Smart Tag Namespace</xs:documentation>
+ </attribute>
+ <attribute name="name">
+ <text/>
+ <xs:documentation>Smart Tag Name</xs:documentation>
+ </attribute>
+ <attribute name="url">
+ <text/>
+ <xs:documentation>Smart Tag Supplementary URL</xs:documentation>
+ </attribute>
+ </define>
+ <define name="ST_ThemeColor">
+ <list>
+ <xs:documentation>Theme Color</xs:documentation>
+ <choice>
+ <!-- Dark 1 Theme Color -->
+ <value>dark1</value>
+ <!-- Light 1 Theme Color -->
+ <value>light1</value>
+ <!-- Dark 2 Theme Color -->
+ <value>dark2</value>
+ <!-- Light 2 Theme Color -->
+ <value>light2</value>
+ <!-- Accent 1 Theme Color -->
+ <value>accent1</value>
+ <!-- Accent 2 Theme Color -->
+ <value>accent2</value>
+ <!-- Accent 3 Theme Color -->
+ <value>accent3</value>
+ <!-- Accent 4 Theme Color -->
+ <value>accent4</value>
+ <!-- Accent 5 Theme Color -->
+ <value>accent5</value>
+ <!-- Accent 6 Theme Color -->
+ <value>accent6</value>
+ <!-- Hyperlink Theme Color -->
+ <value>hyperlink</value>
+ <!-- Followed Hyperlink Theme Color -->
+ <value>followedHyperlink</value>
+ <!-- No Theme Color -->
+ <value>none</value>
+ <!-- Background 1 Theme Color -->
+ <value>background1</value>
+ <!-- Text 1 Theme Color -->
+ <value>text1</value>
+ <!-- Background 2 Theme Color -->
+ <value>background2</value>
+ <!-- Text 2 Theme Color -->
+ <value>text2</value>
+ </choice>
+ </list>
+ </define>
+ <define name="ST_DocPartBehavior">
+ <list>
+ <xs:documentation>Insertion Behavior Types</xs:documentation>
+ <choice>
+ <!-- Insert Content At Specified Location -->
+ <value>content</value>
+ <!-- Ensure Entry Is In New Paragraph -->
+ <value>p</value>
+ <!-- Ensure Entry Is On New Page -->
+ <value>pg</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_DocPartBehavior">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Insertion Behavior Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_DocPartBehaviors">
+ <oneOrMore>
+ <element name="behavior">
+ <ref name="CT_DocPartBehavior"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="ST_DocPartType">
+ <list>
+ <xs:documentation>Entry Types</xs:documentation>
+ <choice>
+ <!-- No Type -->
+ <value>none</value>
+ <!-- Normal -->
+ <value>normal</value>
+ <!-- Automatically Replace Name With Content -->
+ <value>autoExp</value>
+ <!-- AutoText User Interface Entry -->
+ <value>toolbar</value>
+ <!-- AutoCorrect Entry -->
+ <value>speller</value>
+ <!-- Form Field Help Text -->
+ <value>formFld</value>
+ <!-- Structured Document Tag Placeholder Text -->
+ <value>bbPlcHdr</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_DocPartType">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Type Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_DocPartTypes">
+ <oneOrMore>
+ <element name="type">
+ <ref name="CT_DocPartType"/>
+ </element>
+ </oneOrMore>
+ <optional>
+ <attribute name="all">
+ <text/>
+ <xs:documentation>Entry Is Of All Types</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="ST_DocPartGallery">
+ <list>
+ <xs:documentation>Entry Gallery Types</xs:documentation>
+ <choice>
+ <!-- Structured Document Tag Placeholder Text Gallery -->
+ <value>placeholder</value>
+ <!-- All Galleries -->
+ <value>any</value>
+ <!-- No Gallery Classification -->
+ <value>default</value>
+ <!-- Document Parts Gallery -->
+ <value>docParts</value>
+ <!-- Cover Page Gallery -->
+ <value>coverPg</value>
+ <!-- Equations Gallery -->
+ <value>eq</value>
+ <!-- Footers Gallery -->
+ <value>ftrs</value>
+ <!-- Headers Gallery -->
+ <value>hdrs</value>
+ <!-- Page Numbers Gallery -->
+ <value>pgNum</value>
+ <!-- Table Gallery -->
+ <value>tbls</value>
+ <!-- Watermark Gallery -->
+ <value>watermarks</value>
+ <!-- AutoText Gallery -->
+ <value>autoTxt</value>
+ <!-- Text Box Gallery -->
+ <value>txtBox</value>
+ <!-- Page Numbers At Top Gallery -->
+ <value>pgNumT</value>
+ <!-- Page Numbers At Bottom Gallery -->
+ <value>pgNumB</value>
+ <!-- Page Numbers At Margins Gallery -->
+ <value>pgNumMargins</value>
+ <!-- Table of Contents Gallery -->
+ <value>tblOfContents</value>
+ <!-- Bibliography Gallery -->
+ <value>bib</value>
+ <!-- Custom Quick Parts Gallery -->
+ <value>custQuickParts</value>
+ <!-- Custom Cover Page Gallery -->
+ <value>custCoverPg</value>
+ <!-- Custom Equation Gallery -->
+ <value>custEq</value>
+ <!-- Custom Footer Gallery -->
+ <value>custFtrs</value>
+ <!-- Custom Header Gallery -->
+ <value>custHdrs</value>
+ <!-- Custom Page Number Gallery -->
+ <value>custPgNum</value>
+ <!-- Custom Table Gallery -->
+ <value>custTbls</value>
+ <!-- Custom Watermark Gallery -->
+ <value>custWatermarks</value>
+ <!-- Custom AutoText Gallery -->
+ <value>custAutoTxt</value>
+ <!-- Custom Text Box Gallery -->
+ <value>custTxtBox</value>
+ <!-- Custom Page Number At Top Gallery -->
+ <value>custPgNumT</value>
+ <!-- Custom Page Number At Bottom Gallery -->
+ <value>custPgNumB</value>
+ <!-- Custom Page Number At Margins Gallery -->
+ <value>custPgNumMargins</value>
+ <!-- Custom Table of Contents Gallery -->
+ <value>custTblOfContents</value>
+ <!-- Custom Bibliography Gallery -->
+ <value>custBib</value>
+ <!-- Custom 1 Gallery -->
+ <value>custom1</value>
+ <!-- Custom 2 Gallery -->
+ <value>custom2</value>
+ <!-- Custom 3 Gallery -->
+ <value>custom3</value>
+ <!-- Custom 4 Gallery -->
+ <value>custom4</value>
+ <!-- Custom 5 Gallery -->
+ <value>custom5</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_DocPartGallery">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Gallery Value</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_DocPartCategory">
+ <element name="name">
+ <ref name="CT_String"/>
+ </element>
+ <element name="gallery">
+ <ref name="CT_DocPartGallery"/>
+ </element>
+ </define>
+ <define name="CT_DocPartName">
+ <attribute name="val">
+ <text/>
+ <xs:documentation>Name Value</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="decorated">
+ <text/>
+ <xs:documentation>Built-In Entry</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_DocPartPr">
+ <oneOrMore>
+ <choice>
+ <element name="name">
+ <ref name="CT_DocPartName"/>
+ </element>
+ <element name="style">
+ <ref name="CT_String"/>
+ </element>
+ <element name="category">
+ <ref name="CT_DocPartCategory"/>
+ </element>
+ <element name="types">
+ <ref name="CT_DocPartTypes"/>
+ </element>
+ <element name="behaviors">
+ <ref name="CT_DocPartBehaviors"/>
+ </element>
+ <element name="description">
+ <ref name="CT_String"/>
+ </element>
+ <element name="guid">
+ <ref name="CT_Guid"/>
+ </element>
+ </choice>
+ </oneOrMore>
+ </define>
+ <define name="CT_DocPart">
+ <optional>
+ <element name="docPartPr">
+ <ref name="CT_DocPartPr"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="docPartBody">
+ <ref name="CT_Body"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_DocParts">
+ <oneOrMore>
+ <element name="docPart">
+ <ref name="CT_DocPart"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="settings">
+ <element name="settings">
+ <ref name="CT_Settings"/>
+ </element>
+ </define>
+ <define name="webSettings">
+ <element name="webSettings">
+ <ref name="CT_WebSettings"/>
+ </element>
+ </define>
+ <define name="fonts">
+ <element name="fonts">
+ <ref name="CT_FontsList"/>
+ </element>
+ </define>
+ <define name="numbering">
+ <element name="numbering">
+ <ref name="CT_Numbering"/>
+ </element>
+ </define>
+ <define name="styles">
+ <element name="styles">
+ <ref name="CT_Styles"/>
+ </element>
+ </define>
+ <define name="ST_CaptionPos">
+ <list>
+ <xs:documentation>Automatic Caption Positioning Values</xs:documentation>
+ <choice>
+ <!-- Position Caption Above Object -->
+ <value>above</value>
+ <!-- Position Caption Below Object -->
+ <value>below</value>
+ <!-- Position Caption Left Of Object -->
+ <value>left</value>
+ <!-- Position Caption Right Of Object -->
+ <value>right</value>
+ </choice>
+ </list>
+ </define>
+ <define name="CT_Caption">
+ <attribute name="name">
+ <ref name="ST_String"/>
+ <xs:documentation>Caption Type Name</xs:documentation>
+ </attribute>
+ <optional>
+ <attribute name="pos">
+ <ref name="ST_CaptionPos"/>
+ <xs:documentation>Automatic Caption Placement</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="chapNum">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Include Chapter Number in Field for Caption</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="heading">
+ <ref name="ST_DecimalNumber"/>
+ <xs:documentation>Style for Chapter Headings</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="noLabel">
+ <ref name="ST_OnOff"/>
+ <xs:documentation>Do Not Include Name In Caption</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="numFmt">
+ <ref name="ST_NumberFormat"/>
+ <xs:documentation>Caption Numbering Format</xs:documentation>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sep">
+ <ref name="ST_ChapterSep"/>
+ <xs:documentation>Chapter Number/Item Index Separator</xs:documentation>
+ </attribute>
+ </optional>
+ </define>
+ <define name="CT_AutoCaption">
+ <attribute name="name">
+ <ref name="ST_String"/>
+ <xs:documentation>Identifier of Object to be Automatically Captioned</xs:documentation>
+ </attribute>
+ <attribute name="caption">
+ <ref name="ST_String"/>
+ <xs:documentation>Caption Used for Automatic Captioning</xs:documentation>
+ </attribute>
+ </define>
+ <define name="CT_AutoCaptions">
+ <oneOrMore>
+ <element name="autoCaption">
+ <ref name="CT_AutoCaption"/>
+ </element>
+ </oneOrMore>
+ </define>
+ <define name="CT_Captions">
+ <oneOrMore>
+ <element name="caption">
+ <ref name="CT_Caption"/>
+ </element>
+ </oneOrMore>
+ <optional>
+ <element name="autoCaptions">
+ <ref name="CT_AutoCaptions"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_DocumentBase">
+ <optional>
+ <element name="background">
+ <ref name="CT_Background"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_Document">
+ <ref name="CT_DocumentBase"/>
+ <optional>
+ <element name="body">
+ <ref name="CT_Body"/>
+ </element>
+ </optional>
+ </define>
+ <define name="CT_GlossaryDocument">
+ <ref name="CT_DocumentBase"/>
+ <optional>
+ <element name="docParts">
+ <ref name="CT_DocParts"/>
+ </element>
+ </optional>
+ </define>
+ <define name="document">
+ <element name="document">
+ <ref name="CT_Document"/>
+ </element>
+ </define>
+ <define name="glossaryDocument">
+ <element name="glossaryDocument">
+ <ref name="CT_GlossaryDocument"/>
+ </element>
+ </define>
+ <define name="BUILT_IN_ANY_TYPE">
+ <zeroOrMore>
+ <choice>
+ <element>
+ <anyName/>
+ <ref name="BUILT_IN_ANY_TYPE"/>
+ </element>
+ <attribute>
+ <anyName/>
+ </attribute>
+ <text/>
+ </choice>
+ </zeroOrMore>
+ </define>
+ </grammar>
+ <resource name="CT_Empty" resource="Stream" tag="content">
+ <action name="end" tokenid="ooxml:EG_RunInnerContent_noBreakHyphen" action="noBreakHyphen"/>
+ <action name="end" tokenid="ooxml:EG_RunInnerContent_softHyphen" action="softHyphen"/>
+ <action name="end" tokenid="ooxml:EG_RunInnerContent_cr" action="cr"/>
+ </resource>
+ <resource name="ST_OnOff" resource="Boolean"/>
+ <resource name="CT_OnOff" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_OnOff_val" action="setValue"/>
+ <action name="start" action="setDefaultBooleanValue"/>
+ </resource>
+ <resource name="ST_LongHexNumber" resource="Hex"/>
+ <resource name="CT_LongHexNumber" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_LongHexNumber_val" action="setValue"/>
+ <action name="start" action="setDefaultHexValue"/>
+ </resource>
+ <resource name="ST_ShortHexNumber" resource="Hex"/>
+ <resource name="CT_ShortHexNumber" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_ShortHexNumber_val" action="setValue"/>
+ <action name="start" action="setDefaultHexValue"/>
+ </resource>
+ <resource name="ST_UcharHexNumber" resource="Hex"/>
+ <resource name="CT_UcharHexNumber" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_UcharHexNumber_val" action="setValue"/>
+ <action name="start" action="setDefaultHexValue"/>
+ </resource>
+ <resource name="ST_DecimalNumber" resource="Integer"/>
+ <resource name="CT_DecimalNumber" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_DecimalNumber_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="ST_UnsignedDecimalNumber" resource="Integer" generated="yes"/>
+ <resource name="ST_TwipsMeasure" resource="Integer"/>
+ <resource name="CT_TwipsMeasure" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_TwipsMeasure_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="ST_SignedTwipsMeasure" resource="Integer"/>
+ <resource name="CT_SignedTwipsMeasure" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_SignedTwipsMeasure_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="ST_PixelsMeasure" resource="Integer" generated="yes"/>
+ <resource name="CT_PixelsMeasure" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_PixelsMeasure_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="ST_HpsMeasure" resource="Integer"/>
+ <resource name="CT_HpsMeasure" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_HpsMeasure_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="ST_SignedHpsMeasure" resource="Integer"/>
+ <resource name="CT_SignedHpsMeasure" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_SignedHpsMeasure_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="ST_DateTime" resource="String" generated="yes"/>
+ <resource name="ST_MacroName" resource="String" generated="yes"/>
+ <resource name="CT_MacroName" resource="Value" generated="yes" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_MacroName_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_EighthPointMeasure" resource="Integer"/>
+ <resource name="ST_PointMeasure" resource="Integer"/>
+ <resource name="ST_String" resource="String"/>
+ <resource name="CT_String" resource="Value" tag="attribute" >
+ <attribute name="val" tokenid="ooxml:CT_String_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_TextScale" resource="Integer"/>
+ <resource name="CT_TextScale" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_TextScale_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="ST_HighlightColor" resource="List">
+ <value tokenid="1">black</value>
+ <value tokenid="2">blue</value>
+ <value tokenid="3">cyan</value>
+ <value tokenid="4">green</value>
+ <value tokenid="5">magenta</value>
+ <value tokenid="6">red</value>
+ <value tokenid="7">yellow</value>
+ <value tokenid="8">white</value>
+ <value tokenid="9">darkBlue</value>
+ <value tokenid="10">darkCyan</value>
+ <value tokenid="11">darkGreen</value>
+ <value tokenid="12">darkMagenta</value>
+ <value tokenid="13">darkRed</value>
+ <value tokenid="14">darkYellow</value>
+ <value tokenid="15">darkGray</value>
+ <value tokenid="16">lightGray</value>
+ <value tokenid="0">none</value>
+ </resource>
+ <resource name="CT_Highlight" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_Highlight_val" action="setValue"/>
+ </resource>
+ <resource name="ST_HexColorAuto" resource="List">
+ <value tokenid="ooxml:Value_ST_HexColorAuto_auto">auto</value>
+ </resource>
+ <resource name="ST_HexColorRGB" resource="Hex"/>
+ <resource name="ST_HexColor" resource="Hex"/>
+ <resource name="CT_Color" resource="Properties" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_Color_val"/>
+ <attribute name="themeColor" tokenid="ooxml:CT_Color_themeColor"/>
+ <attribute name="themeTint" tokenid="ooxml:CT_Color_themeTint"/>
+ <attribute name="themeShade" tokenid="ooxml:CT_Color_themeShade"/>
+ </resource>
+ <resource name="ST_LangCode" resource="Hex" generated="yes"/>
+ <resource name="ST_Lang" resource="String"/>
+ <resource name="CT_Lang" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_Lang_val" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="ST_Guid" resource="String"/>
+ <resource name="CT_Guid" resource="Value" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_Guid_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_Underline" resource="List">
+ <value tokenid="1">single</value>
+ <value tokenid="2">words</value>
+ <value tokenid="3">double</value>
+ <value tokenid="6">thick</value>
+ <value tokenid="4">dotted</value>
+ <value tokenid="20">dottedHeavy</value>
+ <value tokenid="7">dash</value>
+ <value tokenid="23">dashedHeavy</value>
+ <value tokenid="39">dashLong</value>
+ <value tokenid="55">dashLongHeavy</value>
+ <value tokenid="9">dotDash</value>
+ <value tokenid="25">dashDotHeavy</value>
+ <value tokenid="10">dotDotDash</value>
+ <value tokenid="26">dashDotDotHeavy</value>
+ <value tokenid="11">wave</value>
+ <value tokenid="27">wavyHeavy</value>
+ <value tokenid="43">wavyDouble</value>
+ <value tokenid="0">none</value>
+ </resource>
+ <resource name="CT_Underline" resource="Properties" tag="character">
+ <attribute name="val" tokenid="ooxml:CT_Underline_val" default="single"/>
+ <attribute name="color" tokenid="ooxml:CT_Underline_color"/>
+ <attribute name="themeColor" tokenid="ooxml:CT_Underline_themeColor"/>
+ <attribute name="themeTint" tokenid="ooxml:CT_Underline_themeTint"/>
+ <attribute name="themeShade" tokenid="ooxml:CT_Underline_themeShade"/>
+ </resource>
+ <resource name="ST_TextEffect" resource="List">
+ <value tokenid="0">none</value>
+ <value tokenid="1">lights</value>
+ <value tokenid="2">blinkBackground</value>
+ <value tokenid="3">sparkle</value>
+ <value tokenid="4">antsBlack</value>
+ <value tokenid="5">antsRed</value>
+ <value tokenid="6">shimmer</value>
+ </resource>
+ <resource name="CT_TextEffect" resource="Value" tag="character">
+ <attribute name="val" tokenid="ooxml:CT_TextEffect_val" action="setValue"/>
+ </resource>
+ <resource name="ST_Border" resource="List">
+ <value tokenid="255">nil</value>
+ <value tokenid="0">none</value>
+ <value tokenid="1">single</value>
+ <value tokenid="2">thick</value>
+ <value tokenid="3">double</value>
+ <value tokenid="6">dotted</value>
+ <value tokenid="7">dashed</value>
+ <value tokenid="8">dotDash</value>
+ <value tokenid="9">dotDotDash</value>
+ <value tokenid="10">triple</value>
+ <value tokenid="11">thinThickSmallGap</value>
+ <value tokenid="12">thickThinSmallGap</value>
+ <value tokenid="13">thinThickThinSmallGap</value>
+ <value tokenid="14">thinThickMediumGap</value>
+ <value tokenid="15">thickThinMediumGap</value>
+ <value tokenid="16">thinThickThinMediumGap</value>
+ <value tokenid="17">thinThickLargeGap</value>
+ <value tokenid="18">thickThinLargeGap</value>
+ <value tokenid="19">thinThickThinLargeGap</value>
+ <value tokenid="20">wave</value>
+ <value tokenid="21">doubleWave</value>
+ <value tokenid="22">dashSmallGap</value>
+ <value tokenid="23">dashDotStroked</value>
+ <value tokenid="24">threeDEmboss</value>
+ <value tokenid="25">threeDEngrave</value>
+ <value tokenid="18">outset</value>
+ <value tokenid="17">inset</value>
+ <value tokenid="64">apples</value>
+ <value tokenid="65">archedScallops</value>
+ <value tokenid="66">babyPacifier</value>
+ <value tokenid="67">babyRattle</value>
+ <value tokenid="68">balloons3Colors</value>
+ <value tokenid="69">balloonsHotAir</value>
+ <value tokenid="70">basicBlackDashes</value>
+ <value tokenid="71">basicBlackDots</value>
+ <value tokenid="72">basicBlackSquares</value>
+ <value tokenid="73">basicThinLines</value>
+ <value tokenid="74">basicWhiteDashes</value>
+ <value tokenid="75">basicWhiteDots</value>
+ <value tokenid="76">basicWhiteSquares</value>
+ <value tokenid="77">basicWideInline</value>
+ <value tokenid="78">basicWideMidline</value>
+ <value tokenid="79">basicWideOutline</value>
+ <value tokenid="80">bats</value>
+ <value tokenid="81">birds</value>
+ <value tokenid="82">birdsFlight</value>
+ <value tokenid="83">cabins</value>
+ <value tokenid="84">cakeSlice</value>
+ <value tokenid="85">candyCorn</value>
+ <value tokenid="86">celticKnotwork</value>
+ <value tokenid="87">certificateBanner</value>
+ <value tokenid="88">chainLink</value>
+ <value tokenid="89">champagneBottle</value>
+ <value tokenid="90">checkedBarBlack</value>
+ <value tokenid="91">checkedBarColor</value>
+ <value tokenid="92">checkered</value>
+ <value tokenid="93">christmasTree</value>
+ <value tokenid="94">circlesLines</value>
+ <value tokenid="95">circlesRectangles</value>
+ <value tokenid="96">classicalWave</value>
+ <value tokenid="97">clocks</value>
+ <value tokenid="98">compass</value>
+ <value tokenid="99">confetti</value>
+ <value tokenid="100">confettiGrays</value>
+ <value tokenid="101">confettiOutline</value>
+ <value tokenid="102">confettiStreamers</value>
+ <value tokenid="103">confettiWhite</value>
+ <value tokenid="104">cornerTriangles</value>
+ <value tokenid="105">couponCutoutDashes</value>
+ <value tokenid="106">couponCutoutDots</value>
+ <value tokenid="107">crazyMaze</value>
+ <value tokenid="108">creaturesButterfly</value>
+ <value tokenid="109">creaturesFish</value>
+ <value tokenid="110">creaturesInsects</value>
+ <value tokenid="111">creaturesLadyBug</value>
+ <value tokenid="112">crossStitch</value>
+ <value tokenid="113">cup</value>
+ <value tokenid="114">decoArch</value>
+ <value tokenid="115">decoArchColor</value>
+ <value tokenid="116">decoBlocks</value>
+ <value tokenid="117">diamondsGray</value>
+ <value tokenid="118">doubleD</value>
+ <value tokenid="119">doubleDiamonds</value>
+ <value tokenid="120">earth1</value>
+ <value tokenid="121">earth2</value>
+ <value tokenid="122">eclipsingSquares1</value>
+ <value tokenid="123">eclipsingSquares2</value>
+ <value tokenid="124">eggsBlack</value>
+ <value tokenid="125">fans</value>
+ <value tokenid="126">film</value>
+ <value tokenid="127">firecrackers</value>
+ <value tokenid="128">flowersBlockPrint</value>
+ <value tokenid="129">flowersDaisies</value>
+ <value tokenid="130">flowersModern1</value>
+ <value tokenid="131">flowersModern2</value>
+ <value tokenid="132">flowersPansy</value>
+ <value tokenid="133">flowersRedRose</value>
+ <value tokenid="134">flowersRoses</value>
+ <value tokenid="135">flowersTeacup</value>
+ <value tokenid="136">flowersTiny</value>
+ <value tokenid="137">gems</value>
+ <value tokenid="138">gingerbreadMan</value>
+ <value tokenid="139">gradient</value>
+ <value tokenid="140">handmade1</value>
+ <value tokenid="141">handmade2</value>
+ <value tokenid="142">heartBalloon</value>
+ <value tokenid="143">heartGray</value>
+ <value tokenid="144">hearts</value>
+ <value tokenid="145">heebieJeebies</value>
+ <value tokenid="146">holly</value>
+ <value tokenid="147">houseFunky</value>
+ <value tokenid="148">hypnotic</value>
+ <value tokenid="149">iceCreamCones</value>
+ <value tokenid="150">lightBulb</value>
+ <value tokenid="151">lightning1</value>
+ <value tokenid="152">lightning2</value>
+ <value tokenid="153">mapPins</value>
+ <value tokenid="154">mapleLeaf</value>
+ <value tokenid="155">mapleMuffins</value>
+ <value tokenid="156">marquee</value>
+ <value tokenid="157">marqueeToothed</value>
+ <value tokenid="158">moons</value>
+ <value tokenid="159">mosaic</value>
+ <value tokenid="160">musicNotes</value>
+ <value tokenid="161">northwest</value>
+ <value tokenid="162">ovals</value>
+ <value tokenid="163">packages</value>
+ <value tokenid="164">palmsBlack</value>
+ <value tokenid="165">palmsColor</value>
+ <value tokenid="166">paperClips</value>
+ <value tokenid="167">papyrus</value>
+ <value tokenid="168">partyFavor</value>
+ <value tokenid="169">partyGlass</value>
+ <value tokenid="170">pencils</value>
+ <value tokenid="171">people</value>
+ <value tokenid="172">peopleWaving</value>
+ <value tokenid="173">peopleHats</value>
+ <value tokenid="174">poinsettias</value>
+ <value tokenid="175">postageStamp</value>
+ <value tokenid="176">pumpkin1</value>
+ <value tokenid="177">pushPinNote2</value>
+ <value tokenid="178">pushPinNote1</value>
+ <value tokenid="179">pyramids</value>
+ <value tokenid="180">pyramidsAbove</value>
+ <value tokenid="181">quadrants</value>
+ <value tokenid="182">rings</value>
+ <value tokenid="183">safari</value>
+ <value tokenid="184">sawtooth</value>
+ <value tokenid="185">sawtoothGray</value>
+ <value tokenid="186">scaredCat</value>
+ <value tokenid="187">seattle</value>
+ <value tokenid="188">shadowedSquares</value>
+ <value tokenid="189">sharksTeeth</value>
+ <value tokenid="190">shorebirdTracks</value>
+ <value tokenid="191">skyrocket</value>
+ <value tokenid="192">snowflakeFancy</value>
+ <value tokenid="193">snowflakes</value>
+ <value tokenid="194">sombrero</value>
+ <value tokenid="195">southwest</value>
+ <value tokenid="196">stars</value>
+ <value tokenid="197">starsTop</value>
+ <value tokenid="198">stars3d</value>
+ <value tokenid="199">starsBlack</value>
+ <value tokenid="200">starsShadowed</value>
+ <value tokenid="201">sun</value>
+ <value tokenid="202">swirligig</value>
+ <value tokenid="203">tornPaper</value>
+ <value tokenid="204">tornPaperBlack</value>
+ <value tokenid="205">trees</value>
+ <value tokenid="206">triangleParty</value>
+ <value tokenid="207">triangles</value>
+ <value tokenid="208">tribal1</value>
+ <value tokenid="209">tribal2</value>
+ <value tokenid="210">tribal3</value>
+ <value tokenid="211">tribal4</value>
+ <value tokenid="212">tribal5</value>
+ <value tokenid="213">tribal6</value>
+ <value tokenid="214">twistedLines1</value>
+ <value tokenid="215">twistedLines2</value>
+ <value tokenid="216">vine</value>
+ <value tokenid="217">waveline</value>
+ <value tokenid="218">weavingAngles</value>
+ <value tokenid="219">weavingBraid</value>
+ <value tokenid="220">weavingRibbon</value>
+ <value tokenid="221">weavingStrips</value>
+ <value tokenid="222">whiteFlowers</value>
+ <value tokenid="223">woodwork</value>
+ <value tokenid="224">xIllusions</value>
+ <value tokenid="225">zanyTriangles</value>
+ <value tokenid="226">zigZag</value>
+ <value tokenid="227">zigZagStitch</value>
+ </resource>
+ <resource name="CT_Border" resource="Properties" tag="attribute">
+ <attribute name="val" tokenid="rtf:BRCTYPE"/>
+ <attribute name="color" tokenid="ooxml:CT_Border_color"/>
+ <attribute name="themeColor" tokenid="ooxml:CT_Border_themeColor"/>
+ <attribute name="themeTint" tokenid="ooxml:CT_Border_themeTint"/>
+ <attribute name="themeShade" tokenid="ooxml:CT_Border_themeShade"/>
+ <attribute name="sz" tokenid="rtf:DPTLINEWIDTH"/>
+ <attribute name="space" tokenid="rtf:DPTSPACE"/>
+ <attribute name="shadow" tokenid="rtf:FSHADOW"/>
+ <attribute name="frame" tokenid="rtf:FFRAME"/>
+ </resource>
+ <resource name="ST_Shd" resource="List">
+ <value tokenid="0">nil</value>
+ <value tokenid="0">clear</value>
+ <value tokenid="1">solid</value>
+ <value tokenid="14">horzStripe</value>
+ <value tokenid="15">vertStripe</value>
+ <value tokenid="17">reverseDiagStripe</value>
+ <value tokenid="16">diagStripe</value>
+ <value tokenid="18">horzCross</value>
+ <value tokenid="19">diagCross</value>
+ <value tokenid="20">thinHorzStripe</value>
+ <value tokenid="21">thinVertStripe</value>
+ <value tokenid="23">thinReverseDiagStripe</value>
+ <value tokenid="22">thinDiagStripe</value>
+ <value tokenid="24">thinHorzCross</value>
+ <value tokenid="25">thinDiagCross</value>
+ <value tokenid="2">pct5</value>
+ <value tokenid="3">pct10</value>
+ <value tokenid="27">pct12</value>
+ <value tokenid="28">pct15</value>
+ <value tokenid="4">pct20</value>
+ <value tokenid="5">pct25</value>
+ <value tokenid="6">pct30</value>
+ <value tokenid="43">pct35</value>
+ <value tokenid="44">pct37</value>
+ <value tokenid="7">pct40</value>
+ <value tokenid="46">pct45</value>
+ <value tokenid="8">pct50</value>
+ <value tokenid="49">pct55</value>
+ <value tokenid="9">pct60</value>
+ <value tokenid="51">pct62</value>
+ <value tokenid="52">pct65</value>
+ <value tokenid="10">pct70</value>
+ <value tokenid="11">pct75</value>
+ <value tokenid="12">pct80</value>
+ <value tokenid="57">pct85</value>
+ <value tokenid="58">pct87</value>
+ <value tokenid="13">pct90</value>
+ <value tokenid="60">pct95</value>
+ </resource>
+ <resource name="CT_Shd" resource="Properties" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_Shd_val"/>
+ <attribute name="color" tokenid="ooxml:CT_Shd_color"/>
+ <attribute name="themeColor" tokenid="ooxml:CT_Shd_themeColor"/>
+ <attribute name="themeTint" tokenid="ooxml:CT_Shd_themeTint"/>
+ <attribute name="themeShade" tokenid="ooxml:CT_Shd_themeShade"/>
+ <attribute name="fill" tokenid="ooxml:CT_Shd_fill"/>
+ <attribute name="themeFill" tokenid="ooxml:CT_Shd_themeFill"/>
+ <attribute name="themeFillTint" tokenid="ooxml:CT_Shd_themeFillTint"/>
+ <attribute name="themeFillShade" tokenid="ooxml:CT_Shd_themeFillShade"/>
+ </resource>
+ <resource name="ST_VerticalAlignRun" resource="List" generated="yes" tag="character">
+ <value name="baseline" tokenid="ooxml:Value_wordprocessingml_ST_VerticalAlignRun_baseline">baseline</value>
+ <value name="superscript" tokenid="ooxml:Value_wordprocessingml_ST_VerticalAlignRun_superscript">superscript</value>
+ <value name="subscript" tokenid="ooxml:Value_wordprocessingml_ST_VerticalAlignRun_subscript">subscript</value>
+ </resource>
+ <resource name="CT_VerticalAlignRun" resource="Value" generated="yes" tag="character">
+ <attribute name="val" tokenid="ooxml:CT_VerticalAlignRun_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="CT_FitText" resource="Properties" tag="paragraph">
+ <attribute name="val" tokenid="ooxml:CT_FitText_val"/>
+ <attribute name="id" tokenid="ooxml:CT_FitText_id"/>
+ </resource>
+ <resource name="ST_Em" resource="List">
+ <value tokenid="0">none</value>
+ <value tokenid="1">dot</value>
+ <value tokenid="2">comma</value>
+ <value tokenid="3">circle</value>
+ <value tokenid="4">underDot</value>
+ </resource>
+ <resource name="CT_Em" resource="Value" tag="character">
+ <attribute name="val" tokenid="ooxml:CT_Em_val" action="setValue"/>
+ </resource>
+ <resource name="CT_Language" resource="Properties" tag="character">
+ <attribute name="val" tokenid="ooxml:CT_Language_val"/>
+ <attribute name="eastAsia" tokenid="ooxml:CT_Language_eastAsia"/>
+ <attribute name="bidi" tokenid="ooxml:CT_Language_bidi"/>
+ </resource>
+ <resource name="ST_CombineBrackets" resource="List">
+ <value tokenid="0">none</value>
+ <value tokenid="1">round</value>
+ <value tokenid="2">square</value>
+ <value tokenid="3">angle</value>
+ <value tokenid="4">curly</value>
+ </resource>
+ <resource name="CT_EastAsianLayout" resource="Properties" tag="character">
+ <attribute name="id" tokenid="ooxml:CT_EastAsianLayout_id"/>
+ <attribute name="combine" tokenid="ooxml:CT_EastAsianLayout_combine"/>
+ <attribute name="combineBrackets" tokenid="ooxml:CT_EastAsianLayout_combineBrackets"/>
+ <attribute name="vert" tokenid="ooxml:CT_EastAsianLayout_vert"/>
+ <attribute name="vertCompress" tokenid="ooxml:CT_EastAsianLayout_vertCompress"/>
+ </resource>
+ <resource name="ST_XAlign" resource="List" generated="yes">
+ <value name="left" tokenid="ooxml:Value_wordprocessingml_ST_XAlign_left">left</value>
+ <value name="center" tokenid="ooxml:Value_wordprocessingml_ST_XAlign_center">center</value>
+ <value name="right" tokenid="ooxml:Value_wordprocessingml_ST_XAlign_right">right</value>
+ <value name="inside" tokenid="ooxml:Value_wordprocessingml_ST_XAlign_inside">inside</value>
+ <value name="outside" tokenid="ooxml:Value_wordprocessingml_ST_XAlign_outside">outside</value>
+ </resource>
+ <resource name="ST_YAlign" resource="List" generated="yes">
+ <value name="inline" tokenid="ooxml:Value_wordprocessingml_ST_YAlign_inline">inline</value>
+ <value name="top" tokenid="ooxml:Value_wordprocessingml_ST_YAlign_top">top</value>
+ <value name="center" tokenid="ooxml:Value_wordprocessingml_ST_YAlign_center">center</value>
+ <value name="bottom" tokenid="ooxml:Value_wordprocessingml_ST_YAlign_bottom">bottom</value>
+ <value name="inside" tokenid="ooxml:Value_wordprocessingml_ST_YAlign_inside">inside</value>
+ <value name="outside" tokenid="ooxml:Value_wordprocessingml_ST_YAlign_outside">outside</value>
+ </resource>
+ <resource name="ST_HeightRule" resource="List" generated="yes">
+ <value name="auto" tokenid="ooxml:Value_wordprocessingml_ST_HeightRule_auto">auto</value>
+ <value name="exact" tokenid="ooxml:Value_wordprocessingml_ST_HeightRule_exact">exact</value>
+ <value name="atLeast" tokenid="ooxml:Value_wordprocessingml_ST_HeightRule_atLeast">atLeast</value>
+ </resource>
+ <resource name="ST_Wrap" resource="List" generated="yes">
+ <value name="auto" tokenid="ooxml:Value_wordprocessingml_ST_Wrap_auto">auto</value>
+ <value name="notBeside" tokenid="ooxml:Value_wordprocessingml_ST_Wrap_notBeside">notBeside</value>
+ <value name="around" tokenid="ooxml:Value_wordprocessingml_ST_Wrap_around">around</value>
+ <value name="tight" tokenid="ooxml:Value_wordprocessingml_ST_Wrap_tight">tight</value>
+ <value name="through" tokenid="ooxml:Value_wordprocessingml_ST_Wrap_through">through</value>
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_Wrap_none">none</value>
+ </resource>
+ <resource name="ST_VAnchor" resource="List" generated="yes">
+ <value name="text" tokenid="ooxml:Value_wordprocessingml_ST_VAnchor_text">text</value>
+ <value name="margin" tokenid="ooxml:Value_wordprocessingml_ST_VAnchor_margin">margin</value>
+ <value name="page" tokenid="ooxml:Value_wordprocessingml_ST_VAnchor_page">page</value>
+ </resource>
+ <resource name="ST_HAnchor" resource="List" generated="yes">
+ <value name="text" tokenid="ooxml:Value_wordprocessingml_ST_HAnchor_text">text</value>
+ <value name="margin" tokenid="ooxml:Value_wordprocessingml_ST_HAnchor_margin">margin</value>
+ <value name="page" tokenid="ooxml:Value_wordprocessingml_ST_HAnchor_page">page</value>
+ </resource>
+ <resource name="ST_DropCap" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_DropCap_none">none</value>
+ <value name="drop" tokenid="ooxml:Value_wordprocessingml_ST_DropCap_drop">drop</value>
+ <value name="margin" tokenid="ooxml:Value_wordprocessingml_ST_DropCap_margin">margin</value>
+ </resource>
+ <resource name="CT_FramePr" resource="Properties" tag="frame">
+ <kind name="paragraph"/>
+ <attribute name="dropCap" tokenid="ooxml:CT_FramePr_dropCap"/>
+ <attribute name="lines" tokenid="ooxml:CT_FramePr_lines"/>
+ <attribute name="w" tokenid="sprm:PDxaWidth"/>
+ <attribute name="h" tokenid="sprm:PWHeightAbs"/>
+ <attribute name="vSpace" tokenid="sprm:PDyaFromText"/>
+ <attribute name="hSpace" tokenid="sprm:PDxaFromText"/>
+ <attribute name="wrap" tokenid="sprm:PWr"/>
+ <attribute name="hAnchor" tokenid="ooxml:CT_FramePr_hAnchor"/>
+ <attribute name="vAnchor" tokenid="ooxml:CT_FramePr_vAnchor"/>
+ <attribute name="x" tokenid="ooxml:CT_FramePr_x"/>
+ <attribute name="xAlign" tokenid="ooxml:CT_FramePr_xAlign"/>
+ <attribute name="y" tokenid="ooxml:CT_FramePr_y"/>
+ <attribute name="yAlign" tokenid="ooxml:CT_FramePr_yAlign"/>
+ <attribute name="hRule" tokenid="ooxml:CT_FramePr_hRule"/>
+ <attribute name="anchorLock" tokenid="sprm:PFLocked"/>
+ </resource>
+ <resource name="ST_TabJc" resource="List">
+ <value tokenid="ooxml:Value_ST_TabJc_clear">clear</value>
+ <value tokenid="0">left</value>
+ <value tokenid="1">center</value>
+ <value tokenid="2">right</value>
+ <value tokenid="3">decimal</value>
+ <value tokenid="4">bar</value>
+ <value tokenid="ooxml:Value_ST_TabJc_num">num</value>
+ </resource>
+ <resource name="ST_TabTlc" resource="List">
+ <value tokenid="0">none</value>
+ <value tokenid="1">dot</value>
+ <value tokenid="2">hyphen</value>
+ <value tokenid="3">underscore</value>
+ <value tokenid="4">heavy</value>
+ <value tokenid="ooxml:Value_ST_TabTlc_middleDot">middleDot</value>
+ </resource>
+ <resource name="CT_TabStop" resource="Properties" tag="paragraph">
+ <attribute name="val" tokenid="ooxml:CT_TabStop_val"/>
+ <attribute name="leader" tokenid="ooxml:CT_TabStop_leader"/>
+ <attribute name="pos" tokenid="ooxml:CT_TabStop_pos"/>
+ </resource>
+ <resource name="ST_LineSpacingRule" resource="List" generated="yes">
+ <value name="auto" tokenid="ooxml:Value_wordprocessingml_ST_LineSpacingRule_auto">auto</value>
+ <value name="exact" tokenid="ooxml:Value_wordprocessingml_ST_LineSpacingRule_exact">exact</value>
+ <value name="atLeast" tokenid="ooxml:Value_wordprocessingml_ST_LineSpacingRule_atLeast">atLeast</value>
+ </resource>
+ <resource name="CT_Spacing" resource="Properties" tag="paragraüh">
+ <attribute name="before" tokenid="ooxml:CT_Spacing_before"/>
+ <attribute name="beforeLines" tokenid="ooxml:CT_Spacing_beforeLines"/>
+ <attribute name="beforeAutospacing" tokenid="ooxml:CT_Spacing_beforeAutospacing"/>
+ <attribute name="after" tokenid="ooxml:CT_Spacing_after"/>
+ <attribute name="afterLines" tokenid="ooxml:CT_Spacing_afterLines"/>
+ <attribute name="afterAutospacing" tokenid="ooxml:CT_Spacing_afterAutospacing"/>
+ <attribute name="line" tokenid="ooxml:CT_Spacing_line"/>
+ <attribute name="lineRule" tokenid="ooxml:CT_Spacing_lineRule"/>
+ </resource>
+ <resource name="CT_Ind" resource="Properties" tag="paragraph">
+ <attribute name="left" tokenid="ooxml:CT_Ind_left"/>
+ <attribute name="leftChars" tokenid="ooxml:CT_Ind_leftChars"/>
+ <attribute name="right" tokenid="ooxml:CT_Ind_right"/>
+ <attribute name="rightChars" tokenid="ooxml:CT_Ind_rightChars"/>
+ <attribute name="hanging" tokenid="ooxml:CT_Ind_hanging"/>
+ <attribute name="hangingChars" tokenid="ooxml:CT_Ind_hangingChars"/>
+ <attribute name="firstLine" tokenid="ooxml:CT_Ind_firstLine"/>
+ <attribute name="firstLineChars" tokenid="ooxml:CT_Ind_firstLineChars"/>
+ </resource>
+ <resource name="ST_Jc" resource="List">
+ <value tokenid="0">left</value>
+ <value tokenid="1">center</value>
+ <value tokenid="2">right</value>
+ <value tokenid="3">both</value>
+ <value tokenid="ooxml:Value_ST_Jc_mediumKashida">mediumKashida</value>
+ <value tokenid="ooxml:Value_ST_Jc_distribute">distribute</value>
+ <value tokenid="ooxml:Value_ST_Jc_numTab">numTab</value>
+ <value tokenid="ooxml:Value_ST_Jc_highKashida">highKashida</value>
+ <value tokenid="ooxml:Value_ST_Jc_lowKashida">lowKashida</value>
+ <value tokenid="ooxml:Value_ST_Jc_thaiDistribute">thaiDistribute</value>
+ </resource>
+ <resource name="CT_Jc" resource="Value" tag="character">
+ <attribute name="val" tokenid="ooxml:CT_Jc_val" action="setValue"/>
+ </resource>
+ <resource name="ST_View" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_View_none">none</value>
+ <value name="print" tokenid="ooxml:Value_wordprocessingml_ST_View_print">print</value>
+ <value name="outline" tokenid="ooxml:Value_wordprocessingml_ST_View_outline">outline</value>
+ <value name="masterPages" tokenid="ooxml:Value_wordprocessingml_ST_View_masterPages">masterPages</value>
+ <value name="normal" tokenid="ooxml:Value_wordprocessingml_ST_View_normal">normal</value>
+ <value name="web" tokenid="ooxml:Value_wordprocessingml_ST_View_web">web</value>
+ </resource>
+ <resource name="CT_View" resource="Properties" tag="settings">
+ <attribute name="val" tokenid="ooxml:CT_View_val"/>
+ </resource>
+ <resource name="ST_Zoom" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_Zoom_none">none</value>
+ <value name="fullPage" tokenid="ooxml:Value_wordprocessingml_ST_Zoom_fullPage">fullPage</value>
+ <value name="bestFit" tokenid="ooxml:Value_wordprocessingml_ST_Zoom_bestFit">bestFit</value>
+ <value name="textFit" tokenid="ooxml:Value_wordprocessingml_ST_Zoom_textFit">textFit</value>
+ </resource>
+ <resource name="CT_Zoom" resource="Properties" tag="settings">
+ <attribute name="val" tokenid="ooxml:CT_Zoom_val"/>
+ <attribute name="percent" tokenid="ooxml:CT_Zoom_percent"/>
+ </resource>
+ <resource name="CT_WritingStyle" resource="Properties" tag="settings">
+ <attribute name="lang" tokenid="ooxml:CT_WritingStyle_lang"/>
+ <attribute name="vendorID" tokenid="ooxml:CT_WritingStyle_vendorID"/>
+ <attribute name="dllVersion" tokenid="ooxml:CT_WritingStyle_dllVersion"/>
+ <attribute name="nlCheck" tokenid="ooxml:CT_WritingStyle_nlCheck"/>
+ <attribute name="checkStyle" tokenid="ooxml:CT_WritingStyle_checkStyle"/>
+ <attribute name="appName" tokenid="ooxml:CT_WritingStyle_appName"/>
+ </resource>
+ <resource name="ST_Proof" resource="List" generated="yes">
+ <value name="clean" tokenid="ooxml:Value_wordprocessingml_ST_Proof_clean">clean</value>
+ <value name="dirty" tokenid="ooxml:Value_wordprocessingml_ST_Proof_dirty">dirty</value>
+ </resource>
+ <resource name="CT_Proof" resource="Properties" tag="redline">
+ <attribute name="spelling" tokenid="ooxml:CT_Proof_spelling"/>
+ <attribute name="grammar" tokenid="ooxml:CT_Proof_grammar"/>
+ </resource>
+ <resource name="ST_DocType" resource="List" generated="yes">
+ <value name="notSpecified" tokenid="ooxml:Value_wordprocessingml_ST_DocType_notSpecified">notSpecified</value>
+ <value name="letter" tokenid="ooxml:Value_wordprocessingml_ST_DocType_letter">letter</value>
+ <value name="eMail" tokenid="ooxml:Value_wordprocessingml_ST_DocType_eMail">eMail</value>
+ </resource>
+ <resource name="CT_DocType" resource="Properties" tag="document">
+ <attribute name="val" tokenid="ooxml:CT_DocType_val"/>
+ </resource>
+ <resource name="ST_DocProtect" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_DocProtect_none">none</value>
+ <value name="readOnly" tokenid="ooxml:Value_wordprocessingml_ST_DocProtect_readOnly">readOnly</value>
+ <value name="comments" tokenid="ooxml:Value_wordprocessingml_ST_DocProtect_comments">comments</value>
+ <value name="trackedChanges" tokenid="ooxml:Value_wordprocessingml_ST_DocProtect_trackedChanges">trackedChanges</value>
+ <value name="forms" tokenid="ooxml:Value_wordprocessingml_ST_DocProtect_forms">forms</value>
+ </resource>
+ <resource name="ST_CryptProv" resource="List" generated="yes">
+ <value name="rsaAES" tokenid="ooxml:Value_wordprocessingml_ST_CryptProv_rsaAES">rsaAES</value>
+ <value name="rsaFull" tokenid="ooxml:Value_wordprocessingml_ST_CryptProv_rsaFull">rsaFull</value>
+ </resource>
+ <resource name="ST_AlgClass" resource="List" generated="yes">
+ <value name="hash" tokenid="ooxml:Value_wordprocessingml_ST_AlgClass_hash">hash</value>
+ </resource>
+ <resource name="ST_AlgType" resource="List" generated="yes">
+ <value name="typeAny" tokenid="ooxml:Value_wordprocessingml_ST_AlgType_typeAny">typeAny</value>
+ </resource>
+ <resource name="AG_Password" resource="Properties">
+ <attribute name="cryptProviderType" tokenid="ooxml:AG_Password_cryptProviderType"/>
+ <attribute name="cryptAlgorithmClass" tokenid="ooxml:AG_Password_cryptAlgorithmClass"/>
+ <attribute name="cryptAlgorithmType" tokenid="ooxml:AG_Password_cryptAlgorithmType"/>
+ <attribute name="cryptAlgorithmSid" tokenid="ooxml:AG_Password_cryptAlgorithmSid"/>
+ <attribute name="cryptSpinCount" tokenid="ooxml:AG_Password_cryptSpinCount"/>
+ <attribute name="cryptProvider" tokenid="ooxml:AG_Password_cryptProvider"/>
+ <attribute name="algIdExt" tokenid="ooxml:AG_Password_algIdExt"/>
+ <attribute name="algIdExtSource" tokenid="ooxml:AG_Password_algIdExtSource"/>
+ <attribute name="cryptProviderTypeExt" tokenid="ooxml:AG_Password_cryptProviderTypeExt"/>
+ <attribute name="cryptProviderTypeExtSource" tokenid="ooxml:AG_Password_cryptProviderTypeExtSource"/>
+ <attribute name="hash" tokenid="ooxml:AG_Password_hash"/>
+ <attribute name="salt" tokenid="ooxml:AG_Password_salt"/>
+ </resource>
+ <resource name="CT_DocProtect" resource="Properties" tag="document">
+ <attribute name="edit" tokenid="ooxml:CT_DocProtect_edit"/>
+ <attribute name="formatting" tokenid="ooxml:CT_DocProtect_formatting"/>
+ <attribute name="enforcement" tokenid="ooxml:CT_DocProtect_enforcement"/>
+ </resource>
+ <resource name="ST_MailMergeDocType" resource="List" generated="yes">
+ <value name="catalog" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDocType_catalog">catalog</value>
+ <value name="envelopes" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDocType_envelopes">envelopes</value>
+ <value name="mailingLabels" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDocType_mailingLabels">mailingLabels</value>
+ <value name="formLetters" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDocType_formLetters">formLetters</value>
+ <value name="email" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDocType_email">email</value>
+ <value name="fax" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDocType_fax">fax</value>
+ </resource>
+ <resource name="CT_MailMergeDocType" resource="Value" generated="yes" tag="mailmerge">
+ <attribute name="val" tokenid="ooxml:CT_MailMergeDocType_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_MailMergeDataType" resource="List" generated="yes">
+ <value name="textFile" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDataType_textFile">textFile</value>
+ <value name="database" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDataType_database">database</value>
+ <value name="spreadsheet" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDataType_spreadsheet">spreadsheet</value>
+ <value name="query" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDataType_query">query</value>
+ <value name="odbc" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDataType_odbc">odbc</value>
+ <value name="native" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDataType_native">native</value>
+ </resource>
+ <resource name="CT_MailMergeDataType" resource="Value" generated="yes" tag="mailmerge">
+ <attribute name="val" tokenid="ooxml:CT_MailMergeDataType_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_MailMergeDest" resource="List" generated="yes">
+ <value name="newDocument" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDest_newDocument">newDocument</value>
+ <value name="printer" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDest_printer">printer</value>
+ <value name="email" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDest_email">email</value>
+ <value name="fax" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeDest_fax">fax</value>
+ </resource>
+ <resource name="CT_MailMergeDest" resource="Value" generated="yes" tag="mailmerge">
+ <attribute name="val" tokenid="ooxml:CT_MailMergeDest_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_MailMergeOdsoFMDFieldType" resource="List" generated="yes">
+ <value name="null" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeOdsoFMDFieldType_null">null</value>
+ <value name="dbColumn" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeOdsoFMDFieldType_dbColumn">dbColumn</value>
+ </resource>
+ <resource name="CT_MailMergeOdsoFMDFieldType" resource="Value" generated="yes" tag="mailmerge">
+ <attribute name="val" tokenid="ooxml:CT_MailMergeOdsoFMDFieldType_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="CT_TrackChangesView" resource="Properties" tag="redline">
+ <attribute name="markup" tokenid="ooxml:CT_TrackChangesView_markup"/>
+ <attribute name="comments" tokenid="ooxml:CT_TrackChangesView_comments"/>
+ <attribute name="insDel" tokenid="ooxml:CT_TrackChangesView_insDel"/>
+ <attribute name="formatting" tokenid="ooxml:CT_TrackChangesView_formatting"/>
+ <attribute name="inkAnnotations" tokenid="ooxml:CT_TrackChangesView_inkAnnotations"/>
+ </resource>
+ <resource name="CT_Kinsoku" resource="Properties" tag="character">
+ <attribute name="lang" tokenid="ooxml:CT_Kinsoku_lang"/>
+ <attribute name="val" tokenid="ooxml:CT_Kinsoku_val"/>
+ </resource>
+ <resource name="ST_TextDirection" resource="List">
+ <value tokenid="0">lrTb</value>
+ <value tokenid="1">tbRl</value>
+ <value tokenid="3">btLr</value>
+ <value tokenid="4">lrTbV</value>
+ <value tokenid="5">tbRlV</value>
+ <value tokenid="ooxml:Value_ST_TextDirection_tbLrV">tbLrV</value>
+ </resource>
+ <resource name="CT_TextDirection" resource="Value" tag="paragraph">
+ <attribute name="val" tokenid="ooxml:CT_TextDirection_val" action="setValue"/>
+ </resource>
+ <resource name="ST_TextAlignment" resource="List" generated="yes">
+ <value name="top" tokenid="ooxml:Value_wordprocessingml_ST_TextAlignment_top">top</value>
+ <value name="center" tokenid="ooxml:Value_wordprocessingml_ST_TextAlignment_center">center</value>
+ <value name="baseline" tokenid="ooxml:Value_wordprocessingml_ST_TextAlignment_baseline">baseline</value>
+ <value name="bottom" tokenid="ooxml:Value_wordprocessingml_ST_TextAlignment_bottom">bottom</value>
+ <value name="auto" tokenid="ooxml:Value_wordprocessingml_ST_TextAlignment_auto">auto</value>
+ </resource>
+ <resource name="CT_TextAlignment" resource="Value" generated="yes" tag="paragraph">
+ <attribute name="val" tokenid="ooxml:CT_TextAlignment_val" action="setValue"/>
+ </resource>
+ <resource name="ST_DisplacedByCustomXml" resource="List" generated="yes">
+ <value name="next" tokenid="ooxml:Value_wordprocessingml_ST_DisplacedByCustomXml_next">next</value>
+ <value name="prev" tokenid="ooxml:Value_wordprocessingml_ST_DisplacedByCustomXml_prev">prev</value>
+ </resource>
+ <resource name="ST_AnnotationVMerge" resource="List" generated="yes">
+ <value name="cont" tokenid="ooxml:Value_wordprocessingml_ST_AnnotationVMerge_cont">cont</value>
+ <value name="rest" tokenid="ooxml:Value_wordprocessingml_ST_AnnotationVMerge_rest">rest</value>
+ </resource>
+ <resource name="CT_Markup" resource="Properties" tag="redline">
+ <attribute name="id" tokenid="ooxml:CT_Markup_id"/>
+ </resource>
+ <resource name="CT_TrackChange" resource="Properties" tag="redline">
+ <attribute name="author" tokenid="ooxml:CT_TrackChange_author"/>
+ <attribute name="date" tokenid="ooxml:CT_TrackChange_date"/>
+ </resource>
+ <resource name="CT_CellMergeTrackChange" resource="Properties" tag="redline">
+ <attribute name="vMerge" tokenid="ooxml:CT_CellMergeTrackChange_vMerge"/>
+ <attribute name="vMergeOrig" tokenid="ooxml:CT_CellMergeTrackChange_vMergeOrig"/>
+ </resource>
+ <resource name="CT_TrackChangeRange" resource="Properties" tag="redline">
+ <attribute name="displacedByCustomXml" tokenid="ooxml:CT_TrackChangeRange_displacedByCustomXml"/>
+ </resource>
+ <resource name="CT_MarkupRange" resource="Properties" tag="redline">
+ <attribute name="displacedByCustomXml" tokenid="ooxml:CT_MarkupRange_displacedByCustomXml"/>
+ </resource>
+ <resource name="CT_MarkupRangeBookmark" resource="Properties" tag="redline">
+ <attribute name="id" tokenid="rtf:IBKL"/>
+ </resource>
+ <resource name="CT_BookmarkRange" resource="Properties" tag="reference">
+ <type name="Bookmark"/>
+ <attribute name="colFirst" tokenid="ooxml:CT_BookmarkRange_colFirst"/>
+ <attribute name="colLast" tokenid="ooxml:CT_BookmarkRange_colLast"/>
+ </resource>
+ <resource name="CT_Bookmark" resource="Properties" tag="reference">
+ <type name="Bookmark"/>
+ <attribute name="name" tokenid="rtf:BOOKMARKNAME"/>
+ </resource>
+ <resource name="CT_MoveBookmark" resource="Properties" tag="reference">
+ <attribute name="author" tokenid="ooxml:CT_MoveBookmark_author"/>
+ <attribute name="date" tokenid="ooxml:CT_MoveBookmark_date"/>
+ </resource>
+ <resource name="CT_Comment" resource="XNote" tag="content">
+ <attribute name="id" action="checkId"/>
+ <attribute name="initials" tokenid="ooxml:CT_Comment_initials"/>
+ </resource>
+ <resource name="CT_TrackChangeNumbering" resource="Properties" tag="numbering">
+ <attribute name="original" tokenid="ooxml:CT_TrackChangeNumbering_original"/>
+ </resource>
+ <resource name="CT_TblPrExChange" resource="Properties" tag="table">
+ <element name="tblPrEx" tokenid="ooxml:CT_TblPrExChange_tblPrEx"/>
+ </resource>
+ <resource name="CT_TcPrChange" resource="Properties" tag="table">
+ <element name="tcPr" tokenid="ooxml:CT_TcPrChange_tcPr"/>
+ </resource>
+ <resource name="CT_TrPrChange" resource="Properties" tag="table">
+ <element name="trPr" tokenid="ooxml:CT_TrPrChange_trPr"/>
+ </resource>
+ <resource name="CT_TblGridChange" resource="Properties" tag="table">
+ <element name="tblGrid" tokenid="ooxml:CT_TblGridChange_tblGrid"/>
+ </resource>
+ <resource name="CT_TblPrChange" resource="Properties" tag="table">
+ <element name="tblPr" tokenid="ooxml:CT_TblPrChange_tblPr"/>
+ </resource>
+ <resource name="CT_SectPrChange" resource="Properties" tag="section">
+ <element name="sectPr" tokenid="ooxml:CT_SectPrChange_sectPr"/>
+ </resource>
+ <resource name="CT_PPrChange" resource="Properties" tag="paragraph">
+ <element name="pPr" tokenid="ooxml:CT_PPrChange_pPr"/>
+ </resource>
+ <resource name="CT_RPrChange" resource="Properties" tag="character">
+ <element name="rPr" tokenid="ooxml:CT_RPrChange_rPr"/>
+ </resource>
+ <resource name="CT_ParaRPrChange" resource="Properties" tag="character">
+ <element name="rPr" tokenid="ooxml:CT_ParaRPrChange_rPr"/>
+ </resource>
+ <resource name="CT_RunTrackChange" resource="Stream" tag="redlines">
+ <action name="start" action="tokenproperty"/>
+ <action name="start" action="propagateCharacterPropertiesAsSet" sendtokenid="ooxml:trackchange"/>
+ <action name="start" action="clearProps"/>
+ <action name="end" action="mark" sendtokenid="ooxml:endtrackchange"/>
+ </resource>
+ <resource name="EG_RangeMarkupElements" resource="Properties" tag="redlines">
+ <element name="bookmarkStart" tokenid="ooxml:EG_RangeMarkupElements_bookmarkStart"/>
+ <element name="bookmarkEnd" tokenid="ooxml:EG_RangeMarkupElements_bookmarkEnd"/>
+ <element name="moveFromRangeStart" tokenid="ooxml:EG_RangeMarkupElements_moveFromRangeStart"/>
+ <element name="moveFromRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_moveFromRangeEnd"/>
+ <element name="moveToRangeStart" tokenid="ooxml:EG_RangeMarkupElements_moveToRangeStart"/>
+ <element name="moveToRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_moveToRangeEnd"/>
+ <element name="commentRangeStart" tokenid="ooxml:EG_RangeMarkupElements_commentRangeStart"/>
+ <element name="commentRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_commentRangeEnd"/>
+ <element name="customXmlInsRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeStart"/>
+ <element name="customXmlInsRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlInsRangeEnd"/>
+ <element name="customXmlDelRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeStart"/>
+ <element name="customXmlDelRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlDelRangeEnd"/>
+ <element name="customXmlMoveFromRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeStart"/>
+ <element name="customXmlMoveFromRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveFromRangeEnd"/>
+ <element name="customXmlMoveToRangeStart" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeStart"/>
+ <element name="customXmlMoveToRangeEnd" tokenid="ooxml:EG_RangeMarkupElements_customXmlMoveToRangeEnd"/>
+ </resource>
+ <resource name="CT_NumPr" resource="Properties" tag="numbering">
+ <kind name="paragraph"/>
+ <element name="ilvl" tokenid="sprm:PIlvl"/>
+ <element name="numId" tokenid="sprm:PIlfo"/>
+ <element name="numberingChange" tokenid="ooxml:CT_NumPr_numberingChange"/>
+ <element name="ins" tokenid="ooxml:CT_NumPr_ins"/>
+ </resource>
+ <resource name="CT_PBdr" resource="Properties" tag="paragraph">
+ <kind name="paragraph"/>
+ <element name="top" tokenid="sprm:PBrcTop"/>
+ <element name="left" tokenid="sprm:PBrcLeft"/>
+ <element name="bottom" tokenid="sprm:PBrcBottom"/>
+ <element name="right" tokenid="sprm:PBrcRight"/>
+ <element name="between" tokenid="sprm:PBrcBetween"/>
+ <element name="bar" tokenid="sprm:PBrcBar"/>
+ </resource>
+ <resource name="CT_Tabs" resource="Properties" tag="paragraph">
+ <element name="tab" tokenid="ooxml:CT_Tabs_tab"/>
+ </resource>
+ <resource name="ST_TextboxTightWrap" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_TextboxTightWrap_none">none</value>
+ <value name="allLines" tokenid="ooxml:Value_wordprocessingml_ST_TextboxTightWrap_allLines">allLines</value>
+ <value name="firstAndLastLine" tokenid="ooxml:Value_wordprocessingml_ST_TextboxTightWrap_firstAndLastLine">firstAndLastLine</value>
+ <value name="firstLineOnly" tokenid="ooxml:Value_wordprocessingml_ST_TextboxTightWrap_firstLineOnly">firstLineOnly</value>
+ <value name="lastLineOnly" tokenid="ooxml:Value_wordprocessingml_ST_TextboxTightWrap_lastLineOnly">lastLineOnly</value>
+ </resource>
+ <resource name="CT_TextboxTightWrap" resource="Value" generated="yes" tag="textbox">
+ <attribute name="val" tokenid="ooxml:CT_TextboxTightWrap_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="CT_PPrBase" resource="Properties" tag="paragraph">
+ <kind name="paragraph"/>
+ <element name="pStyle" tokenid="ooxml:CT_PPrBase_pStyle"/>
+ <element name="keepNext" tokenid="sprm:PFKeepFollow"/>
+ <element name="keepLines" tokenid="sprm:PFKeep"/>
+ <element name="pageBreakBefore" tokenid="sprm:PFPageBreakBefore"/>
+ <element name="framePr" tokenid="ooxml:CT_PPrBase_framePr"/>
+ <element name="widowControl" tokenid="ooxml:CT_PPrBase_widowControl"/>
+ <element name="numPr" tokenid="ooxml:CT_PPrBase_numPr"/>
+ <element name="suppressLineNumbers" tokenid="sprm:PFNoLineNumb"/>
+ <element name="pBdr" tokenid="ooxml:CT_PrBase_pBdr"/>
+ <element name="shd" tokenid="sprm:PShd"/>
+ <element name="tabs" tokenid="ooxml:CT_PPrBase_tabs"/>
+ <element name="suppressAutoHyphens" tokenid="sprm:PFNoAutoHyph"/>
+ <element name="kinsoku" tokenid="ooxml:CT_PPrBase_kinsoku"/>
+ <element name="wordWrap" tokenid="ooxml:CT_PPrBase_wordWrap"/>
+ <element name="overflowPunct" tokenid="sprm:PFOverflowPunct"/>
+ <element name="topLinePunct" tokenid="sprm:PFTopLinePunct"/>
+ <element name="autoSpaceDE" tokenid="sprm:PFAutoSpaceDE"/>
+ <element name="autoSpaceDN" tokenid="sprm:PFAutoSpaceDN"/>
+ <element name="bidi" tokenid="sprm:PFBiDi"/>
+ <element name="adjustRightInd" tokenid="ooxml:CT_PPrBase_adjustRightInd"/>
+ <element name="snapToGrid" tokenid="ooxml:CT_PPrBase_snapToGrid"/>
+ <element name="spacing" tokenid="ooxml:CT_PPrBase_spacing"/>
+ <element name="ind" tokenid="ooxml:CT_PPrBase_ind"/>
+ <element name="contextualSpacing" tokenid="0x246d"/>
+ <element name="mirrorIndents" tokenid="0x2470"/>
+ <element name="suppressOverlap" tokenid="0x2462"/>
+ <element name="jc" tokenid="sprm:PJc"/>
+ <element name="textDirection" tokenid="sprm:PFrameTextFlow"/>
+ <element name="textAlignment" tokenid="sprm:PWAlignFont"/>
+ <element name="textboxTightWrap" tokenid="sprm:PTightWrap"/>
+ <element name="outlineLvl" tokenid="sprm:POutLvl"/>
+ <element name="divId" tokenid="ooxml:CT_PPrBase_divId"/>
+ <element name="cnfStyle" tokenid="ooxml:CT_PPrBase_cnfStyle"/>
+ </resource>
+ <resource name="CT_PPr" resource="Properties" tag="paragraph">
+ <element name="rPr" tokenid="ooxml:CT_PPr_rPr"/>
+ <element name="sectPr" tokenid="ooxml:CT_PPr_sectPr"/>
+ <element name="pPrChange" tokenid="ooxml:CT_PPr_pPrChange"/>
+ </resource>
+ <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="CT_Control" resource="Properties" tag="control">
+ <attribute name="name" tokenid="ooxml:CT_Control_name"/>
+ <attribute name="shapeid" tokenid="ooxml:CT_Control_shapeid"/>
+ <attribute name="r:id" tokenid="ooxml:CT_Control_r_id"/>
+ </resource>
+ <resource name="CT_Background" resource="Properties">
+ <attribute name="color" tokenid="ooxml:CT_Background_color"/>
+ <attribute name="themeColor" tokenid="ooxml:CT_Background_themeColor"/>
+ <attribute name="themeTint" tokenid="ooxml:CT_Background_themeTint"/>
+ <attribute name="themeShade" tokenid="ooxml:CT_Background_themeShade"/>
+ </resource>
+ <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="CT_Rel" resource="Properties">
+ <attribute name="r:id" tokenid="ooxml:CT_Rel_id"/>
+ </resource>
+ <resource name="CT_PictureBase" resource="Properties" tag="shape"/>
+ <resource name="CT_Object" resource="Shape" tag="shape">
+ <element name="control" tokenid="ooxml:CT_Object_control"/>
+ <attribute name="dxaOrig" tokenid="ooxml:CT_Object_dxaOrig"/>
+ <attribute name="dyaOrig" tokenid="ooxml:CT_Object_dyaOrig"/>
+ <action name="end" action="sendPropertiesWithId" sendtokenid="ooxml:object"/>
+ <action name="end" action="clearProps"/>
+ </resource>
+ <resource name="CT_Picture" resource="Shape" tag="shape">
+ <element name="movie" tokenid="ooxml:CT_Picture_movie"/>
+ <element name="control" tokenid="ooxml:CT_Picture_control"/>
+ <action name="end" action="sendPropertiesWithId" sendtokenid="ooxml:object"/>
+ <action name="end" action="clearProps"/>
+ </resource>
+ <resource name="CT_Drawing" resource="Properties" tag="shape">
+ <action name="end" action="handlePicture"/>
+ </resource>
+ <resource name="CT_SimpleField" resource="Stream" tag="field">
+ <element name="fldData" tokenid="ooxml:CT_SimpleField_fldData"/>
+ <attribute name="instr" tokenid="ooxml:CT_SimpleField_instr"/>
+ <attribute name="fldLock" tokenid="ooxml:CT_SimpleField_fldLock"/>
+ <attribute name="dirty" tokenid="ooxml:CT_SimpleField_dirty"/>
+ <action name="start" action="fieldstart"/>
+ <action name="start" action="startCharacterGroup"/>
+ <action name="start" action="printproperty" sendtokenid="ooxml:CT_SimpleField_instr"/>
+ <action name="start" action="endCharacterGroup"/>
+ <action name="start" action="fieldsep"/>
+ <action name="end" action="fieldend"/>
+ </resource>
+ <resource name="ST_FldCharType" resource="List">
+ <value name="begin" tokenid="ooxml:Value_ST_FldCharType_begin">begin</value>
+ <value name="separate" tokenid="ooxml:Value_ST_FldCharType_separate">separate</value>
+ <value name="end" tokenid="ooxml:Value_ST_FldCharType_end">end</value>
+ </resource>
+ <resource name="ST_InfoTextType" resource="List" generated="yes">
+ <value name="text" tokenid="ooxml:Value_wordprocessingml_ST_InfoTextType_text">text</value>
+ <value name="autoText" tokenid="ooxml:Value_wordprocessingml_ST_InfoTextType_autoText">autoText</value>
+ </resource>
+ <resource name="ST_FFHelpTextVal" resource="String" generated="yes"/>
+ <resource name="ST_FFStatusTextVal" resource="String" generated="yes"/>
+ <resource name="ST_FFName" resource="String" generated="yes"/>
+ <resource name="ST_FFTextType" resource="List" generated="yes">
+ <value name="regular" tokenid="ooxml:Value_wordprocessingml_ST_FFTextType_regular">regular</value>
+ <value name="number" tokenid="ooxml:Value_wordprocessingml_ST_FFTextType_number">number</value>
+ <value name="date" tokenid="ooxml:Value_wordprocessingml_ST_FFTextType_date">date</value>
+ <value name="currentTime" tokenid="ooxml:Value_wordprocessingml_ST_FFTextType_currentTime">currentTime</value>
+ <value name="currentDate" tokenid="ooxml:Value_wordprocessingml_ST_FFTextType_currentDate">currentDate</value>
+ <value name="calculated" tokenid="ooxml:Value_wordprocessingml_ST_FFTextType_calculated">calculated</value>
+ </resource>
+ <resource name="CT_FFTextType" resource="Value" generated="yes" tag="field">
+ <attribute name="val" tokenid="ooxml:CT_FFTextType_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="CT_FFName" resource="Value" generated="yes" tag="field">
+ <attribute name="val" tokenid="ooxml:CT_FFName_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="CT_FldChar" resource="Stream" tag="field">
+ <element name="fldData" tokenid="ooxml:CT_FldChar_fldData"/>
+ <element name="ffData" tokenid="ooxml:CT_FldChar_ffData"/>
+ <element name="numberingChange" tokenid="ooxml:CT_FldChar_numberingChange"/>
+ <attribute name="fldCharType" tokenid="ooxml:CT_FldChar_fldCharType"/>
+ <attribute name="fldLock" tokenid="ooxml:CT_FldChar_fldLock"/>
+ <attribute name="dirty" tokenid="ooxml:CT_FldChar_dirty"/>
+ <action name="start" action="fieldstart">
+ <cond tokenid="ooxml:CT_FldChar_fldCharType" value="ooxml:Value_ST_FldCharType_begin"/>
+ </action>
+ <action name="start" action="fieldsep">
+ <cond tokenid="ooxml:CT_FldChar_fldCharType" value="ooxml:Value_ST_FldCharType_separate"/>
+ </action>
+ <action name="start" action="fieldend">
+ <cond tokenid="ooxml:CT_FldChar_fldCharType" value="ooxml:Value_ST_FldCharType_end"/>
+ </action>
+ </resource>
+ <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="CT_Hyperlink" resource="Stream" tag="link">
+ <attribute name="tgtFrame" tokenid="ooxml:CT_Hyperlink_tgtFrame"/>
+ <attribute name="tooltip" tokenid="ooxml:CT_Hyperlink_tooltip"/>
+ <attribute name="docLocation" tokenid="ooxml:CT_Hyperlink_docLocation"/>
+ <attribute name="history" tokenid="ooxml:CT_Hyperlink_history"/>
+ <attribute name="anchor" tokenid="ooxml:CT_Hyperlink_anchor"/>
+ <attribute name="r:id" tokenid="ooxml:CT_Hyperlink_r_id"/>
+ <action name="start" action="fieldstart"/>
+ <action name="start" action="handleHyperlink"/>
+ <action name="start" action="fieldsep"/>
+ <action name="end" action="fieldend"/>
+ </resource>
+ <resource name="CT_FFData" resource="Properties" tag="field">
+ <element name="name" tokenid="ooxml:CT_FFData_name"/>
+ <element name="enabled" tokenid="ooxml:CT_FFData_enabled"/>
+ <element name="calcOnExit" tokenid="ooxml:CT_FFData_calcOnExit"/>
+ <element name="entryMacro" tokenid="ooxml:CT_FFData_entryMacro"/>
+ <element name="exitMacro" tokenid="ooxml:CT_FFData_exitMacro"/>
+ <element name="helpText" tokenid="ooxml:CT_FFData_helpText"/>
+ <element name="statusText" tokenid="ooxml:CT_FFData_statusText"/>
+ <element name="checkBox" tokenid="ooxml:CT_FFData_checkBox"/>
+ <element name="ddList" tokenid="ooxml:CT_FFData_ddList"/>
+ <element name="textInput" tokenid="ooxml:CT_FFData_textInput"/>
+ <action name="end" action="propagateCharacterPropertiesAsSet" sendtokenid="ooxml:ffdata"/>
+ <action name="end" action="clearProps"/>
+ </resource>
+ <resource name="CT_FFHelpText" resource="Properties" tag="field">
+ <attribute name="type" tokenid="ooxml:CT_FFHelpText_type"/>
+ <attribute name="val" tokenid="ooxml:CT_FFHelpText_val"/>
+ </resource>
+ <resource name="CT_FFStatusText" resource="Properties" tag="field">
+ <attribute name="type" tokenid="ooxml:CT_FFStatusText_type"/>
+ <attribute name="val" tokenid="ooxml:CT_FFStatusText_val"/>
+ </resource>
+ <resource name="CT_FFCheckBox" resource="Properties" tag="field">
+ <element name="size" tokenid="ooxml:CT_FFCheckBox_size"/>
+ <element name="sizeAuto" tokenid="ooxml:CT_FFCheckBox_sizeAuto"/>
+ <element name="default" tokenid="ooxml:CT_FFCheckBox_default"/>
+ <element name="checked" tokenid="ooxml:CT_FFCheckBox_checked"/>
+ </resource>
+ <resource name="CT_FFDDList" resource="Properties" tag="field">
+ <element name="result" tokenid="ooxml:CT_FFDDList_result"/>
+ <element name="default" tokenid="ooxml:CT_FFDDList_default"/>
+ <element name="listEntry" tokenid="ooxml:CT_FFDDList_listEntry"/>
+ </resource>
+ <resource name="CT_FFTextInput" resource="Properties" tag="field">
+ <element name="type" tokenid="ooxml:CT_FFTextInput_type"/>
+ <element name="default" tokenid="ooxml:CT_FFTextInput_default"/>
+ <element name="maxLength" tokenid="ooxml:CT_FFTextInput_maxLength"/>
+ <element name="format" tokenid="ooxml:CT_FFTextInput_format"/>
+ </resource>
+ <resource name="ST_SectionMark" resource="List" tag="section">
+ <value tokenid="0">continuous</value>
+ <value tokenid="1">nextColumn</value>
+ <value tokenid="2">nextPage</value>
+ <value tokenid="3">evenPage</value>
+ <value tokenid="4">oddPage</value>
+ </resource>
+ <resource name="CT_SectType" resource="Value" tag="section">
+ <attribute name="val" tokenid="ooxml:CT_SectType_val" action="setValue"/>
+ </resource>
+ <resource name="ST_NumberFormat" resource="List">
+ <value tokenid="ooxml:Value_ST_NumberFormat_decimal">decimal</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_upperRoman">upperRoman</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_lowerRoman">lowerRoman</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_upperLetter">upperLetter</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_lowerLetter">lowerLetter</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_ordinal">ordinal</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_cardinalText">cardinalText</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_ordinalText">ordinalText</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_hex">hex</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_chicago">chicago</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_ideographDigital">ideographDigital</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_japaneseCounting">japaneseCounting</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_aiueo">aiueo</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_iroha">iroha</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_decimalFullWidth">decimalFullWidth</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_decimalHalfWidth">decimalHalfWidth</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_japaneseLegal">japaneseLegal</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_japaneseDigitalTenThousand">japaneseDigitalTenThousand</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_decimalEnclosedCircle">decimalEnclosedCircle</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_decimalFullWidth2">decimalFullWidth2</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_aiueoFullWidth">aiueoFullWidth</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_irohaFullWidth">irohaFullWidth</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_decimalZero">decimalZero</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_bullet">bullet</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_ganada">ganada</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_chosung">chosung</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_decimalEnclosedFullstop">decimalEnclosedFullstop</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_decimalEnclosedParen">decimalEnclosedParen</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_decimalEnclosedCircleChinese">decimalEnclosedCircleChinese</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_ideographEnclosedCircle">ideographEnclosedCircle</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_ideographTraditional">ideographTraditional</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_ideographZodiac">ideographZodiac</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_ideographZodiacTraditional">ideographZodiacTraditional</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_taiwaneseCounting">taiwaneseCounting</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_ideographLegalTraditional">ideographLegalTraditional</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_taiwaneseCountingThousand">taiwaneseCountingThousand</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_taiwaneseDigital">taiwaneseDigital</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_chineseCounting">chineseCounting</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_chineseLegalSimplified">chineseLegalSimplified</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_chineseCountingThousand">chineseCountingThousand</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_koreanDigital">koreanDigital</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_koreanCounting">koreanCounting</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_koreanLegal">koreanLegal</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_koreanDigital2">koreanDigital2</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_vietnameseCounting">vietnameseCounting</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_russianLower">russianLower</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_russianUpper">russianUpper</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_none">none</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_numberInDash">numberInDash</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_hebrew1">hebrew1</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_hebrew2">hebrew2</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_arabicAlpha">arabicAlpha</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_arabicAbjad">arabicAbjad</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_hindiVowels">hindiVowels</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_hindiConsonants">hindiConsonants</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_hindiNumbers">hindiNumbers</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_hindiCounting">hindiCounting</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_thaiLetters">thaiLetters</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_thaiNumbers">thaiNumbers</value>
+ <value tokenid="ooxml:Value_ST_NumberFormat_thaiCounting">thaiCounting</value>
+ </resource>
+ <resource name="ST_PageOrientation" resource="List">
+ <value tokenid="0">portrait</value>
+ <value tokenid="1">landscape</value>
+ </resource>
+ <resource name="CT_PageSz" resource="Properties" tag="page">
+ <attribute name="w" tokenid="ooxml:CT_PageSz_w"/>
+ <attribute name="h" tokenid="ooxml:CT_PageSz_h"/>
+ <attribute name="orient" tokenid="ooxml:CT_PageSz_orient"/>
+ <attribute name="code" tokenid="ooxml:CT_PageSz_code"/>
+ </resource>
+ <resource name="CT_PageMar" resource="Properties" tag="page">
+ <attribute name="top" tokenid="ooxml:CT_PageMar_top"/>
+ <attribute name="right" tokenid="ooxml:CT_PageMar_right"/>
+ <attribute name="bottom" tokenid="ooxml:CT_PageMar_bottom"/>
+ <attribute name="left" tokenid="ooxml:CT_PageMar_left"/>
+ <attribute name="header" tokenid="ooxml:CT_PageMar_header"/>
+ <attribute name="footer" tokenid="ooxml:CT_PageMar_footer"/>
+ <attribute name="gutter" tokenid="ooxml:CT_PageMar_gutter"/>
+ </resource>
+ <resource name="ST_PageBorderZOrder" resource="List" generated="yes">
+ <value name="front" tokenid="ooxml:Value_wordprocessingml_ST_PageBorderZOrder_front">front</value>
+ <value name="back" tokenid="ooxml:Value_wordprocessingml_ST_PageBorderZOrder_back">back</value>
+ </resource>
+ <resource name="ST_PageBorderDisplay" resource="List" generated="yes">
+ <value name="allPages" tokenid="ooxml:Value_wordprocessingml_ST_PageBorderDisplay_allPages">allPages</value>
+ <value name="firstPage" tokenid="ooxml:Value_wordprocessingml_ST_PageBorderDisplay_firstPage">firstPage</value>
+ <value name="notFirstPage" tokenid="ooxml:Value_wordprocessingml_ST_PageBorderDisplay_notFirstPage">notFirstPage</value>
+ </resource>
+ <resource name="ST_PageBorderOffset" resource="List" generated="yes">
+ <value name="page" tokenid="ooxml:Value_wordprocessingml_ST_PageBorderOffset_page">page</value>
+ <value name="text" tokenid="ooxml:Value_wordprocessingml_ST_PageBorderOffset_text">text</value>
+ </resource>
+ <resource name="CT_PageBorders" resource="Properties" tag="page">
+ <element name="top" tokenid="ooxml:CT_PageBorders_top"/>
+ <element name="left" tokenid="ooxml:CT_PageBorders_left"/>
+ <element name="bottom" tokenid="ooxml:CT_PageBorders_bottom"/>
+ <element name="right" tokenid="ooxml:CT_PageBorders_right"/>
+ <attribute name="zOrder" tokenid="ooxml:CT_PageBorders_zOrder"/>
+ <attribute name="display" tokenid="ooxml:CT_PageBorders_display"/>
+ <attribute name="offsetFrom" tokenid="ooxml:CT_PageBorders_offsetFrom"/>
+ </resource>
+ <resource name="ST_ChapterSep" resource="List">
+ <value tokenid="ooxml:Value_ST_ChapterSep_hyphen">hyphen</value>
+ <value tokenid="ooxml:Value_ST_ChapterSep_period">period</value>
+ <value tokenid="ooxml:Value_ST_ChapterSep_colon">colon</value>
+ <value tokenid="ooxml:Value_ST_ChapterSep_emDash">emDash</value>
+ <value tokenid="ooxml:Value_ST_ChapterSep_enDash">enDash</value>
+ </resource>
+ <resource name="ST_LineNumberRestart" resource="List">
+ <value tokenid="0">newPage</value>
+ <value tokenid="1">newSection</value>
+ <value tokenid="2">continuous</value>
+ </resource>
+ <resource name="CT_LineNumber" resource="Properties" tag="section">
+ <attribute name="countBy" tokenid="ooxml:CT_LineNumber_countBy"/>
+ <attribute name="start" tokenid="ooxml:CT_LineNumber_start"/>
+ <attribute name="distance" tokenid="ooxml:CT_LineNumber_distance"/>
+ <attribute name="restart" tokenid="ooxml:CT_LineNumber_restart"/>
+ </resource>
+ <resource name="CT_PageNumber" resource="Properties" tag="page">
+ <attribute name="fmt" tokenid="ooxml:CT_PageNumber_fmt"/>
+ <attribute name="start" tokenid="ooxml:CT_PageNumber_start"/>
+ <attribute name="chapStyle" tokenid="ooxml:CT_PageNumber_chapStyle"/>
+ <attribute name="chapSep" tokenid="ooxml:CT_PageNumber_chapSep"/>
+ </resource>
+ <resource name="CT_Column" resource="Properties" tag="page">
+ <attribute name="space" tokenid="ooxml:CT_Column_space"/>
+ <attribute name="w" tokenid="ooxml:CT_Column_w"/>
+ </resource>
+ <resource name="CT_Columns" resource="Properties" tag="page">
+ <attribute name="equalWidth" tokenid="ooxml:CT_Columns_equalWidth"/>
+ <attribute name="space" tokenid="ooxml:CT_Columns_space"/>
+ <attribute name="num" tokenid="ooxml:CT_Columns_num"/>
+ <attribute name="sep" tokenid="ooxml:CT_Columns_sep"/>
+ <element name="col" tokenid="ooxml:CT_Columns_col"/>
+ </resource>
+ <resource name="ST_VerticalJc" resource="List">
+ <value tokenid="0">top</value>
+ <value tokenid="1">center</value>
+ <value tokenid="2">both</value>
+ <value tokenid="3">bottom</value>
+ </resource>
+ <resource name="CT_VerticalJc" resource="Value" tag="page">
+ <attribute name="val" tokenid="ooxml:CT_VerticalJc_val" action="setValue"/>
+ </resource>
+ <resource name="ST_DocGrid" resource="List" generated="yes">
+ <value name="default" tokenid="ooxml:Value_wordprocessingml_ST_DocGrid_default">default</value>
+ <value name="lines" tokenid="ooxml:Value_wordprocessingml_ST_DocGrid_lines">lines</value>
+ <value name="linesAndChars" tokenid="ooxml:Value_wordprocessingml_ST_DocGrid_linesAndChars">linesAndChars</value>
+ <value name="snapToChars" tokenid="ooxml:Value_wordprocessingml_ST_DocGrid_snapToChars">snapToChars</value>
+ </resource>
+ <resource name="CT_DocGrid" resource="Properties" tag="document">
+ <attribute name="type" tokenid="ooxml:CT_DocGrid_type"/>
+ <attribute name="linePitch" tokenid="ooxml:CT_DocGrid_linePitch"/>
+ <attribute name="charSpace" tokenid="ooxml:CT_DocGrid_charSpace"/>
+ </resource>
+ <resource name="ST_HdrFtr" resource="List">
+ <value tokenid="ooxml:Value_ST_HrdFtr_even">even</value>
+ <value tokenid="ooxml:Value_ST_HrdFtr_default">default</value>
+ <value tokenid="ooxml:Value_ST_HrdFtr_first">first</value>
+ </resource>
+ <resource name="ST_FtnEdn" resource="List" generated="yes">
+ <value name="normal" tokenid="ooxml:Value_wordprocessingml_ST_FtnEdn_normal">normal</value>
+ <value name="separator" tokenid="ooxml:Value_wordprocessingml_ST_FtnEdn_separator">separator</value>
+ <value name="continuationSeparator" tokenid="ooxml:Value_wordprocessingml_ST_FtnEdn_continuationSeparator">continuationSeparator</value>
+ <value name="continuationNotice" tokenid="ooxml:Value_wordprocessingml_ST_FtnEdn_continuationNotice">continuationNotice</value>
+ </resource>
+ <resource xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" name="CT_HdrFtrRef" resource="Properties" tag="header">
+ <attribute name="type" tokenid="ooxml:CT_HdrFtrRef_type"/>
+ <attribute name="r:id" tokenid="ooxml:CT_HdrFtrRef_id"/>
+ <action name="end" action="handleHdrFtr"/>
+ </resource>
+ <resource name="EG_HdrFtrReferences" resource="Properties" tag="header">
+ <element name="headerReference" tokenid="ooxml:EG_HdrFtrReferences_headerReference"/>
+ <element name="footerReference" tokenid="ooxml:EG_HdrFtrReferences_footerReference"/>
+ </resource>
+ <resource name="CT_HdrFtr" resource="Stream" tag="header"/>
+ <resource name="EG_SectPrContents" resource="Properties" tag="section">
+ <element name="bidi" tokenid="ooxml:EG_SectPrContents_bidi"/>
+ <element name="cols" tokenid="ooxml:EG_SectPrContents_cols"/>
+ <element name="docGrid" tokenid="ooxml:EG_SectPrContents_docGrid"/>
+ <element name="endnotePr" tokenid="ooxml:EG_SectPrContents_endnotePr"/>
+ <element name="footnotePr" tokenid="ooxml:EG_SectPrContents_footnotePr"/>
+ <element name="formProt" tokenid="ooxml:EG_SectPrContents_formProt"/>
+ <element name="lnNumType" tokenid="ooxml:EG_SectPrContents_lnNumType"/>
+ <element name="noEndnote" tokenid="ooxml:EG_SectPrContents_noEndnote"/>
+ <element name="paperSrc" tokenid="ooxml:EG_SectPrContents_paperSrc"/>
+ <element name="pgBorders" tokenid="ooxml:EG_SectPrContents_pgBorders"/>
+ <element name="pgMar" tokenid="ooxml:EG_SectPrContents_pgMar"/>
+ <element name="pgNumType" tokenid="ooxml:EG_SectPrContents_pgNumType"/>
+ <element name="pgSz" tokenid="ooxml:EG_SectPrContents_pgSz"/>
+ <element name="printerSettings" tokenid="ooxml:EG_SectPrContents_printerSettings"/>
+ <element name="rtlGutter" tokenid="ooxml:EG_SectPrContents_rtlGutter"/>
+ <element name="textDirection" tokenid="ooxml:EG_SectPrContents_textDirection"/>
+ <element name="titlePg" tokenid="ooxml:EG_SectPrContents_titlePg"/>
+ <element name="type" tokenid="sprm:SBkc"/>
+ <element name="vAlign" tokenid="ooxml:EG_SectPrContents_vAlign"/>
+ </resource>
+ <resource name="CT_SectPrBase" resource="Properties" tag="section"/>
+ <resource name="CT_SectPr" resource="Properties" tag="section">
+ <element name="sectPrChange" tokenid="ooxml:CT_SectPr_sectPrChange"/>
+ <action name="start" action="setLastParagraphInSection"/>
+ </resource>
+ <resource name="ST_BrType" resource="List">
+ <value tokenid="ooxml:Value_ST_BrType_column">column</value>
+ <value tokenid="ooxml:Value_ST_BrType_page">page</value>
+ <value tokenid="ooxml:Value_ST_BrType_textWrapping">textWrapping</value>
+ </resource>
+ <resource name="ST_BrClear" resource="List">
+ <value tokenid="ooxml:Value_ST_BrClear_none">none</value>
+ <value tokenid="ooxml:Value_ST_BrClear_left">left</value>
+ <value tokenid="ooxml:Value_ST_BrClear_right">right</value>
+ <value tokenid="ooxml:Value_ST_BrClear_all">all</value>
+ </resource>
+ <resource name="CT_Br" resource="Properties" tag="content">
+ <attribute name="type" tokenid="ooxml:CT_Br_type"/>
+ <attribute name="clear" tokenid="ooxml:CT_Br_clear"/>
+ <action name="end" action="handleBreak"/>
+ </resource>
+ <resource name="ST_PTabAlignment" resource="List">
+ <value tokenid="ooxml:Value_ST_PTabAlignment_left">left</value>
+ <value tokenid="ooxml:Value_ST_PTabAlignment_center">center</value>
+ <value tokenid="ooxml:Value_ST_PTabAlignment_right">right</value>
+ </resource>
+ <resource name="ST_PTabRelativeTo" resource="List">
+ <value tokenid="ooxml:Value_ST_PTabRelativeTo_margin">margin</value>
+ <value tokenid="ooxml:Value_ST_PTabRelativeTo_indent">indent</value>
+ </resource>
+ <resource name="ST_PTabLeader" resource="List">
+ <value tokenid="ooxml:Value_ST_PTabLeader_none">none</value>
+ <value tokenid="ooxml:Value_ST_PTabLeader_dot">dot</value>
+ <value tokenid="ooxml:Value_ST_PTabLeader_hyphen">hyphen</value>
+ <value tokenid="ooxml:Value_ST_PTabLeader_underscore">underscore</value>
+ <value tokenid="ooxml:Value_ST_PTabLeader_middleDot">middleDot</value>
+ </resource>
+ <resource name="CT_PTab" resource="Stream" tag="paragraph">
+ <attribute name="alignment" tokenid="ooxml:CT_PTab_alignment"/>
+ <attribute name="relativeTo" tokenid="ooxml:CT_PTab_relativeTo"/>
+ <attribute name="leader" tokenid="ooxml:CT_PTab_leader"/>
+ <action name="end" action="tab"/>
+ </resource>
+ <resource name="CT_Sym" resource="Properties" tag="character">
+ <attribute name="font" tokenid="ooxml:CT_Sym_font"/>
+ <attribute name="char" tokenid="ooxml:CT_Sym_char"/>
+ </resource>
+ <resource name="ST_ProofErr" resource="List" generated="yes">
+ <value name="spellStart" tokenid="ooxml:Value_wordprocessingml_ST_ProofErr_spellStart">spellStart</value>
+ <value name="spellEnd" tokenid="ooxml:Value_wordprocessingml_ST_ProofErr_spellEnd">spellEnd</value>
+ <value name="gramStart" tokenid="ooxml:Value_wordprocessingml_ST_ProofErr_gramStart">gramStart</value>
+ <value name="gramEnd" tokenid="ooxml:Value_wordprocessingml_ST_ProofErr_gramEnd">gramEnd</value>
+ </resource>
+ <resource name="ST_EdGrp" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_none">none</value>
+ <value name="everyone" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_everyone">everyone</value>
+ <value name="administrators" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_administrators">administrators</value>
+ <value name="contributors" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_contributors">contributors</value>
+ <value name="editors" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_editors">editors</value>
+ <value name="owners" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_owners">owners</value>
+ <value name="current" tokenid="ooxml:Value_wordprocessingml_ST_EdGrp_current">current</value>
+ </resource>
+ <resource name="CT_Text" resource="Stream" tag="content">
+ <attribute name="xml:space" tokenid="ooxml:CT_Text_space"/>
+ <action name="characters" action="text"/>
+ </resource>
+ <resource name="CT_FtnEdnRefChar" resource="Stream" tag="reference">
+ <action name="end" action="ftnednref"/>
+ </resource>
+ <resource name="CT_FtnEdnSep" resource="Stream" tag="reference">
+ <action name="end" action="ftnednsep"/>
+ </resource>
+ <resource name="CT_FtnEdnCont" resource="Stream" tag="reference">
+ <action name="end" action="ftnedncont"/>
+ </resource>
+ <resource name="CT_PgNum" resource="Stream" tag="reference">
+ <action name="end" action="pgNum"/>
+ </resource>
+ <resource name="CT_Cr" resource="Stream" tag="content">
+ <action name="end" action="endOfParagraph"/>
+ </resource>
+ <resource name="CT_Tab" resource="Stream" tag="content">
+ <action name="end" action="tab"/>
+ </resource>
+ <resource name="EG_RunInnerContent" resource="Stream" tag="content">
+ <element name="br" tokenid="ooxml:EG_RunInnerContent_br"/>
+ <element name="t" tokenid="ooxml:EG_RunInnerContent_t"/>
+ <element name="delText" tokenid="ooxml:EG_RunInnerContent_delText"/>
+ <element name="instrText" tokenid="ooxml:EG_RunInnerContent_instrText"/>
+ <element name="delInstrText" tokenid="ooxml:EG_RunInnerContent_delInstrText"/>
+ <element name="noBreakHyphen" tokenid="ooxml:EG_RunInnerContent_noBreakHyphen"/>
+ <element name="softHyphen" tokenid="ooxml:EG_RunInnerContent_softHyphen"/>
+ <element name="dayShort" tokenid="ooxml:EG_RunInnerContent_dayShort"/>
+ <element name="monthShort" tokenid="ooxml:EG_RunInnerContent_monthShort"/>
+ <element name="yearShort" tokenid="ooxml:EG_RunInnerContent_yearShort"/>
+ <element name="dayLong" tokenid="ooxml:EG_RunInnerContent_dayLong"/>
+ <element name="monthLong" tokenid="ooxml:EG_RunInnerContent_monthLong"/>
+ <element name="yearLong" tokenid="ooxml:EG_RunInnerContent_yearLong"/>
+ <element name="annotationRef" tokenid="ooxml:EG_RunInnerContent_annotationRef"/>
+ <element name="footnoteRef" tokenid="ooxml:EG_RunInnerContent_footnoteRef"/>
+ <element name="endnoteRef" tokenid="ooxml:EG_RunInnerContent_endnoteRef"/>
+ <element name="separator" tokenid="ooxml:EG_RunInnerContent_separator"/>
+ <element name="continuationSeparator" tokenid="ooxml:EG_RunInnerContent_continuationSeparator"/>
+ <element name="sym" tokenid="ooxml:EG_RunInnerContent_sym"/>
+ <element name="pgNum" tokenid="ooxml:EG_RunInnerContent_pgNum"/>
+ <element name="cr" tokenid="ooxml:EG_RunInnerContent_cr"/>
+ <element name="tab" tokenid="ooxml:EG_RunInnerContent_tab"/>
+ <element name="object" tokenid="ooxml:EG_RunInnerContent_object"/>
+ <element name="pict" tokenid="ooxml:EG_RunInnerContent_pict"/>
+ <element name="fldChar" tokenid="ooxml:EG_RunInnerContent_fldChar"/>
+ <element name="ruby" tokenid="ooxml:EG_RunInnerContent_ruby"/>
+ <element name="footnoteReference" tokenid="ooxml:EG_RunInnerContent_footnoteReference"/>
+ <element name="endnoteReference" tokenid="ooxml:EG_RunInnerContent_endnoteReference"/>
+ <element name="commentReference" tokenid="ooxml:EG_RunInnerContent_commentReference"/>
+ <element name="drawing" tokenid="ooxml:EG_RunInnerContent_drawing"/>
+ <element name="ptab" tokenid="ooxml:EG_RunInnerContent_ptab"/>
+ <element name="lastRenderedPageBreak" tokenid="ooxml:EG_RunInnerContent_lastRenderedPageBreak"/>
+ </resource>
+ <resource name="CT_R" resource="Stream" tag="content">
+ <action name="start" action="startCharacterGroup"/>
+ </resource>
+ <resource name="ST_Hint" resource="List">
+ <value tokenid="ooxml:Value_ST_Hint_default">default</value>
+ <value tokenid="ooxml:Value_ST_Hint_eastAsia">eastAsia</value>
+ <value tokenid="ooxml:Value_ST_Hint_cs">cs</value>
+ </resource>
+ <resource name="ST_Theme" resource="List">
+ <value tokenid="ooxml:Value_ST_Theme_majorEastAsia">majorEastAsia</value>
+ <value tokenid="ooxml:Value_ST_Theme_majorBidi">majorBidi</value>
+ <value tokenid="ooxml:Value_ST_Theme_majorAscii">majorAscii</value>
+ <value tokenid="ooxml:Value_ST_Theme_majorHAnsi">majorHAnsi</value>
+ <value tokenid="ooxml:Value_ST_Theme_minorEastAsia">minorEastAsia</value>
+ <value tokenid="ooxml:Value_ST_Theme_minorBidi">minorBidi</value>
+ <value tokenid="ooxml:Value_ST_Theme_minorAscii">minorAscii</value>
+ <value tokenid="ooxml:Value_ST_Theme_minorHAnsi">minorHAnsi</value>
+ </resource>
+ <resource name="CT_Fonts" resource="Properties" tag="font">
+ <attribute name="hint" tokenid="ooxml:CT_Fonts_hint"/>
+ <attribute name="ascii" tokenid="ooxml:CT_Fonts_ascii"/>
+ <attribute name="hAnsi" tokenid="ooxml:CT_Fonts_hAnsi"/>
+ <attribute name="eastAsia" tokenid="ooxml:CT_Fonts_eastAsia"/>
+ <attribute name="cs" tokenid="ooxml:CT_Fonts_cs"/>
+ <attribute name="asciiTheme" tokenid="ooxml:CT_Fonts_asciiTheme"/>
+ <attribute name="hAnsiTheme" tokenid="ooxml:CT_Fonts_hAnsiTheme"/>
+ <attribute name="eastAsiaTheme" tokenid="ooxml:CT_Fonts_eastAsiaTheme"/>
+ <attribute name="cstheme" tokenid="ooxml:CT_Fonts_cstheme"/>
+ </resource>
+ <resource name="EG_RPrBase" resource="Properties" tag="paragraph">
+ <kind name="paragraph"/>
+ <element name="rStyle" tokenid="ooxml:EG_RPrBase_rStyle"/>
+ <element name="rFonts" tokenid="ooxml:EG_RPrBase_rFonts"/>
+ <element name="b" tokenid="sprm:CFBold"/>
+ <element name="bCs" tokenid="sprm:CFBoldBi"/>
+ <element name="i" tokenid="sprm:CFItalic"/>
+ <element name="iCs" tokenid="sprm:CFItalicBi"/>
+ <element name="caps" tokenid="sprm:CFCaps"/>
+ <element name="smallCaps" tokenid="sprm:CFSmallCaps"/>
+ <element name="strike" tokenid="sprm:CFStrike"/>
+ <element name="dstrike" tokenid="sprm:CFDStrike"/>
+ <element name="outline" tokenid="sprm:CFOutline"/>
+ <element name="shadow" tokenid="sprm:CFShadow"/>
+ <element name="emboss" tokenid="sprm:CFEmboss"/>
+ <element name="imprint" tokenid="sprm:CFImprint"/>
+ <element name="noProof" tokenid="sprm:CFNoProof"/>
+ <element name="snapToGrid" tokenid="ooxml:EG_RPrBase_snapToGrid"/>
+ <element name="vanish" tokenid="sprm:CFVanish"/>
+ <element name="webHidden" tokenid="sprm:CFVanish"/>
+ <element name="color" tokenid="ooxml:EG_RPrBase_color"/>
+ <element name="spacing" tokenid="sprm:CDxaSpace"/>
+ <element name="w" tokenid="sprm:CCharScale"/>
+ <element name="kern" tokenid="sprm:CHpsKern"/>
+ <element name="position" tokenid="sprm:CHpsPos"/>
+ <element name="sz" tokenid="sprm:CHps"/>
+ <element name="szCs" tokenid="sprm:CHpsBi"/>
+ <element name="highlight" tokenid="sprm:CHighlight"/>
+ <element name="u" tokenid="ooxml:EG_RPrBase_u"/>
+ <element name="effect" tokenid="sprm:CSfxText"/>
+ <element name="bdr" tokenid="ooxml:EG_RPrBase_bdr"/>
+ <element name="shd" tokenid="sprm:CShd"/>
+ <element name="fitText" tokenid="ooxml:EG_RPrBase_fitText"/>
+ <element name="vertAlign" tokenid="ooxml:EG_RPrBase_vertAlign"/>
+ <element name="rtl" tokenid="sprm:CFBiDi"/>
+ <element name="cs" tokenid="sprm:CComplexScript"/>
+ <element name="em" tokenid="sprm:CKcd"/>
+ <element name="lang" tokenid="ooxml:EG_RPrBase_lang"/>
+ <element name="eastAsianLayout" tokenid="ooxml:EG_RPrBase_eastAsianLayout"/>
+ <element name="specVanish" tokenid="0x818"/>
+ <element name="oMath" tokenid="ooxml:EG_RPrBase_oMath"/>
+ </resource>
+ <resource name="EG_RPrContent" resource="Properties" tag="character">
+ <element name="rPrChange" tokenid="ooxml:EG_RPrContent_rPrChange"/>
+ </resource>
+ <resource name="CT_RPr" resource="Properties" tag="character">
+ </resource>
+ <resource name="CT_RPrOriginal" resource="Properties" tag="character"/>
+ <resource name="CT_ParaRPrOriginal" resource="Properties" tag="paragraph"/>
+ <resource name="CT_ParaRPr" resource="Properties" tag="redline">
+ <element name="ins" tokenid="ooxml:CT_ParaRPr_ins"/>
+ <element name="del" tokenid="ooxml:CT_ParaRPr_del"/>
+ <element name="rPrChange" tokenid="ooxml:CT_ParaRPr_rPrChange"/>
+ </resource>
+ <resource name="CT_ParaTrackChange" resource="Properties" tag="redline">
+ <action name="start" action="tokenproperty"/>
+ <action name="start" action="propagateCharacterPropertiesAsSet" sendtokenid="ooxml:paratrackchange"/>
+ <action name="start" action="clearProps"/>
+ </resource>
+ <resource name="ST_RubyAlign" resource="List" generated="yes">
+ <value name="center" tokenid="ooxml:Value_wordprocessingml_ST_RubyAlign_center">center</value>
+ <value name="distributeLetter" tokenid="ooxml:Value_wordprocessingml_ST_RubyAlign_distributeLetter">distributeLetter</value>
+ <value name="distributeSpace" tokenid="ooxml:Value_wordprocessingml_ST_RubyAlign_distributeSpace">distributeSpace</value>
+ <value name="left" tokenid="ooxml:Value_wordprocessingml_ST_RubyAlign_left">left</value>
+ <value name="right" tokenid="ooxml:Value_wordprocessingml_ST_RubyAlign_right">right</value>
+ <value name="rightVertical" tokenid="ooxml:Value_wordprocessingml_ST_RubyAlign_rightVertical">rightVertical</value>
+ </resource>
+ <resource name="CT_RubyAlign" resource="Value" generated="yes" tag="character">
+ <attribute name="val" tokenid="ooxml:CT_RubyAlign_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_Lock" resource="List" generated="yes">
+ <value name="sdtLocked" tokenid="ooxml:Value_wordprocessingml_ST_Lock_sdtLocked">sdtLocked</value>
+ <value name="contentLocked" tokenid="ooxml:Value_wordprocessingml_ST_Lock_contentLocked">contentLocked</value>
+ <value name="unlocked" tokenid="ooxml:Value_wordprocessingml_ST_Lock_unlocked">unlocked</value>
+ <value name="sdtContentLocked" tokenid="ooxml:Value_wordprocessingml_ST_Lock_sdtContentLocked">sdtContentLocked</value>
+ </resource>
+ <resource name="CT_Lock" resource="Value" generated="yes" tag="content">
+ <attribute name="val" tokenid="ooxml:CT_Lock_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_SdtDateMappingType" resource="List" generated="yes">
+ <value name="text" tokenid="ooxml:Value_wordprocessingml_ST_SdtDateMappingType_text">text</value>
+ <value name="date" tokenid="ooxml:Value_wordprocessingml_ST_SdtDateMappingType_date">date</value>
+ <value name="dateTime" tokenid="ooxml:Value_wordprocessingml_ST_SdtDateMappingType_dateTime">dateTime</value>
+ </resource>
+ <resource name="CT_SdtDateMappingType" resource="Value" generated="yes" tag="content">
+ <attribute name="val" tokenid="ooxml:CT_SdtDateMappingType_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_CalendarType" resource="List" generated="yes">
+ <value name="gregorian" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_gregorian">gregorian</value>
+ <value name="hijri" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_hijri">hijri</value>
+ <value name="hebrew" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_hebrew">hebrew</value>
+ <value name="taiwan" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_taiwan">taiwan</value>
+ <value name="japan" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_japan">japan</value>
+ <value name="thai" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_thai">thai</value>
+ <value name="korea" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_korea">korea</value>
+ <value name="saka" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_saka">saka</value>
+ <value name="gregorianXlitEnglish" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_gregorianXlitEnglish">gregorianXlitEnglish</value>
+ <value name="gregorianXlitFrench" tokenid="ooxml:Value_wordprocessingml_ST_CalendarType_gregorianXlitFrench">gregorianXlitFrench</value>
+ </resource>
+ <resource name="CT_CalendarType" resource="Value" generated="yes" tag="content">
+ <attribute name="val" tokenid="ooxml:CT_CalendarType_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="CT_SdtContentRun" resource="Properties" tag="content"/>
+ <resource name="CT_Attr" resource="Properties" tag="content">
+ <attribute name="uri" tokenid="ooxml:CT_Attr_uri"/>
+ <attribute name="name" tokenid="ooxml:CT_Attr_name"/>
+ <attribute name="val" tokenid="ooxml:CT_Attr_val"/>
+ </resource>
+ <resource name="CT_CustomXmlRun" resource="Properties" tag="content">
+ <element name="customXmlPr" tokenid="ooxml:CT_CustomXmlRun_customXmlPr"/>
+ <attribute name="uri" tokenid="ooxml:CT_CustomXmlRun_uri"/>
+ <attribute name="element" tokenid="ooxml:CT_CustomXmlRun_element"/>
+ </resource>
+ <resource name="CT_SmartTagRun" resource="Properties" tag="content">
+ <element name="smartTagPr" tokenid="ooxml:CT_SmartTagRun_smartTagPr"/>
+ <attribute name="uri" tokenid="ooxml:CT_SmartTagRun_uri"/>
+ <attribute name="element" tokenid="ooxml:CT_SmartTagRun_element"/>
+ </resource>
+ <resource name="EG_PContent" resource="Properties" tag="content">
+ <element name="fldSimple" tokenid="ooxml:EG_PContent_fldSimple"/>
+ <element name="hyperlink" tokenid="ooxml:EG_PContent_hyperlink"/>
+ <element name="subDoc" tokenid="ooxml:EG_PContent_subDoc"/>
+ </resource>
+ <resource name="CT_P" resource="Stream" tag="content">
+ <action name="start" action="handleLastParagraphInSection"/>
+ <action name="start" action="startParagraphGroup"/>
+ <action name="start" action="setHandle"/>
+ <action name="start" action="sendTableDepth"/>
+ <action name="end" action="endOfParagraph"/>
+ </resource>
+ <resource name="ST_TblWidth" resource="List">
+ <value tokenid="ooxml:Value_ST_TblWidth_nil">nil</value>
+ <value tokenid="ooxml:Value_ST_TblWidth_pct">pct</value>
+ <value tokenid="ooxml:Value_ST_TblWidth_dxa">dxa</value>
+ <value tokenid="ooxml:Value_ST_TblWidth_auto">auto</value>
+ </resource>
+ <resource name="CT_Height" resource="Properties" tag="attribute">
+ <attribute name="val" tokenid="ooxml:CT_Height_val"/>
+ <attribute name="hRule" tokenid="ooxml:CT_Height_hRule"/>
+ </resource>
+ <resource name="CT_TblWidth" resource="Properties" tag="table">
+ <attribute name="w" tokenid="ooxml:CT_TblWidth_w"/>
+ <attribute name="type" tokenid="ooxml:CT_TblWidth_type"/>
+ </resource>
+ <resource name="CT_TblGridCol" resource="Value" tag="table">
+ <attribute name="w" tokenid="ooxml:CT_TblGridCol_w" action="setValue"/>
+ <action name="start" action="setDefaultIntegerValue"/>
+ </resource>
+ <resource name="CT_TblGridBase" resource="Properties" tag="table">
+ <element name="gridCol" tokenid="ooxml:CT_TblGridBase_gridCol"/>
+ </resource>
+ <resource name="CT_TblGrid" resource="Properties" tag="table">
+ <element name="tblGridChange" tokenid="ooxml:CT_TblGrid_tblGridChange"/>
+ <action name="end" action="propagateTableProperties"/>
+ <action name="end" action="clearProps"/>
+ </resource>
+ <resource name="CT_TcBorders" resource="Properties" tag="table">
+ <kind name="table"/>
+ <element name="top" tokenid="ooxml:CT_TcBorders_top"/>
+ <element name="left" tokenid="ooxml:CT_TcBorders_left"/>
+ <element name="bottom" tokenid="ooxml:CT_TcBorders_bottom"/>
+ <element name="right" tokenid="ooxml:CT_TcBorders_right"/>
+ <element name="insideH" tokenid="ooxml:CT_TcBorders_insideH"/>
+ <element name="insideV" tokenid="ooxml:CT_TcBorders_insideV"/>
+ <element name="tl2br" tokenid="ooxml:CT_TcBorders_tl2br"/>
+ <element name="tr2bl" tokenid="ooxml:CT_TcBorders_tr2bl"/>
+ </resource>
+ <resource name="CT_TcMar" resource="Properties" tag="table">
+ <kind name="table"/>
+ <element name="top" tokenid="ooxml:CT_TcMar_top"/>
+ <element name="left" tokenid="ooxml:CT_TcMar_left"/>
+ <element name="bottom" tokenid="ooxml:CT_TcMar_bottom"/>
+ <element name="right" tokenid="ooxml:CT_TcMar_right"/>
+ </resource>
+ <resource name="ST_Merge" resource="List">
+ <value tokenid="ooxml:Value_ST_Merge_continue">continue</value>
+ <value tokenid="ooxml:Value_ST_Merge_restart">restart</value>
+ <default tokenid="ooxml:Value_ST_Merge_continue"/>
+ </resource>
+ <resource name="CT_VMerge" resource="Value" tag="table">
+ <attribute name="val" tokenid="ooxml:CT_VMerge_val" action="setValue"/>
+ </resource>
+ <resource name="CT_HMerge" resource="Value" tag="table">
+ <attribute name="val" tokenid="ooxml:CT_HMerge_val" action="setValue"/>
+ </resource>
+ <resource name="CT_TcPrBase" resource="Properties" tag="table">
+ <kind name="table"/>
+ <element name="cnfStyle" tokenid="ooxml:CT_TcPrBase_cnfStyle"/>
+ <element name="tcW" tokenid="ooxml:CT_TcPrBase_tcW"/>
+ <element name="gridSpan" tokenid="ooxml:CT_TcPrBase_gridSpan"/>
+ <element name="hMerge" tokenid="ooxml:CT_TcPrBase_hMerge"/>
+ <element name="vMerge" tokenid="ooxml:CT_TcPrBase_vMerge"/>
+ <element name="tcBorders" tokenid="ooxml:CT_TcPrBase_tcBorders"/>
+ <element name="shd" tokenid="ooxml:CT_TcPrBase_shd"/>
+ <element name="noWrap" tokenid="ooxml:CT_TcPrBase_noWrap"/>
+ <element name="tcMar" tokenid="ooxml:CT_TcPrBase_tcMar"/>
+ <element name="textDirection" tokenid="ooxml:CT_TcPrBase_textDirection"/>
+ <element name="tcFitText" tokenid="ooxml:CT_TcPrBase_tcFitText"/>
+ <element name="vAlign" tokenid="ooxml:CT_TcPrBase_vAlign"/>
+ <element name="hideMark" tokenid="ooxml:CT_TcPrBase_hideMark"/>
+ </resource>
+ <resource name="CT_TcPr" resource="Properties" tag="table">
+ <element name="tcPrChange" tokenid="ooxml:CT_TcPr_tcPrChange"/>
+ <action name="end" action="propagateCellProperties"/>
+ <action name="end" action="clearProps"/>
+ </resource>
+ <resource name="CT_TcPrInner" resource="Properties" tag="table"/>
+ <resource name="CT_Tc" resource="TextTableCell">
+ <action name="start" action="startCell"/>
+ <action name="end" action="endCell"/>
+ <action name="end" action="sendCellProperties"/>
+ <action name="end" action="endParagraphGroup"/>
+ </resource>
+ <resource name="ST_Cnf" resource="String" generated="yes"/>
+ <resource name="CT_Cnf" resource="Value" generated="yes" tag="content">
+ <attribute name="val" tokenid="ooxml:CT_Cnf_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="CT_TrPrBase" resource="Properties" tag="table">
+ <kind name="table"/>
+ <element name="cnfStyle" tokenid="ooxml:CT_TrPrBase_cnfStyle"/>
+ <element name="divId" tokenid="ooxml:CT_TrPrBase_divId"/>
+ <element name="gridBefore" tokenid="ooxml:CT_TrPrBase_gridBefore"/>
+ <element name="gridAfter" tokenid="ooxml:CT_TrPrBase_gridAfter"/>
+ <element name="wBefore" tokenid="ooxml:CT_TrPrBase_wBefore"/>
+ <element name="wAfter" tokenid="ooxml:CT_TrPrBase_wAfter"/>
+ <element name="cantSplit" tokenid="sprm:TCantSplit"/>
+ <element name="trHeight" tokenid="ooxml:CT_TrPrBase_trHeight"/>
+ <element name="tblHeader" tokenid="ooxml:CT_TrPrBase_tblHeader"/>
+ <element name="tblCellSpacing" tokenid="ooxml:CT_TrPrBase_tblCellSpacing"/>
+ <element name="jc" tokenid="ooxml:CT_TrPrBase_jc"/>
+ <element name="hidden" tokenid="ooxml:CT_TrPrBase_hidden"/>
+ </resource>
+ <resource name="CT_TrPr" resource="Properties" tag="table">
+ <kind name="table"/>
+ <element name="ins" tokenid="ooxml:CT_TrPr_ins"/>
+ <element name="del" tokenid="ooxml:CT_TrPr_del"/>
+ <element name="trPrChange" tokenid="ooxml:CT_TrPr_trPrChange"/>
+ <action name="end" action="propagateRowProperties"/>
+ <action name="end" action="clearProps"/>
+ </resource>
+ <resource name="CT_Row" resource="TextTableRow" tag="table">
+ <action name="start" action="startRow"/>
+ <action name="end" action="sendRowProperties"/>
+ <action name="end" action="sendTableProperties"/>
+ <action name="end" action="endRow"/>
+ </resource>
+ <resource name="ST_TblLayoutType" resource="List" generated="yes">
+ <value name="fixed" tokenid="ooxml:Value_wordprocessingml_ST_TblLayoutType_fixed">fixed</value>
+ <value name="autofit" tokenid="ooxml:Value_wordprocessingml_ST_TblLayoutType_autofit">autofit</value>
+ </resource>
+ <resource name="ST_TblOverlap" resource="List">
+ <value tokenid="ooxml:Value_ST_TblOverlap_never">never</value>
+ <value tokenid="ooxml:Value_ST_TblOverlap_overlap">overlap</value>
+ </resource>
+ <resource name="CT_TblOverlap" resource="Value" tag="table">
+ <attribute name="val" tokenid="ooxml:CT_TblOverlap_val" action="setValue"/>
+ </resource>
+ <resource name="CT_TblCellMar" resource="Properties" tag="table">
+ <element name="top" tokenid="ooxml:CT_TblCellMar_top"/>
+ <element name="left" tokenid="ooxml:CT_TblCellMar_left"/>
+ <element name="bottom" tokenid="ooxml:CT_TblCellMar_bottom"/>
+ <element name="right" tokenid="ooxml:CT_TblCellMar_right"/>
+ </resource>
+ <resource name="CT_TblBorders" resource="Properties" tag="table">
+ <kind name="table"/>
+ <element name="top" tokenid="ooxml:CT_TblBorders_top"/>
+ <element name="left" tokenid="ooxml:CT_TblBorders_left"/>
+ <element name="bottom" tokenid="ooxml:CT_TblBorders_bottom"/>
+ <element name="right" tokenid="ooxml:CT_TblBorders_right"/>
+ <element name="insideH" tokenid="ooxml:CT_TblBorders_insideH"/>
+ <element name="insideV" tokenid="ooxml:CT_TblBorders_insideV"/>
+ </resource>
+ <resource name="CT_TblPrBase" resource="Properties" tag="table">
+ <kind name="table"/>
+ <element name="tblStyle" tokenid="ooxml:CT_TblPrBase_tblStyle"/>
+ <element name="tblpPr" tokenid="ooxml:CT_TblPrBase_tblpPr"/>
+ <element name="tblOverlap" tokenid="ooxml:CT_TblPrBase_tblOverlap"/>
+ <element name="bidiVisual" tokenid="ooxml:CT_TblPrBase_bidiVisual"/>
+ <element name="tblStyleRowBandSize" tokenid="ooxml:CT_TblPrBase_tblStyleRowBandSize"/>
+ <element name="tblStyleColBandSize" tokenid="ooxml:CT_TblPrBase_tblStyleColBandSize"/>
+ <element name="tblW" tokenid="ooxml:CT_TblPrBase_tblW"/>
+ <element name="jc" tokenid="ooxml:CT_TblPrBase_jc"/>
+ <element name="tblCellSpacing" tokenid="ooxml:CT_TblPrBase_tblCellSpacing"/>
+ <element name="tblInd" tokenid="ooxml:CT_TblPrBase_tblInd"/>
+ <element name="tblBorders" tokenid="ooxml:CT_TblPrBase_tblBorders"/>
+ <element name="shd" tokenid="ooxml:CT_TblPrBase_shd"/>
+ <element name="tblLayout" tokenid="ooxml:CT_TblPrBase_tblLayout"/>
+ <element name="tblCellMar" tokenid="ooxml:CT_TblPrBase_tblCellMar"/>
+ <element name="tblLook" tokenid="ooxml:CT_TblPrBase_tblLook"/>
+ </resource>
+ <resource name="CT_TblPr" resource="Properties" tag="table">
+ <kind name="table"/>
+ <element name="tblPrChange" tokenid="ooxml:CT_TblPr_tblPrChange"/>
+ <action name="end" action="propagateTableProperties"/>
+ <action name="end" action="clearProps"/>
+ </resource>
+ <resource name="CT_Tbl" resource="TextTable" tag="table"/>
+ <resource name="ST_FtnPos" resource="List">
+ <value tokenid="ooxml:Value_ST_FtnPos_pageBottom">pageBottom</value>
+ <value tokenid="ooxml:Value_ST_FtnPos_beneathText">beneathText</value>
+ <value tokenid="ooxml:Value_ST_FtnPos_sectEnd">sectEnd</value>
+ <value tokenid="ooxml:Value_ST_FtnPos_docEnd">docEnd</value>
+ </resource>
+ <resource name="CT_FtnPos" resource="Value" tag="reference">
+ <attribute name="val" tokenid="ooxml:CT_FtnPos_val" action="setValue"/>
+ </resource>
+ <resource name="ST_EdnPos" resource="List">
+ <value tokenid="ooxml:Value_ST_EdnPos_sectEnd">sectEnd</value>
+ <value tokenid="ooxml:Value_ST_EdnPos_docEnd">docEnd</value>
+ </resource>
+ <resource name="CT_EdnPos" resource="Value" tag="reference">
+ <attribute name="val" tokenid="ooxml:CT_EdnPos_val" action="setValue"/>
+ </resource>
+ <resource name="CT_NumFmt" resource="Value" tag="numbering">
+ <attribute name="val" tokenid="ooxml:CT_NumFmt_val" action="setValue"/>
+ </resource>
+ <resource name="ST_RestartNumber" resource="List">
+ <value tokenid="ooxml:Value_ST_RestartNumber_continuous">continuous</value>
+ <value tokenid="ooxml:Value_ST_RestartNumber_eachSect">eachSect</value>
+ <value tokenid="ooxml:Value_ST_RestartNumber_eachPage">eachPage</value>
+ </resource>
+ <resource name="CT_NumRestart" resource="Value" tag="numbering">
+ <attribute name="val" tokenid="ooxml:CT_NumRestart_val" action="setValue"/>
+ </resource>
+ <resource name="CT_FtnEdnRef" resource="Properties" tag="reference">
+ <attribute name="customMarkFollows" tokenid="ooxml:CT_FtnEdnRef_customMarkFollows"/>
+ <attribute name="id" tokenid="ooxml:CT_FtnEdnRef_id" action="setXNoteId"/>
+ <action name="end" action="handleXNotes"/>
+ </resource>
+ <resource name="CT_FtnEdnSepRef" resource="Properties" tag="reference">
+ <attribute name="id" tokenid="ooxml:CT_FtnEdnSepRef_id"/>
+ </resource>
+ <resource name="CT_FtnEdn" resource="XNote" tag="reference">
+ <attribute name="type" tokenid="ooxml:CT_FtnEdn_type"/>
+ <attribute name="id" tokenid="ooxml:CT_FtnEdn_id" action="checkId"/>
+ <action name="start" action="propagateCharacterProperties"/>
+ <action name="end" action="endSectionGroup"/>
+ </resource>
+ <resource name="CT_CommentRef" resource="Properties" tag="reference">
+ <action name="end" action="handleComment"/>
+ </resource>
+ <resource name="EG_FtnEdnNumProps" resource="Properties" tag="reference">
+ <element name="numStart" tokenid="ooxml:EG_FtnEdnNumProps_numStart"/>
+ <element name="numRestart" tokenid="ooxml:EG_FtnEdnNumProps_numRestart"/>
+ </resource>
+ <resource name="CT_FtnProps" resource="Properties" tag="reference">
+ <element name="pos" tokenid="ooxml:CT_FtnProps_pos"/>
+ <element name="numFmt" tokenid="ooxml:CT_FtnProps_numFmt"/>
+ </resource>
+ <resource name="CT_EdnProps" resource="Properties" tag="reference">
+ <element name="pos" tokenid="ooxml:CT_EdnProps_pos"/>
+ <element name="numFmt" tokenid="ooxml:CT_EdnProps_numFmt"/>
+ </resource>
+ <resource name="CT_FtnDocProps" resource="Properties" tag="reference">
+ <element name="footnote" tokenid="ooxml:CT_FtnDocProps_footnote"/>
+ </resource>
+ <resource name="CT_EdnDocProps" resource="Properties" tag="reference">
+ <element name="endnote" tokenid="ooxml:CT_EdnDocProps_endnote"/>
+ </resource>
+ <resource name="ST_MailMergeSourceType" resource="List" generated="yes">
+ <value name="database" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_database">database</value>
+ <value name="addressBook" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_addressBook">addressBook</value>
+ <value name="document1" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_document1">document1</value>
+ <value name="document2" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_document2">document2</value>
+ <value name="text" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_text">text</value>
+ <value name="email" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_email">email</value>
+ <value name="native" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_native">native</value>
+ <value name="legacy" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_legacy">legacy</value>
+ <value name="master" tokenid="ooxml:Value_wordprocessingml_ST_MailMergeSourceType_master">master</value>
+ </resource>
+ <resource name="CT_MailMergeSourceType" resource="Value" generated="yes" tag="mailmerge">
+ <attribute name="val" tokenid="ooxml:CT_MailMergeSourceType_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="CT_MailMerge" resource="Properties" tag="mailmerge">
+ <element name="mainDocumentType" tokenid="ooxml:CT_MailMerge_mainDocumentType"/>
+ <element name="linkToQuery" tokenid="ooxml:CT_MailMerge_linkToQuery"/>
+ <element name="dataType" tokenid="ooxml:CT_MailMerge_dataType"/>
+ <element name="connectString" tokenid="ooxml:CT_MailMerge_connectString"/>
+ <element name="query" tokenid="ooxml:CT_MailMerge_query"/>
+ <element name="dataSource" tokenid="ooxml:CT_MailMerge_dataSource"/>
+ <element name="headerSource" tokenid="ooxml:CT_MailMerge_headerSource"/>
+ <element name="doNotSuppressBlankLines" tokenid="ooxml:CT_MailMerge_doNotSuppressBlankLines"/>
+ <element name="destination" tokenid="ooxml:CT_MailMerge_destination"/>
+ <element name="addressFieldName" tokenid="ooxml:CT_MailMerge_addressFieldName"/>
+ <element name="mailSubject" tokenid="ooxml:CT_MailMerge_mailSubject"/>
+ <element name="mailAsAttachment" tokenid="ooxml:CT_MailMerge_mailAsAttachment"/>
+ <element name="viewMergedData" tokenid="ooxml:CT_MailMerge_viewMergedData"/>
+ <element name="activeRecord" tokenid="ooxml:CT_MailMerge_activeRecord"/>
+ <element name="checkErrors" tokenid="ooxml:CT_MailMerge_checkErrors"/>
+ <element name="odso" tokenid="ooxml:CT_MailMerge_odso"/>
+ </resource>
+ <resource name="ST_TargetScreenSz" resource="List" generated="yes">
+ <value name="544x376" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_544x376">544x376</value>
+ <value name="640x480" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_640x480">640x480</value>
+ <value name="720x512" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_720x512">720x512</value>
+ <value name="800x600" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_800x600">800x600</value>
+ <value name="1024x768" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1024x768">1024x768</value>
+ <value name="1152x882" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1152x882">1152x882</value>
+ <value name="1152x900" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1152x900">1152x900</value>
+ <value name="1280x1024" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1280x1024">1280x1024</value>
+ <value name="1600x1200" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1600x1200">1600x1200</value>
+ <value name="1800x1440" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1800x1440">1800x1440</value>
+ <value name="1920x1200" tokenid="ooxml:Value_wordprocessingml_ST_TargetScreenSz_1920x1200">1920x1200</value>
+ </resource>
+ <resource name="CT_TargetScreenSz" resource="Value" generated="yes" tag="settings">
+ <attribute name="val" tokenid="ooxml:CT_TargetScreenSz_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="CT_Compat" resource="Properties" tag="settings">
+ <element name="useSingleBorderforContiguousCells" tokenid="ooxml:CT_Compat_useSingleBorderforContiguousCells"/>
+ <element name="wpJustification" tokenid="ooxml:CT_Compat_wpJustification"/>
+ <element name="noTabHangInd" tokenid="ooxml:CT_Compat_noTabHangInd"/>
+ <element name="noLeading" tokenid="ooxml:CT_Compat_noLeading"/>
+ <element name="spaceForUL" tokenid="ooxml:CT_Compat_spaceForUL"/>
+ <element name="noColumnBalance" tokenid="ooxml:CT_Compat_noColumnBalance"/>
+ <element name="balanceSingleByteDoubleByteWidth" tokenid="ooxml:CT_Compat_balanceSingleByteDoubleByteWidth"/>
+ <element name="noExtraLineSpacing" tokenid="ooxml:CT_Compat_noExtraLineSpacing"/>
+ <element name="doNotLeaveBackslashAlone" tokenid="ooxml:CT_Compat_doNotLeaveBackslashAlone"/>
+ <element name="ulTrailSpace" tokenid="ooxml:CT_Compat_ulTrailSpace"/>
+ <element name="doNotExpandShiftReturn" tokenid="ooxml:CT_Compat_doNotExpandShiftReturn"/>
+ <element name="spacingInWholePoints" tokenid="ooxml:CT_Compat_spacingInWholePoints"/>
+ <element name="lineWrapLikeWord6" tokenid="ooxml:CT_Compat_lineWrapLikeWord6"/>
+ <element name="printBodyTextBeforeHeader" tokenid="ooxml:CT_Compat_printBodyTextBeforeHeader"/>
+ <element name="printColBlack" tokenid="ooxml:CT_Compat_printColBlack"/>
+ <element name="wpSpaceWidth" tokenid="ooxml:CT_Compat_wpSpaceWidth"/>
+ <element name="showBreaksInFrames" tokenid="ooxml:CT_Compat_showBreaksInFrames"/>
+ <element name="subFontBySize" tokenid="ooxml:CT_Compat_subFontBySize"/>
+ <element name="suppressBottomSpacing" tokenid="ooxml:CT_Compat_suppressBottomSpacing"/>
+ <element name="suppressTopSpacing" tokenid="ooxml:CT_Compat_suppressTopSpacing"/>
+ <element name="suppressSpacingAtTopOfPage" tokenid="ooxml:CT_Compat_suppressSpacingAtTopOfPage"/>
+ <element name="suppressTopSpacingWP" tokenid="ooxml:CT_Compat_suppressTopSpacingWP"/>
+ <element name="suppressSpBfAfterPgBrk" tokenid="ooxml:CT_Compat_suppressSpBfAfterPgBrk"/>
+ <element name="swapBordersFacingPages" tokenid="ooxml:CT_Compat_swapBordersFacingPages"/>
+ <element name="convMailMergeEsc" tokenid="ooxml:CT_Compat_convMailMergeEsc"/>
+ <element name="truncateFontHeightsLikeWP6" tokenid="ooxml:CT_Compat_truncateFontHeightsLikeWP6"/>
+ <element name="mwSmallCaps" tokenid="ooxml:CT_Compat_mwSmallCaps"/>
+ <element name="usePrinterMetrics" tokenid="ooxml:CT_Compat_usePrinterMetrics"/>
+ <element name="doNotSuppressParagraphBorders" tokenid="ooxml:CT_Compat_doNotSuppressParagraphBorders"/>
+ <element name="wrapTrailSpaces" tokenid="ooxml:CT_Compat_wrapTrailSpaces"/>
+ <element name="footnoteLayoutLikeWW8" tokenid="ooxml:CT_Compat_footnoteLayoutLikeWW8"/>
+ <element name="shapeLayoutLikeWW8" tokenid="ooxml:CT_Compat_shapeLayoutLikeWW8"/>
+ <element name="alignTablesRowByRow" tokenid="ooxml:CT_Compat_alignTablesRowByRow"/>
+ <element name="forgetLastTabAlignment" tokenid="ooxml:CT_Compat_forgetLastTabAlignment"/>
+ <element name="adjustLineHeightInTable" tokenid="ooxml:CT_Compat_adjustLineHeightInTable"/>
+ <element name="autoSpaceLikeWord95" tokenid="ooxml:CT_Compat_autoSpaceLikeWord95"/>
+ <element name="noSpaceRaiseLower" tokenid="ooxml:CT_Compat_noSpaceRaiseLower"/>
+ <element name="doNotUseHTMLParagraphAutoSpacing" tokenid="ooxml:CT_Compat_doNotUseHTMLParagraphAutoSpacing"/>
+ <element name="layoutRawTableWidth" tokenid="ooxml:CT_Compat_layoutRawTableWidth"/>
+ <element name="layoutTableRowsApart" tokenid="ooxml:CT_Compat_layoutTableRowsApart"/>
+ <element name="useWord97LineBreakRules" tokenid="ooxml:CT_Compat_useWord97LineBreakRules"/>
+ <element name="doNotBreakWrappedTables" tokenid="ooxml:CT_Compat_doNotBreakWrappedTables"/>
+ <element name="doNotSnapToGridInCell" tokenid="ooxml:CT_Compat_doNotSnapToGridInCell"/>
+ <element name="selectFldWithFirstOrLastChar" tokenid="ooxml:CT_Compat_selectFldWithFirstOrLastChar"/>
+ <element name="applyBreakingRules" tokenid="ooxml:CT_Compat_applyBreakingRules"/>
+ <element name="doNotWrapTextWithPunct" tokenid="ooxml:CT_Compat_doNotWrapTextWithPunct"/>
+ <element name="doNotUseEastAsianBreakRules" tokenid="ooxml:CT_Compat_doNotUseEastAsianBreakRules"/>
+ <element name="useWord2002TableStyleRules" tokenid="ooxml:CT_Compat_useWord2002TableStyleRules"/>
+ <element name="growAutofit" tokenid="ooxml:CT_Compat_growAutofit"/>
+ <element name="useFELayout" tokenid="ooxml:CT_Compat_useFELayout"/>
+ <element name="useNormalStyleForList" tokenid="ooxml:CT_Compat_useNormalStyleForList"/>
+ <element name="doNotUseIndentAsNumberingTabStop" tokenid="ooxml:CT_Compat_doNotUseIndentAsNumberingTabStop"/>
+ <element name="useAltKinsokuLineBreakRules" tokenid="ooxml:CT_Compat_useAltKinsokuLineBreakRules"/>
+ <element name="allowSpaceOfSameStyleInTable" tokenid="ooxml:CT_Compat_allowSpaceOfSameStyleInTable"/>
+ <element name="doNotSuppressIndentation" tokenid="ooxml:CT_Compat_doNotSuppressIndentation"/>
+ <element name="doNotAutofitConstrainedTables" tokenid="ooxml:CT_Compat_doNotAutofitConstrainedTables"/>
+ <element name="autofitToFirstFixedWidthCell" tokenid="ooxml:CT_Compat_autofitToFirstFixedWidthCell"/>
+ <element name="underlineTabInNumList" tokenid="ooxml:CT_Compat_underlineTabInNumList"/>
+ <element name="displayHangulFixedWidth" tokenid="ooxml:CT_Compat_displayHangulFixedWidth"/>
+ <element name="splitPgBreakAndParaMark" tokenid="ooxml:CT_Compat_splitPgBreakAndParaMark"/>
+ <element name="doNotVertAlignCellWithSp" tokenid="ooxml:CT_Compat_doNotVertAlignCellWithSp"/>
+ <element name="doNotBreakConstrainedForcedTable" tokenid="ooxml:CT_Compat_doNotBreakConstrainedForcedTable"/>
+ <element name="doNotVertAlignInTxbx" tokenid="ooxml:CT_Compat_doNotVertAlignInTxbx"/>
+ <element name="useAnsiKerningPairs" tokenid="ooxml:CT_Compat_useAnsiKerningPairs"/>
+ <element name="cachedColBalance" tokenid="ooxml:CT_Compat_cachedColBalance"/>
+ </resource>
+ <resource name="CT_DocVar" resource="Properties" tag="document">
+ <attribute name="name" tokenid="ooxml:CT_DocVar_name"/>
+ <attribute name="val" tokenid="ooxml:CT_DocVar_val"/>
+ </resource>
+ <resource name="CT_DocRsids" resource="Properties" tag="redline">
+ <element name="rsidRoot" tokenid="ooxml:CT_DocRsids_rsidRoot"/>
+ <element name="rsid" tokenid="ooxml:CT_DocRsids_rsid"/>
+ </resource>
+ <resource name="ST_CharacterSpacing" resource="List" generated="yes">
+ <value name="doNotCompress" tokenid="ooxml:Value_wordprocessingml_ST_CharacterSpacing_doNotCompress">doNotCompress</value>
+ <value name="compressPunctuation" tokenid="ooxml:Value_wordprocessingml_ST_CharacterSpacing_compressPunctuation">compressPunctuation</value>
+ <value name="compressPunctuationAndJapaneseKana" tokenid="ooxml:Value_wordprocessingml_ST_CharacterSpacing_compressPunctuationAndJapaneseKana">compressPunctuationAndJapaneseKana</value>
+ </resource>
+ <resource name="CT_CharacterSpacing" resource="Value" generated="yes" tag="character">
+ <attribute name="val" tokenid="ooxml:CT_CharacterSpacing_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="CT_SaveThroughXslt" resource="Properties" tag="settings">
+ <attribute name="r:id" tokenid="ooxml:CT_SaveThroughXslt_r_id"/>
+ <attribute name="solutionID" tokenid="ooxml:CT_SaveThroughXslt_solutionID"/>
+ </resource>
+ <resource name="CT_RPrDefault" resource="Properties" tag="character">
+ <element name="rPr" tokenid="ooxml:CT_RPrDefault_rPr"/>
+ </resource>
+ <resource name="CT_PPrDefault" resource="Properties" tag="paragraph">
+ <element name="pPr" tokenid="ooxml:CT_PPrDefault_pPr"/>
+ </resource>
+ <resource name="CT_DocDefaults" resource="Properties" tag="document">
+ <element name="pPrDefault" tokenid="ooxml:CT_DocDefaults_pPrDefault"/>
+ <element name="rPrDefault" tokenid="ooxml:CT_DocDefaults_rPrDefault"/>
+ </resource>
+ <resource name="ST_ColorSchemeIndex" resource="List" generated="yes">
+ <value name="dark1" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_dark1">dark1</value>
+ <value name="light1" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_light1">light1</value>
+ <value name="dark2" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_dark2">dark2</value>
+ <value name="light2" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_light2">light2</value>
+ <value name="accent1" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_accent1">accent1</value>
+ <value name="accent2" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_accent2">accent2</value>
+ <value name="accent3" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_accent3">accent3</value>
+ <value name="accent4" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_accent4">accent4</value>
+ <value name="accent5" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_accent5">accent5</value>
+ <value name="accent6" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_accent6">accent6</value>
+ <value name="hyperlink" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_hyperlink">hyperlink</value>
+ <value name="followedHyperlink" tokenid="ooxml:Value_wordprocessingml_ST_ColorSchemeIndex_followedHyperlink">followedHyperlink</value>
+ </resource>
+ <resource name="CT_ReadingModeInkLockDown" resource="Properties">
+ <attribute name="actualPg" tokenid="ooxml:CT_ReadingModeInkLockDown_actualPg"/>
+ <attribute name="w" tokenid="ooxml:CT_ReadingModeInkLockDown_w"/>
+ <attribute name="h" tokenid="ooxml:CT_ReadingModeInkLockDown_h"/>
+ <attribute name="fontSz" tokenid="ooxml:CT_ReadingModeInkLockDown_fontSz"/>
+ </resource>
+ <resource name="CT_WriteProtection" resource="Properties" tag="document">
+ <attribute name="recommended" tokenid="ooxml:CT_WriteProtection_recommended"/>
+ </resource>
+ <resource name="CT_Settings" resource="PropertyTable" tokenid="ooxml:SETTINGS" tag="settings">
+ <element name="writeProtection" tokenid="ooxml:CT_Settings_writeProtection"/>
+ <element name="view" tokenid="ooxml:CT_Settings_view"/>
+ <element name="zoom" tokenid="ooxml:CT_Settings_zoom"/>
+ <element name="removePersonalInformation" tokenid="ooxml:CT_Settings_removePersonalInformation"/>
+ <element name="removeDateAndTime" tokenid="ooxml:CT_Settings_removeDateAndTime"/>
+ <element name="doNotDisplayPageBoundaries" tokenid="ooxml:CT_Settings_doNotDisplayPageBoundaries"/>
+ <element name="displayBackgroundShape" tokenid="ooxml:CT_Settings_displayBackgroundShape"/>
+ <element name="printPostScriptOverText" tokenid="ooxml:CT_Settings_printPostScriptOverText"/>
+ <element name="printFractionalCharacterWidth" tokenid="ooxml:CT_Settings_printFractionalCharacterWidth"/>
+ <element name="printFormsData" tokenid="ooxml:CT_Settings_printFormsData"/>
+ <element name="embedTrueTypeFonts" tokenid="ooxml:CT_Settings_embedTrueTypeFonts"/>
+ <element name="embedSystemFonts" tokenid="ooxml:CT_Settings_embedSystemFonts"/>
+ <element name="saveSubsetFonts" tokenid="ooxml:CT_Settings_saveSubsetFonts"/>
+ <element name="saveFormsData" tokenid="ooxml:CT_Settings_saveFormsData"/>
+ <element name="mirrorMargins" tokenid="ooxml:CT_Settings_mirrorMargins"/>
+ <element name="alignBordersAndEdges" tokenid="ooxml:CT_Settings_alignBordersAndEdges"/>
+ <element name="bordersDoNotSurroundHeader" tokenid="ooxml:CT_Settings_bordersDoNotSurroundHeader"/>
+ <element name="bordersDoNotSurroundFooter" tokenid="ooxml:CT_Settings_bordersDoNotSurroundFooter"/>
+ <element name="gutterAtTop" tokenid="ooxml:CT_Settings_gutterAtTop"/>
+ <element name="hideSpellingErrors" tokenid="ooxml:CT_Settings_hideSpellingErrors"/>
+ <element name="hideGrammaticalErrors" tokenid="ooxml:CT_Settings_hideGrammaticalErrors"/>
+ <element name="activeWritingStyle" tokenid="ooxml:CT_Settings_activeWritingStyle"/>
+ <element name="proofState" tokenid="ooxml:CT_Settings_proofState"/>
+ <element name="formsDesign" tokenid="ooxml:CT_Settings_formsDesign"/>
+ <element name="attachedTemplate" tokenid="ooxml:CT_Settings_attachedTemplate"/>
+ <element name="linkStyles" tokenid="ooxml:CT_Settings_linkStyles"/>
+ <element name="stylePaneFormatFilter" tokenid="ooxml:CT_Settings_stylePaneFormatFilter"/>
+ <element name="stylePaneSortMethod" tokenid="ooxml:CT_Settings_stylePaneSortMethod"/>
+ <element name="documentType" tokenid="ooxml:CT_Settings_documentType"/>
+ <element name="mailMerge" tokenid="ooxml:CT_Settings_mailMerge"/>
+ <element name="revisionView" tokenid="ooxml:CT_Settings_revisionView"/>
+ <element name="trackRevisions" tokenid="ooxml:CT_Settings_trackRevisions"/>
+ <element name="doNotTrackMoves" tokenid="ooxml:CT_Settings_doNotTrackMoves"/>
+ <element name="doNotTrackFormatting" tokenid="ooxml:CT_Settings_doNotTrackFormatting"/>
+ <element name="documentProtection" tokenid="ooxml:CT_Settings_documentProtection"/>
+ <element name="autoFormatOverride" tokenid="ooxml:CT_Settings_autoFormatOverride"/>
+ <element name="styleLockTheme" tokenid="ooxml:CT_Settings_styleLockTheme"/>
+ <element name="styleLockQFSet" tokenid="ooxml:CT_Settings_styleLockQFSet"/>
+ <element name="defaultTabStop" tokenid="ooxml:CT_Settings_defaultTabStop"/>
+ <element name="autoHyphenation" tokenid="ooxml:CT_Settings_autoHyphenation"/>
+ <element name="consecutiveHyphenLimit" tokenid="ooxml:CT_Settings_consecutiveHyphenLimit"/>
+ <element name="hyphenationZone" tokenid="ooxml:CT_Settings_hyphenationZone"/>
+ <element name="doNotHyphenateCaps" tokenid="ooxml:CT_Settings_doNotHyphenateCaps"/>
+ <element name="showEnvelope" tokenid="ooxml:CT_Settings_showEnvelope"/>
+ <element name="summaryLength" tokenid="ooxml:CT_Settings_summaryLength"/>
+ <element name="clickAndTypeStyle" tokenid="ooxml:CT_Settings_clickAndTypeStyle"/>
+ <element name="defaultTableStyle" tokenid="ooxml:CT_Settings_defaultTableStyle"/>
+ <element name="evenAndOddHeaders" tokenid="ooxml:CT_Settings_evenAndOddHeaders"/>
+ <element name="bookFoldRevPrinting" tokenid="ooxml:CT_Settings_bookFoldRevPrinting"/>
+ <element name="bookFoldPrinting" tokenid="ooxml:CT_Settings_bookFoldPrinting"/>
+ <element name="bookFoldPrintingSheets" tokenid="ooxml:CT_Settings_bookFoldPrintingSheets"/>
+ <element name="drawingGridHorizontalSpacing" tokenid="ooxml:CT_Settings_drawingGridHorizontalSpacing"/>
+ <element name="drawingGridVerticalSpacing" tokenid="ooxml:CT_Settings_drawingGridVerticalSpacing"/>
+ <element name="displayHorizontalDrawingGridEvery" tokenid="ooxml:CT_Settings_displayHorizontalDrawingGridEvery"/>
+ <element name="displayVerticalDrawingGridEvery" tokenid="ooxml:CT_Settings_displayVerticalDrawingGridEvery"/>
+ <element name="doNotUseMarginsForDrawingGridOrigin" tokenid="ooxml:CT_Settings_doNotUseMarginsForDrawingGridOrigin"/>
+ <element name="drawingGridHorizontalOrigin" tokenid="ooxml:CT_Settings_drawingGridHorizontalOrigin"/>
+ <element name="drawingGridVerticalOrigin" tokenid="ooxml:CT_Settings_drawingGridVerticalOrigin"/>
+ <element name="doNotShadeFormData" tokenid="ooxml:CT_Settings_doNotShadeFormData"/>
+ <element name="noPunctuationKerning" tokenid="ooxml:CT_Settings_noPunctuationKerning"/>
+ <element name="characterSpacingControl" tokenid="ooxml:CT_Settings_characterSpacingControl"/>
+ <element name="printTwoOnOne" tokenid="ooxml:CT_Settings_printTwoOnOne"/>
+ <element name="strictFirstAndLastChars" tokenid="ooxml:CT_Settings_strictFirstAndLastChars"/>
+ <element name="noLineBreaksAfter" tokenid="ooxml:CT_Settings_noLineBreaksAfter"/>
+ <element name="noLineBreaksBefore" tokenid="ooxml:CT_Settings_noLineBreaksBefore"/>
+ <element name="savePreviewPicture" tokenid="ooxml:CT_Settings_savePreviewPicture"/>
+ <element name="doNotValidateAgainstSchema" tokenid="ooxml:CT_Settings_doNotValidateAgainstSchema"/>
+ <element name="saveInvalidXml" tokenid="ooxml:CT_Settings_saveInvalidXml"/>
+ <element name="ignoreMixedContent" tokenid="ooxml:CT_Settings_ignoreMixedContent"/>
+ <element name="alwaysShowPlaceholderText" tokenid="ooxml:CT_Settings_alwaysShowPlaceholderText"/>
+ <element name="doNotDemarcateInvalidXml" tokenid="ooxml:CT_Settings_doNotDemarcateInvalidXml"/>
+ <element name="saveXmlDataOnly" tokenid="ooxml:CT_Settings_saveXmlDataOnly"/>
+ <element name="useXSLTWhenSaving" tokenid="ooxml:CT_Settings_useXSLTWhenSaving"/>
+ <element name="saveThroughXslt" tokenid="ooxml:CT_Settings_saveThroughXslt"/>
+ <element name="showXMLTags" tokenid="ooxml:CT_Settings_showXMLTags"/>
+ <element name="alwaysMergeEmptyNamespace" tokenid="ooxml:CT_Settings_alwaysMergeEmptyNamespace"/>
+ <element name="updateFields" tokenid="ooxml:CT_Settings_updateFields"/>
+ <element name="hdrShapeDefaults" tokenid="ooxml:CT_Settings_hdrShapeDefaults"/>
+ <element name="footnotePr" tokenid="ooxml:CT_Settings_footnotePr"/>
+ <element name="endnotePr" tokenid="ooxml:CT_Settings_endnotePr"/>
+ <element name="compat" tokenid="ooxml:CT_Settings_compat"/>
+ <element name="docVars" tokenid="ooxml:CT_Settings_docVars"/>
+ <element name="rsids" tokenid="ooxml:CT_Settings_rsids"/>
+ <element name="uiCompat97To2003" tokenid="ooxml:CT_Settings_uiCompat97To2003"/>
+ <element name="attachedSchema" tokenid="ooxml:CT_Settings_attachedSchema"/>
+ <element name="themeFontLang" tokenid="ooxml:CT_Settings_themeFontLang"/>
+ <element name="clrSchemeMapping" tokenid="ooxml:CT_Settings_clrSchemeMapping"/>
+ <element name="doNotIncludeSubdocsInStats" tokenid="ooxml:CT_Settings_doNotIncludeSubdocsInStats"/>
+ <element name="doNotAutoCompressPictures" tokenid="ooxml:CT_Settings_doNotAutoCompressPictures"/>
+ <element name="forceUpgrade" tokenid="ooxml:CT_Settings_forceUpgrade"/>
+ <element name="captions" tokenid="ooxml:CT_Settings_captions"/>
+ <element name="readModeInkLockDown" tokenid="ooxml:CT_Settings_readModeInkLockDown"/>
+ <element name="smartTagType" tokenid="ooxml:CT_Settings_smartTagType"/>
+ <element name="shapeDefaults" tokenid="ooxml:CT_Settings_shapeDefaults"/>
+ <element name="doNotEmbedSmartTags" tokenid="ooxml:CT_Settings_doNotEmbedSmartTags"/>
+ <element name="decimalSymbol" tokenid="ooxml:CT_Settings_decimalSymbol"/>
+ <element name="listSeparator" tokenid="ooxml:CT_Settings_listSeparator"/>
+ </resource>
+ <resource name="ST_FrameScrollbar" resource="List" generated="yes">
+ <value name="on" tokenid="ooxml:Value_wordprocessingml_ST_FrameScrollbar_on">on</value>
+ <value name="off" tokenid="ooxml:Value_wordprocessingml_ST_FrameScrollbar_off">off</value>
+ <value name="auto" tokenid="ooxml:Value_wordprocessingml_ST_FrameScrollbar_auto">auto</value>
+ </resource>
+ <resource name="CT_FrameScrollbar" resource="Value" generated="yes" tag="frame">
+ <attribute name="val" tokenid="ooxml:CT_FrameScrollbar_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_FrameLayout" resource="List" generated="yes">
+ <value name="rows" tokenid="ooxml:Value_wordprocessingml_ST_FrameLayout_rows">rows</value>
+ <value name="cols" tokenid="ooxml:Value_wordprocessingml_ST_FrameLayout_cols">cols</value>
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_FrameLayout_none">none</value>
+ </resource>
+ <resource name="CT_FrameLayout" resource="Value" generated="yes" tag="frame">
+ <attribute name="val" tokenid="ooxml:CT_FrameLayout_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_LevelSuffix" resource="List" generated="yes">
+ <value name="tab" tokenid="ooxml:Value_wordprocessingml_ST_LevelSuffix_tab">tab</value>
+ <value name="space" tokenid="ooxml:Value_wordprocessingml_ST_LevelSuffix_space">space</value>
+ <value name="nothing" tokenid="ooxml:Value_wordprocessingml_ST_LevelSuffix_nothing">nothing</value>
+ </resource>
+ <resource name="CT_LevelSuffix" resource="Value" generated="yes" tag="numbering">
+ <attribute name="val" tokenid="ooxml:CT_LevelSuffix_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="CT_LevelText" resource="Properties" tag="numbering">
+ <attribute name="val" tokenid="ooxml:CT_LevelText_val"/>
+ <attribute name="null" tokenid="ooxml:CT_LevelText_null"/>
+ </resource>
+ <resource name="CT_LvlLegacy" resource="Properties" tag="numbering">
+ <attribute name="legacy" tokenid="ooxml:CT_LvlLegacy_legacy"/>
+ <attribute name="legacySpace" tokenid="ooxml:CT_LvlLegacy_legacySpace"/>
+ <attribute name="legacyIndent" tokenid="ooxml:CT_LvlLegacy_legacyIndent"/>
+ </resource>
+ <resource name="CT_Lvl" resource="Properties" tag="numbering">
+ <kind name="paragraph"/>
+ <element name="start" tokenid="rtf:ISTARTAT"/>
+ <element name="numFmt" tokenid="rtf:NFC"/>
+ <element name="lvlRestart" tokenid="ooxml:CT_Lvl_lvlRestart"/>
+ <element name="pStyle" tokenid="ooxml:CT_Lvl_pStyle"/>
+ <element name="isLgl" tokenid="rtf:FLEGAL"/>
+ <element name="suff" tokenid="ooxml:CT_Lvl_suff"/>
+ <element name="lvlText" tokenid="ooxml:CT_Lvl_lvlText"/>
+ <element name="lvlPicBulletId" tokenid="ooxml:CT_Lvl_lvlPicBulletId"/>
+ <element name="legacy" tokenid="rtf:FCONVERTED"/>
+ <element name="lvlJc" tokenid="ooxml:CT_Lvl_lvlJc"/>
+ <element name="pPr" tokenid="ooxml:CT_Lvl_pPr"/>
+ <element name="rPr" tokenid="ooxml:CT_Lvl_rPr"/>
+ <attribute name="ilvl" tokenid="ooxml:CT_Lvl_ilvl"/>
+ <attribute name="tplc" tokenid="ooxml:CT_Lvl_tplc"/>
+ <attribute name="tentative" tokenid="ooxml:CT_Lvl_tentative"/>
+ </resource>
+ <resource name="ST_MultiLevelType" resource="List" tag="numbering">
+ <value tokenid="ooxml:Value_ST_MultiLevelType_singleLevel">singleLevel</value>
+ <value tokenid="ooxml:Value_ST_MultiLevelType_multilevel">multilevel</value>
+ <value tokenid="ooxml:Value_ST_MultiLevelType_hybridMultilevel">hybridMultilevel</value>
+ </resource>
+ <resource name="CT_MultiLevelType" resource="Value" tag="numbering">
+ <attribute name="val" tokenid="ooxml:CT_MultiLevelType_val" action="setValue"/>
+ </resource>
+ <resource name="CT_AbstractNum" resource="Properties" tag="numbering">
+ <kind name="paragraph"/>
+ <element name="nsid" tokenid="rtf:LSID"/>
+ <element name="multiLevelType" tokenid="ooxml:CT_AbstractNum_multiLevelType"/>
+ <element name="tmpl" tokenid="rtf:TPLC"/>
+ <element name="name" tokenid="ooxml:CT_AbstractNum_name"/>
+ <element name="styleLink" tokenid="ooxml:CT_AbstractNum_styleLink"/>
+ <element name="numStyleLink" tokenid="ooxml:CT_AbstractNum_numStyleLink"/>
+ <element name="lvl" tokenid="ooxml:CT_AbstractNum_lvl"/>
+ <attribute name="abstractNumId" tokenid="ooxml:CT_AbstractNum_abstractNumId"/>
+ </resource>
+ <resource name="CT_NumLvl" resource="Properties" tag="numbering">
+ <kind name="paragraph"/>
+ <element name="startOverride" tokenid="ooxml:CT_NumLvl_startOverride"/>
+ <element name="lvl" tokenid="ooxml:CT_NumLvl_lvl"/>
+ <attribute name="ilvl" tokenid="ooxml:CT_NumLvl_ilvl"/>
+ </resource>
+ <resource name="CT_Num" resource="Properties" tag="numbering">
+ <kind name="paragraph"/>
+ <element name="abstractNumId" tokenid="ooxml:CT_Num_abstractNumId"/>
+ <element name="lvlOverride" tokenid="ooxml:CT_Num_lvlOverride"/>
+ <attribute name="numId" tokenid="ooxml:CT_Num_numId"/>
+ </resource>
+ <resource name="CT_Numbering" resource="PropertyTable" tokenid="ooxml:NUMBERING" tag="numbering">
+ <kind name="paragraph"/>
+ <element name="numPicBullet" tokenid="ooxml:CT_Numbering_numPicBullet"/>
+ <element name="abstractNum" tokenid="ooxml:CT_Numbering_abstractNum"/>
+ <element name="num" tokenid="ooxml:CT_Numbering_num"/>
+ <element name="numIdMacAtCleanup" tokenid="ooxml:CT_Numbering_numIdMacAtCleanup"/>
+ </resource>
+ <resource name="ST_TblStyleOverrideType" resource="List">
+ <value tokenid="1">wholeTable</value>
+ <value tokenid="2">firstRow</value>
+ <value tokenid="3">lastRow</value>
+ <value tokenid="4">firstCol</value>
+ <value tokenid="5">lastCol</value>
+ <value tokenid="6">band1Vert</value>
+ <value tokenid="7">band2Vert</value>
+ <value tokenid="8">band1Horz</value>
+ <value tokenid="9">band2Horz</value>
+ <value tokenid="10">neCell</value>
+ <value tokenid="11">nwCell</value>
+ <value tokenid="12">seCell</value>
+ <value tokenid="13">swCell</value>
+ </resource>
+ <resource name="CT_Style_tblStylePr" resource="Properties" tag="style">
+ <element name="pPr" tokenid="ooxml:CT_PPrBase"/>
+ <element name="rPr" tokenid="ooxml:EG_RPrBase"/>
+ <element name="tblPr" tokenid="ooxml:CT_TblPrBase"/>
+ <element name="trPr" tokenid="ooxml:CT_TrPrBase"/>
+ <element name="tcPr" tokenid="ooxml:CT_TcPrBase"/>
+ <attribute name="type" tokenid="ooxml:CT_TblStyleOverrideType"/>
+ </resource>
+ <resource name="ST_StyleType" resource="List">
+ <value tokenid="1">paragraph</value>
+ <value tokenid="2">character</value>
+ <value tokenid="3">table</value>
+ <value tokenid="4">numbering</value>
+ </resource>
+ <resource name="CT_Style" resource="Properties" tag="style">
+ <element name="name" tokenid="ooxml:CT_Style_name"/>
+ <element name="aliases" tokenid="ooxml:CT_Style_aliases"/>
+ <element name="basedOn" tokenid="ooxml:CT_Style_basedOn"/>
+ <element name="next" tokenid="ooxml:CT_Style_next"/>
+ <element name="link" tokenid="ooxml:CT_Style_link"/>
+ <element name="autoRedefine" tokenid="ooxml:CT_Style_autoRedefine"/>
+ <element name="hidden" tokenid="ooxml:CT_Style_hidden"/>
+ <element name="uiPriority" tokenid="ooxml:CT_Style_uiPriority"/>
+ <element name="semiHidden" tokenid="ooxml:CT_Style_semiHidden"/>
+ <element name="unhideWhenUsed" tokenid="ooxml:CT_Style_unhideWhenUsed"/>
+ <element name="qFormat" tokenid="ooxml:CT_Style_qFormat"/>
+ <element name="locked" tokenid="ooxml:CT_Style_locked"/>
+ <element name="personal" tokenid="ooxml:CT_Style_personal"/>
+ <element name="personalCompose" tokenid="ooxml:CT_Style_personalCompose"/>
+ <element name="personalReply" tokenid="ooxml:CT_Style_personalReply"/>
+ <element name="rsid" tokenid="ooxml:CT_Style_rsid"/>
+ <element name="pPr" tokenid="ooxml:CT_Style_pPr"/>
+ <element name="rPr" tokenid="ooxml:CT_Style_rPr"/>
+ <element name="tblPr" tokenid="ooxml:CT_Style_tblPr"/>
+ <element name="trPr" tokenid="ooxml:CT_Style_trPr"/>
+ <element name="tcPr" tokenid="ooxml:CT_Style_tcPr"/>
+ <element name="tblStylePr" tokenid="ooxml:CT_Style_tblStylePr"/>
+ <attribute name="type" tokenid="ooxml:CT_Style_type"/>
+ <attribute name="styleId" tokenid="ooxml:CT_Style_styleId"/>
+ <attribute name="default" tokenid="ooxml:CT_Style_default"/>
+ <attribute name="customStyle" tokenid="ooxml:CT_Style_customStyle"/>
+ </resource>
+ <resource name="CT_Styles" resource="Table" tokenid="rtf:STYLESHEET" tag="style"/>
+ <resource name="ST_Panose" resource="Hex"/>
+ <resource name="CT_Panose" resource="Value" tag="font">
+ <attribute name="val" tokenid="ooxml:CT_Panose_val" action="setValue"/>
+ <action name="start" action="setDefaultHexValue"/>
+ </resource>
+ <resource name="ST_FontFamily" resource="List">
+ <value tokenid="ooxml:Value_ST_FontFamily_decorative">decorative</value>
+ <value tokenid="ooxml:Value_ST_FontFamily_modern">modern</value>
+ <value tokenid="ooxml:Value_ST_FontFamily_roman">roman</value>
+ <value tokenid="ooxml:Value_ST_FontFamily_script">script</value>
+ <value tokenid="ooxml:Value_ST_FontFamily_swiss">swiss</value>
+ <value tokenid="ooxml:Value_ST_FontFamily_auto">auto</value>
+ </resource>
+ <resource name="CT_FontFamily" resource="Value" tag="font">
+ <attribute name="val" tokenid="ooxml:CT_FontFamily_val" action="setValue"/>
+ </resource>
+ <resource name="ST_Pitch" resource="List">
+ <value tokenid="ooxml:Value_ST_Pitch_fixed">fixed</value>
+ <value tokenid="ooxml:Value_ST_Pitch_variable">variable</value>
+ <value tokenid="ooxml:Value_ST_Pitch_default">default</value>
+ </resource>
+ <resource name="CT_Pitch" resource="Value" tag="font">
+ <attribute name="val" tokenid="ooxml:CT_Pitch_val" action="setValue"/>
+ </resource>
+ <resource name="CT_FontSig" resource="Properties" tag="font">
+ <attribute name="usb0" tokenid="ooxml:CT_FontSig_usb0"/>
+ <attribute name="usb1" tokenid="ooxml:CT_FontSig_usb1"/>
+ <attribute name="usb2" tokenid="ooxml:CT_FontSig_usb2"/>
+ <attribute name="usb3" tokenid="ooxml:CT_FontSig_usb3"/>
+ <attribute name="csb0" tokenid="ooxml:CT_FontSig_csb0"/>
+ <attribute name="csb1" tokenid="ooxml:CT_FontSig_csb1"/>
+ </resource>
+ <resource name="CT_FontRel" resource="Properties" tag="font">
+ <attribute name="fontKey" tokenid="ooxml:CT_FontRel_fontKey"/>
+ <attribute name="subsetted" tokenid="ooxml:CT_FontRel_subsetted"/>
+ </resource>
+ <resource name="CT_Font" resource="Properties" tag="font">
+ <kind name="character"/>
+ <element name="altName" tokenid="ooxml:CT_Font_altName"/>
+ <element name="panose1" tokenid="ooxml:CT_Font_panose1"/>
+ <element name="charset" tokenid="ooxml:CT_Font_charset"/>
+ <element name="family" tokenid="ooxml:CT_Font_family"/>
+ <element name="notTrueType" tokenid="ooxml:CT_Font_notTrueType"/>
+ <element name="pitch" tokenid="ooxml:CT_Font_pitch"/>
+ <element name="sig" tokenid="ooxml:CT_Font_sig"/>
+ <element name="embedRegular" tokenid="ooxml:CT_Font_embedRegular"/>
+ <element name="embedBold" tokenid="ooxml:CT_Font_embedBold"/>
+ <element name="embedItalic" tokenid="ooxml:CT_Font_embedItalic"/>
+ <element name="embedBoldItalic" tokenid="ooxml:CT_Font_embedBoldItalic"/>
+ <attribute name="name" tokenid="ooxml:CT_Font_name"/>
+ </resource>
+ <resource name="CT_FontsList" resource="Table" tokenid="rtf:FONTTABLE" tag="font"/>
+ <resource name="EG_RunLevelElts" resource="Stream" tag="character">
+ <element name="proofErr" tokenid="ooxml:EG_RunLevelElts_proofErr"/>
+ <element name="permStart" tokenid="ooxml:EG_RunLevelElts_permStart"/>
+ <element name="permEnd" tokenid="ooxml:EG_RunLevelElts_permEnd"/>
+ <element name="ins" tokenid="ooxml:EG_RunLevelElts_ins">
+ <action name="newProperty" id="ooxml:ins" value="1"/>
+ </element>
+ <element name="del" tokenid="ooxml:EG_RunLevelElts_del"/>
+ <element name="moveFrom" tokenid="ooxml:EG_RunLevelElts_moveFrom"/>
+ <element name="moveTo" tokenid="ooxml:EG_RunLevelElts_moveTo"/>
+ </resource>
+ <resource name="CT_Body" resource="Stream" tag="content">
+ <action name="start" action="startSectionGroup"/>
+ <!--
+ <action name="start" action="footnoteSeparator"/>
+ <action name="start" action="footnoteCont"/>
+ <action name="start" action="endnoteSeparator"/>
+ <action name="start" action="endnoteCont"/>
+-->
+ <action name="end" action="endCharacterGroup"/>
+ <action name="end" action="endParagraphGroup"/>
+ <action name="end" action="endSectionGroup"/>
+ </resource>
+ <resource xmlns:v="urn:schemas-microsoft-com:vml" name="CT_ShapeDefaults" resource="Properties" tag="shape">
+ <element name="v:fill" tokenid="ooxml:CT_ShapeDefaults_v_fill"/>
+ <element name="v:stroke" tokenid="ooxml:CT_ShapeDefaults_v_stroke"/>
+ <element name="v:textbox" tokenid="ooxml:CT_ShapeDefaults_v_textbox"/>
+ <element name="v:shadow" tokenid="ooxml:CT_ShapeDefaults_v_shadow"/>
+ <element name="colormru" tokenid="ooxml:CT_ShapeDefaults_colormru"/>
+ <element name="colormenu" tokenid="ooxml:CT_ShapeDefaults_colormenu"/>
+ <attribute name="spidmax" tokenid="ooxml:CT_ShapeDefaults_spidmax"/>
+ <attribute name="style" tokenid="ooxml:CT_ShapeDefaults_style"/>
+ <attribute name="fill" tokenid="ooxml:CT_ShapeDefaults_fill"/>
+ <attribute name="fillcolor" tokenid="ooxml:CT_ShapeDefaults_fillcolor"/>
+ <attribute name="stroke" tokenid="ooxml:CT_ShapeDefaults_stroke"/>
+ <attribute name="strokecolor" tokenid="ooxml:CT_ShapeDefaults_strokecolor"/>
+ <attribute name="allowincell" tokenid="ooxml:CT_ShapeDefaults_allowincell"/>
+ </resource>
+ <resource name="CT_Comments" resource="Stream" tag="content">
+ <action name="start" action="startSectionGroup"/>
+ <action name="end" action="endSectionGroup"/>
+ </resource>
+ <resource name="CT_Footnotes" resource="Stream" tag="reference"/>
+ <resource name="footnotes" resource="Stream" tag="reference"/>
+ <resource name="CT_Endnotes" resource="Stream" tag="reference"/>
+ <resource name="endnotes" resource="Stream" tag="reference"/>
+ <resource name="CT_SmartTagType" resource="Properties" tag="content">
+ <attribute name="namespaceuri" tokenid="ooxml:CT_SmartTagType_namespaceuri"/>
+ <attribute name="name" tokenid="ooxml:CT_SmartTagType_name"/>
+ <attribute name="url" tokenid="ooxml:CT_SmartTagType_url"/>
+ </resource>
+ <resource name="ST_ThemeColor" resource="List">
+ <value tokenid="ooxml:Value_St_ThemeColor_dark1">dark1</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_light1">light1</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_dark2">dark2</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_light2">light2</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_accent1">accent1</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_accent2">accent2</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_accent3">accent3</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_accent4">accent4</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_accent5">accent5</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_accent6">accent6</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_hyperlink">hyperlink</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_followedHyperlink">followedHyperlink</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_none">none</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_background1">background1</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_text1">text1</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_background2">background2</value>
+ <value tokenid="ooxml:Value_St_ThemeColor_text2">text2</value>
+ </resource>
+ <resource name="ST_DocPartBehavior" resource="List" generated="yes">
+ <value name="content" tokenid="ooxml:Value_wordprocessingml_ST_DocPartBehavior_content">content</value>
+ <value name="p" tokenid="ooxml:Value_wordprocessingml_ST_DocPartBehavior_p">p</value>
+ <value name="pg" tokenid="ooxml:Value_wordprocessingml_ST_DocPartBehavior_pg">pg</value>
+ </resource>
+ <resource name="CT_DocPartBehavior" resource="Value" generated="yes" tag="document">
+ <attribute name="val" tokenid="ooxml:CT_DocPartBehavior_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_DocPartType" resource="List" generated="yes">
+ <value name="none" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_none">none</value>
+ <value name="normal" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_normal">normal</value>
+ <value name="autoExp" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_autoExp">autoExp</value>
+ <value name="toolbar" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_toolbar">toolbar</value>
+ <value name="speller" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_speller">speller</value>
+ <value name="formFld" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_formFld">formFld</value>
+ <value name="bbPlcHdr" tokenid="ooxml:Value_wordprocessingml_ST_DocPartType_bbPlcHdr">bbPlcHdr</value>
+ </resource>
+ <resource name="CT_DocPartType" resource="Value" generated="yes" tag="document">
+ <attribute name="val" tokenid="ooxml:CT_DocPartType_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="ST_DocPartGallery" resource="List" generated="yes">
+ <value name="placeholder" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_placeholder">placeholder</value>
+ <value name="any" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_any">any</value>
+ <value name="default" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_default">default</value>
+ <value name="docParts" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_docParts">docParts</value>
+ <value name="coverPg" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_coverPg">coverPg</value>
+ <value name="eq" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_eq">eq</value>
+ <value name="ftrs" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_ftrs">ftrs</value>
+ <value name="hdrs" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_hdrs">hdrs</value>
+ <value name="pgNum" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_pgNum">pgNum</value>
+ <value name="tbls" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_tbls">tbls</value>
+ <value name="watermarks" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_watermarks">watermarks</value>
+ <value name="autoTxt" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_autoTxt">autoTxt</value>
+ <value name="txtBox" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_txtBox">txtBox</value>
+ <value name="pgNumT" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_pgNumT">pgNumT</value>
+ <value name="pgNumB" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_pgNumB">pgNumB</value>
+ <value name="pgNumMargins" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_pgNumMargins">pgNumMargins</value>
+ <value name="tblOfContents" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_tblOfContents">tblOfContents</value>
+ <value name="bib" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_bib">bib</value>
+ <value name="custQuickParts" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custQuickParts">custQuickParts</value>
+ <value name="custCoverPg" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custCoverPg">custCoverPg</value>
+ <value name="custEq" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custEq">custEq</value>
+ <value name="custFtrs" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custFtrs">custFtrs</value>
+ <value name="custHdrs" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custHdrs">custHdrs</value>
+ <value name="custPgNum" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custPgNum">custPgNum</value>
+ <value name="custTbls" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custTbls">custTbls</value>
+ <value name="custWatermarks" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custWatermarks">custWatermarks</value>
+ <value name="custAutoTxt" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custAutoTxt">custAutoTxt</value>
+ <value name="custTxtBox" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custTxtBox">custTxtBox</value>
+ <value name="custPgNumT" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custPgNumT">custPgNumT</value>
+ <value name="custPgNumB" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custPgNumB">custPgNumB</value>
+ <value name="custPgNumMargins" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custPgNumMargins">custPgNumMargins</value>
+ <value name="custTblOfContents" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custTblOfContents">custTblOfContents</value>
+ <value name="custBib" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custBib">custBib</value>
+ <value name="custom1" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custom1">custom1</value>
+ <value name="custom2" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custom2">custom2</value>
+ <value name="custom3" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custom3">custom3</value>
+ <value name="custom4" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custom4">custom4</value>
+ <value name="custom5" tokenid="ooxml:Value_wordprocessingml_ST_DocPartGallery_custom5">custom5</value>
+ </resource>
+ <resource name="CT_DocPartGallery" resource="Value" generated="yes" tag="document">
+ <attribute name="val" tokenid="ooxml:CT_DocPartGallery_val" action="setValue"/>
+ <action name="start" action="setDefaultStringValue"/>
+ </resource>
+ <resource name="CT_DocPartName" resource="Properties" tag="document">
+ <attribute name="val" tokenid="ooxml:CT_DocPartName_val"/>
+ <attribute name="decorated" tokenid="ooxml:CT_DocPartName_decorated"/>
+ </resource>
+ <resource name="settings" resource="Stream" tag="settings">
+ <element name="settings" tokenid="ooxml:settings_settings"/>
+ </resource>
+ <resource name="fonts" resource="Stream" tag="font">
+ <element name="fonts" tokenid="rtf:FONTTABLE"/>
+ </resource>
+ <resource name="numbering" resource="Stream" tag="numbering">
+ <element name="numbering" tokenid="ooxml:NUMBERING"/>
+ </resource>
+ <resource name="styles" resource="Stream" tag="style">
+ <element name="styles" tokenid="rtf:STYLESHEET"/>
+ </resource>
+ <resource name="ST_CaptionPos" resource="List" generated="yes">
+ <value name="above" tokenid="ooxml:Value_wordprocessingml_ST_CaptionPos_above">above</value>
+ <value name="below" tokenid="ooxml:Value_wordprocessingml_ST_CaptionPos_below">below</value>
+ <value name="left" tokenid="ooxml:Value_wordprocessingml_ST_CaptionPos_left">left</value>
+ <value name="right" tokenid="ooxml:Value_wordprocessingml_ST_CaptionPos_right">right</value>
+ </resource>
+ <resource name="CT_Caption" resource="Properties" tag="content">
+ <attribute name="name" tokenid="ooxml:CT_Caption_name"/>
+ <attribute name="pos" tokenid="ooxml:CT_Caption_pos"/>
+ <attribute name="chapNum" tokenid="ooxml:CT_Caption_chapNum"/>
+ <attribute name="heading" tokenid="ooxml:CT_Caption_heading"/>
+ <attribute name="noLabel" tokenid="ooxml:CT_Caption_noLabel"/>
+ <attribute name="numFmt" tokenid="ooxml:CT_Caption_numFmt"/>
+ <attribute name="sep" tokenid="ooxml:CT_Caption_sep"/>
+ </resource>
+ <resource name="CT_AutoCaption" resource="Properties" tag="content">
+ <attribute name="name" tokenid="ooxml:CT_AutoCaption_name"/>
+ <attribute name="caption" tokenid="ooxml:CT_AutoCaption_caption"/>
+ </resource>
+ <resource name="CT_AutoCaptions" resource="Properties" tag="content">
+ <element name="autoCaption" tokenid="ooxml:CT_AutoCaptions_autoCaption"/>
+ </resource>
+ <resource name="CT_Captions" resource="Properties" tag="content">
+ <element name="caption" tokenid="ooxml:CT_Captions_caption"/>
+ <element name="autoCaptions" tokenid="ooxml:CT_Captions_autoCaptions"/>
+ </resource>
+ <resource name="CT_DocumentBase" resource="Properties" tag="content">
+ <element name="background" tokenid="ooxml:CT_DocumentBase_background"/>
+ </resource>
+ <resource name="CT_Document" resource="Stream" tag="content"/>
+ <resource name="CT_GlossaryDocument" resource="Stream" tag="content"/>
+ <resource name="document" resource="Stream" tag="content"/>
+ <resource name="glossaryDocument" resource="Stream" tag="content"/>
+ </namespace>
+</model>
diff --git a/writerfilter/source/ooxml/modelcleanup b/writerfilter/source/ooxml/modelcleanup
new file mode 100755
index 000000000000..25651aa343a2
--- /dev/null
+++ b/writerfilter/source/ooxml/modelcleanup
@@ -0,0 +1,3 @@
+#!/bin/sh
+(xsltproc modelcleanup.xsl model.xml | xmllint --format - > model.xml.tmp) && \
+mv model.xml.tmp model.xml
diff --git a/writerfilter/source/ooxml/modelcleanup.xsl b/writerfilter/source/ooxml/modelcleanup.xsl
new file mode 100644
index 000000000000..d7a9aec40100
--- /dev/null
+++ b/writerfilter/source/ooxml/modelcleanup.xsl
@@ -0,0 +1,304 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ exclude-result-prefixes = "xalan"
+ xml:indent="true">
+ <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="no"/>
+
+
+ <xsl:key name="resources"
+ match="resource[not(@generated)]" use="@name" />
+
+ <xsl:template name="generateresource">
+ <xsl:param name="resource"/>
+ <xsl:element name="resource">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="resource">
+ <xsl:value-of select="$resource"/>
+ </xsl:attribute>
+ <xsl:attribute name="generated">
+ <xsl:text>yes</xsl:text>
+ </xsl:attribute>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:key name="nsaliases" match="//namespace-alias" use="@name"/>
+
+ <xsl:template name="resourcevalues">
+ <xsl:variable name="definename" select="@name"/>
+ <xsl:variable name="namespace" select="key('nsaliases', ancestor::namespace/rng:grammar/@ns)/@alias"/>
+ <xsl:element name="resource">
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="resource">List</xsl:attribute>
+ <xsl:attribute name="generated">yes</xsl:attribute>
+ <xsl:for-each select=".//rng:value">
+ <xsl:element name="value">
+ <xsl:attribute name="name">
+ <xsl:value-of select="translate(., '-+ ,', 'mp__')"/>
+ </xsl:attribute>
+ <xsl:attribute name="tokenid">
+ <xsl:text>ooxml:Value_</xsl:text>
+ <xsl:value-of select="translate($namespace, '-', '_')"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="$definename"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="translate(., '-+ ,', 'mp__')"/>
+ </xsl:attribute>
+ <xsl:value-of select="."/>
+ </xsl:element>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template name="typeofdefine">
+ <xsl:for-each select="rng:data">
+ <xsl:choose>
+ <xsl:when test="@type='base64Binary'">
+ <xsl:text>String</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type='boolean'">
+ <xsl:text>Boolean</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type='byte'">
+ <xsl:text>Integer</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type='dateTime'">
+ <xsl:text>String</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type='decimal'">
+ <xsl:text>Integer</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type='float'">
+ <xsl:text>Float</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type='hexBinary'">
+ <xsl:text>Hex</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type='int'">
+ <xsl:text>Integer</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type='integer'">
+ <xsl:text>Integer</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type='positiveInteger'">
+ <xsl:text>Integer</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type='string'">
+ <xsl:text>String</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type='token'">
+ <xsl:text>Integer</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type='unsignedInt'">
+ <xsl:text>Integer</xsl:text>
+ </xsl:when>
+ <xsl:when test="@type='unsignedLong'">
+ <xsl:text>Integer</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>Unknown</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="typeofattribute">
+ <xsl:for-each select="rng:ref">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:for-each select="ancestor::namespace/rng:grammar/rng:define[@name=$name]">
+ <xsl:call-template name="typeofdefine"/>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:template>
+
+ <xsl:template name="generatevalueresource">
+ <xsl:variable name="name" select="@name"/>
+ <resource>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="resource">Value</xsl:attribute>
+ <xsl:attribute name="generated">yes</xsl:attribute>
+ <xsl:for-each select=".//rng:attribute">
+ <xsl:variable name="type">
+ <xsl:choose>
+ <xsl:when test="rng:ref[@name='ST_OnOff']">
+ <xsl:text>Boolean</xsl:text>
+ </xsl:when>
+ <xsl:when test="rng:text">
+ <xsl:text>String</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="typeofattribute"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <attribute>
+ <xsl:attribute name="name">
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="tokenid">
+ <xsl:text>ooxml:</xsl:text>
+ <xsl:value-of select="$name"/>
+ <xsl:text>_</xsl:text>
+ <xsl:value-of select="@name"/>
+ </xsl:attribute>
+ <xsl:attribute name="action">
+ <xsl:text>setValue</xsl:text>
+ </xsl:attribute>
+ </attribute>
+ <xsl:if test="string-length($type) > 0">
+ <action name="start">
+ <xsl:attribute name="action">
+ <xsl:text>setDefault</xsl:text>
+ <xsl:value-of select="$type"/>
+ <xsl:text>Value</xsl:text>
+ </xsl:attribute>
+ </action>
+ </xsl:if>
+ </xsl:for-each>
+ </resource>
+ </xsl:template>
+
+ <xsl:template match="namespace">
+ <xsl:variable name="nsid" select="generate-id(.)"/>
+ <xsl:element name="namespace">
+ <xsl:copy-of select="@*"/>
+ <xsl:copy-of select=".//start"/>
+ <xsl:copy-of select="./rng:grammar"/>
+
+ <xsl:for-each select=".//rng:define">
+ <xsl:variable name="resources" select="key('resources', @name)[generate-id(ancestor::namespace) = $nsid]"/>
+ <xsl:copy-of select="$resources"/>
+ <xsl:if test="count($resources) = 0">
+ <xsl:if test="substring(@name, 1, 3) = 'CT_'">
+ <xsl:if test="./rng:attribute[@name='val']">
+ <xsl:call-template name="generatevalueresource"/>
+ </xsl:if>
+ </xsl:if>
+ <xsl:if test="substring(@name, 1, 3) = 'ST_'">
+ <xsl:if test="./rng:data[@type='int']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Integer</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='integer']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Integer</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='long']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Integer</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='unsignedInt']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Integer</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='unsignedLong']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Integer</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='boolean']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Boolean</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='token']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">String</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='string']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">String</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='dateTime']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">String</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:data[@type='hexBinary']">
+ <xsl:call-template name="generateresource">
+ <xsl:with-param name="resource">Hex</xsl:with-param>
+ </xsl:call-template>
+ </xsl:if>
+ <xsl:if test="./rng:list">
+ <xsl:call-template name="resourcevalues"/>
+ </xsl:if>
+ </xsl:if>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="namespace-alias">
+ <namespace-alias>
+ <xsl:for-each select="@*">
+ <xsl:copy-of select="."/>
+ </xsl:for-each>
+ </namespace-alias>
+ </xsl:template>
+
+ <xsl:template match="token">
+ <token>
+ <xsl:for-each select="@*">
+ <xsl:copy-of select="."/>
+ </xsl:for-each>
+ </token>
+ </xsl:template>
+
+ <xsl:template match="fasttoken">
+ <xsl:copy-of select="."/>
+ </xsl:template>
+
+ <xsl:template match="/">
+ <model>
+ <xsl:apply-templates select=".//namespace-alias">
+ <xsl:sort select="@id" data-type="number"/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select=".//token"/>
+ <xsl:apply-templates select=".//fasttoken"/>
+ <xsl:apply-templates select=".//namespace"/>
+ </model>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/modelpreprocess.xsl b/writerfilter/source/ooxml/modelpreprocess.xsl
new file mode 100644
index 000000000000..0b898e63f933
--- /dev/null
+++ b/writerfilter/source/ooxml/modelpreprocess.xsl
@@ -0,0 +1,225 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="xml" />
+
+ <xsl:key name="namespace-aliases" match="//namespace-alias" use="@name"/>
+
+ <xsl:template match="/">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template name="prefixfromurl">
+ <xsl:param name="url"/>
+ <xsl:variable name="prefix" select="key('namespace-aliases', $url)/@alias"/>
+ <xsl:choose>
+ <xsl:when test="string-length($prefix) > 0">
+ <xsl:value-of select="$prefix"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="translate(substring-after($url, 'http://'), '/.', '__')"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="prefixforgrammar">
+ <xsl:variable name="ns" select="ancestor::namespace/rng:grammar/@ns"/>
+ <xsl:variable name="prefix" select="key('namespace-aliases', $ns)/@alias"/>
+ <xsl:choose>
+ <xsl:when test="string-length($prefix) > 0">
+ <xsl:value-of select="$prefix"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="prefixfromurl">
+ <xsl:with-param name="url" select="$ns"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="nsforgrammar">
+ <xsl:value-of select="ancestor::namespace/rng:grammar/@ns"/>
+ </xsl:template>
+
+ <xsl:template match="rng:element[@name|./rng:anyName] | rng:attribute[@name] | element | attribute">
+ <xsl:variable name="prefix">
+ <xsl:choose>
+ <xsl:when test="contains(@name, ':')">
+ <xsl:variable name="myname" select="@name"/>
+ <xsl:call-template name="prefixfromurl">
+ <xsl:with-param name="url" select="string(namespace::*[local-name(.) = substring-before($myname, ':')])"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="name(.)='attribute'">
+ <xsl:if test="ancestor::namespace/rng:grammar/@attributeFormDefault='qualified'">
+ <xsl:call-template name="prefixforgrammar"/>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="prefixforgrammar"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="ns">
+ <xsl:choose>
+ <xsl:when test="contains(@name, ':')">
+ <xsl:variable name="myname" select="@name"/>
+ <xsl:value-of select="string(namespace::*[local-name(.) = substring-before($myname, ':')])"/>
+ </xsl:when>
+ <xsl:when test="name(.)='attribute'">
+ <xsl:if test="ancestor::rng:grammar/@attributeFormDefault='qualified'">
+ <xsl:call-template name="nsforgrammar"/>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="nsforgrammar"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="localname">
+ <xsl:choose>
+ <xsl:when test="contains(@name, ':')">
+ <xsl:value-of select="substring-after(@name, ':')"/>
+ </xsl:when>
+ <xsl:when test="./rng:anyName">
+ <xsl:text>FAST_TOKENS_END</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@name"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:attribute name="enumname">
+ <xsl:if test="string-length($prefix) > 0">
+ <xsl:value-of select="$prefix"/>
+ <xsl:text>:</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$localname"/>
+ </xsl:attribute>
+ <xsl:attribute name="qname">
+ <xsl:if test="string-length($ns) > 0">
+ <xsl:value-of select="$ns"/>
+ <xsl:text>:</xsl:text>
+ </xsl:if>
+ <xsl:value-of select="$localname"/>
+ </xsl:attribute>
+ <xsl:attribute name="prefix">
+ <xsl:value-of select="$prefix"/>
+ </xsl:attribute>
+ <xsl:attribute name="localname">
+ <xsl:value-of select="$localname"/>
+ </xsl:attribute>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="rng:grammar">
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:attribute name="application">
+ <xsl:value-of select="substring-before(substring-after(@ns, 'http://schemas.openxmlformats.org/'), '/')"/>
+ </xsl:attribute>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="node()|@*">
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="model">
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="rng:define|rng:ref">
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:attribute name="classfordefine">
+ <xsl:variable name="name" select="@name"/>
+ <xsl:choose>
+ <xsl:when test="(starts-with(@name, 'CT_') or starts-with(@name, 'EG_') or starts-with(@name, 'AG_'))">1</xsl:when>
+ <xsl:when test="ancestor::namespace//start[@name=$name]">1</xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template match="namespace">
+ <xsl:variable name="ns" select=".//rng:grammar/@ns"/>
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:attribute name="namespacealias">
+ <xsl:value-of select="key('namespace-aliases', $ns)/@alias"/>
+ </xsl:attribute>
+ <xsl:attribute name="prefix"><xsl:value-of select="translate(substring-after($ns, 'http://schemas.openxmlformats.org/'), '/-', '__')"/></xsl:attribute>
+ <xsl:apply-templates/>
+ </xsl:copy>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/namespaceids.xsl b/writerfilter/source/ooxml/namespaceids.xsl
new file mode 100644
index 000000000000..4a1f3b2ba381
--- /dev/null
+++ b/writerfilter/source/ooxml/namespaceids.xsl
@@ -0,0 +1,100 @@
+<!--
+
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:UML = 'org.omg.xmi.namespace.UML' xml:space="default">
+ <xsl:output method="text" />
+ <xsl:param name="prefix"/>
+
+ <xsl:include href="factorytools.xsl"/>
+
+<xsl:template name="namespaceids">
+ <xsl:for-each select="//namespace-alias">
+ <xsl:text>
+const sal_uInt32 </xsl:text>
+<xsl:call-template name="namespaceid"/>
+<xsl:text> = </xsl:text>
+<xsl:value-of select="@id"/>
+<xsl:text>;</xsl:text>
+ </xsl:for-each>
+</xsl:template>
+
+ <xsl:template match="/">
+ <out xml:space="preserve">
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_NAMESPACESIDS_HXX
+#define INCLUDED_OOXML_NAMESPACESIDS_HXX
+
+#include &lt;map&gt;
+#include &lt;vector&gt;
+#include &lt;boost/shared_ptr.hpp&gt;
+#include &lt;string&gt;
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+
+namespace writerfilter {
+namespace ooxml {
+using namespace ::std;
+using namespace ::com::sun::star;
+</xsl:text>
+<xsl:call-template name="namespaceids"/>
+<xsl:text>
+
+}}
+#endif //INCLUDED_OOXML_NAMESPACESIDS_HXX&#xa;</xsl:text></out></xsl:template>
+
+ <xsl:template match="*"/>
+</xsl:stylesheet>
diff --git a/writerfilter/source/ooxml/nostatus.xsl b/writerfilter/source/ooxml/nostatus.xsl
new file mode 100644
index 000000000000..e2e113c6a602
--- /dev/null
+++ b/writerfilter/source/ooxml/nostatus.xsl
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<xsl:output method="text"/>
+
+<xsl:template match="/">
+ <xsl:for-each select="/stage3">
+ <xsl:for-each select="attribute|element">
+ <xsl:for-each select="file[nostatus]">
+ <xsl:value-of select="@name"/>
+ <xsl:text>:</xsl:text>
+ <xsl:value-of select="@line"/>
+ <xsl:text>&#xa;</xsl:text>
+ </xsl:for-each>
+ </xsl:for-each>
+ </xsl:for-each>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/ooxmlLoggers.hxx b/writerfilter/source/ooxml/ooxmlLoggers.hxx
new file mode 100644
index 000000000000..54191244b968
--- /dev/null
+++ b/writerfilter/source/ooxml/ooxmlLoggers.hxx
@@ -0,0 +1,41 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_OOXML_LOGGERS_HXX
+#define INCLUDED_OOXML_LOGGERS_HXX
+
+#ifdef DEBUG
+
+#include <resourcemodel/TagLogger.hxx>
+
+namespace writerfilter {
+ namespace ooxml {
+ extern TagLogger::Pointer_t debug_logger;
+ }
+}
+#endif
+#endif // INCLUDED_OOXML_LOGGERS_HXX
diff --git a/writerfilter/source/ooxml/qnametostr.xsl b/writerfilter/source/ooxml/qnametostr.xsl
new file mode 100644
index 000000000000..1c0a706df56d
--- /dev/null
+++ b/writerfilter/source/ooxml/qnametostr.xsl
@@ -0,0 +1,132 @@
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ xmlns:UML = 'org.omg.xmi.namespace.UML'
+ exclude-result-prefixes = "xalan"
+ xml:space="default">
+ <xsl:output method="text" />
+
+ <xsl:include href="factorytools.xsl"/>
+
+ <!--
+ Generates mapping from tokenids to strings. (DEBUG)
+ -->
+ <xsl:template name="qnametostr">
+ <xsl:text>
+void QNameToString::init_ooxml()
+{
+ /* ooxml */
+ </xsl:text>
+ <xsl:for-each select="//@tokenid">
+ <xsl:if test="generate-id(.) = generate-id(key('tokenids', .)[1]) and contains(., 'ooxml:')">
+ <xsl:text>
+ mMap[</xsl:text>
+ <xsl:call-template name="idtoqname">
+ <xsl:with-param name="id" select="."/>
+ </xsl:call-template>
+ <xsl:text>] = "</xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>";</xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+}
+ </xsl:text>
+ </xsl:template>
+
+ <xsl:template name="ooxmlidstoxml">
+ <xsl:text>
+void ooxmlsprmidsToXML(::std::ostream &amp; out)
+{</xsl:text>
+ <xsl:for-each select="//@tokenid">
+ <xsl:if test="contains(., 'ooxml:') and generate-id(.) = generate-id(key('tokenids', .)[1]) and ancestor::element">
+ <xsl:text>
+ out &lt;&lt; "&lt;theid name=\"</xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>\"&gt;</xsl:text>
+ <xsl:value-of select="90000 + position()"/>
+ <xsl:text>&lt;/theid&gt;" &lt;&lt; endl; </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+}</xsl:text>
+ <xsl:text>
+void ooxmlidsToXML(::std::ostream &amp; out)
+{</xsl:text>
+ <xsl:for-each select="//@tokenid">
+ <xsl:if test="contains(., 'ooxml:') and generate-id(.) = generate-id(key('tokenids', .)[1]) and ancestor::attribute">
+ <xsl:text>
+ out &lt;&lt; "&lt;theid name=\"</xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>\"&gt;</xsl:text>
+ <xsl:value-of select="90000 + position()"/>
+ <xsl:text>&lt;/theid&gt;" &lt;&lt; endl; </xsl:text>
+ </xsl:if>
+ </xsl:for-each>
+ <xsl:text>
+}</xsl:text>
+ </xsl:template>
+
+ <xsl:template match="/">
+ <xsl:call-template name="qnametostr"/>
+ <xsl:call-template name="ooxmlidstoxml"/>
+ </xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/resourceids.xsl b/writerfilter/source/ooxml/resourceids.xsl
new file mode 100644
index 000000000000..23ee6ffaad60
--- /dev/null
+++ b/writerfilter/source/ooxml/resourceids.xsl
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*************************************************************************
+ *
+ DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+
+ Copyright 2000, 2010 Oracle and/or its affiliates.
+
+ OpenOffice.org - a multi-platform office productivity suite
+
+ This file is part of OpenOffice.org.
+
+ OpenOffice.org is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License version 3
+ only, as published by the Free Software Foundation.
+
+ OpenOffice.org is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License version 3 for more details
+ (a copy is included in the LICENSE file that accompanied this code).
+
+ You should have received a copy of the GNU Lesser General Public License
+ version 3 along with OpenOffice.org. If not, see
+ <http://www.openoffice.org/license.html>
+ for a copy of the LGPLv3 License.
+
+ ************************************************************************/
+
+-->
+<xsl:stylesheet
+ version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
+ xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"
+ xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"
+ xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"
+ xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"
+ xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"
+ xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"
+ xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
+ xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"
+ xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"
+ xmlns:math="http://www.w3.org/1998/Math/MathML"
+ xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"
+ xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"
+ xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0"
+ xmlns:ooo="http://openoffice.org/2004/office"
+ xmlns:ooow="http://openoffice.org/2004/writer"
+ xmlns:oooc="http://openoffice.org/2004/calc"
+ xmlns:dom="http://www.w3.org/2001/xml-events"
+ xmlns:xforms="http://www.w3.org/2002/xforms"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:rng="http://relaxng.org/ns/structure/1.0"
+ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
+ xmlns:xalan="http://xml.apache.org/xalan"
+ xmlns:UML = 'org.omg.xmi.namespace.UML'
+ exclude-result-prefixes = "xalan"
+ xml:space="default">
+ <xsl:output method="text" />
+
+ <xsl:include href="factorytools.xsl"/>
+
+ <!--
+ Generates contant definitions for tokenids.
+ -->
+ <xsl:template name="defineooxmlids">
+ <xsl:text>
+namespace NS_ooxml
+{</xsl:text>
+<xsl:for-each select="//@tokenid|//@sendtokenid">
+ <xsl:if test="contains(., 'ooxml:') and generate-id(.) = generate-id(key('tokenids', .)[1])">
+ <xsl:text>
+ const Id LN_</xsl:text>
+ <xsl:value-of select="substring-after(., 'ooxml:')"/>
+ <xsl:text> = </xsl:text>
+ <xsl:value-of select="90000 + position()"/>
+ <xsl:text>;</xsl:text>
+ </xsl:if>
+</xsl:for-each>
+}
+ </xsl:template>
+
+ <xsl:template match="/">
+ <out>
+ <xsl:call-template name="licenseheader"/>
+ <xsl:text>
+#ifndef INCLUDED_OOXML_RESOURCEIDS_HXX
+#define INCLUDED_OOXML_RESOURCEIDS_HXX
+
+#include &lt;resourcemodel/WW8ResourceModel.hxx&gt;
+
+namespace writerfilter {
+ </xsl:text>
+ <xsl:call-template name="defineooxmlids"/>
+ <xsl:text>
+
+}
+#endif // INCLUDED_OOXML_RESOURCEIDS_HXX&#xa;</xsl:text></out></xsl:template>
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/rngtocxx b/writerfilter/source/ooxml/rngtocxx
new file mode 100755
index 000000000000..8b75d658f981
--- /dev/null
+++ b/writerfilter/source/ooxml/rngtocxx
@@ -0,0 +1,32 @@
+#!/bin/sh
+xalan -xsl modelpreprocess.xsl -in model.xml > model_processed.xml
+xalan -xsl resourcestokens.xsl -in model_processed.xml > OOXMLtokens.hxx
+xalan -xsl resources.xsl -in model_processed.xml > OOXMLresources.hxx
+xalan -xsl resourcesimpl.xsl -in model_processed.xml > OOXMLresources.cxx
+xalan -xsl resourcesimpl_dml-baseStylesheet.xsl -in model_processed.xml > OOXMLresources_dml-baseStylesheet.cxx
+xalan -xsl resourcesimpl_dml-baseTypes.xsl -in model_processed.xml > OOXMLresources_dml-baseTypes.cxx
+xalan -xsl resourcesimpl_dml-chartDrawing.xsl -in model_processed.xml > OOXMLresources_dml-chartDrawing.cxx
+xalan -xsl resourcesimpl_dml-documentProperties.xsl -in model_processed.xml > OOXMLresources_dml-documentProperties.cxx
+xalan -xsl resourcesimpl_dml-graphicalObject.xsl -in model_processed.xml > OOXMLresources_dml-graphicalObject.cxx
+xalan -xsl resourcesimpl_dml-shape3DCamera.xsl -in model_processed.xml > OOXMLresources_dml-shape3DCamera.cxx
+xalan -xsl resourcesimpl_dml-shape3DLighting.xsl -in model_processed.xml > OOXMLresources_dml-shape3DLighting.cxx
+xalan -xsl resourcesimpl_dml-shape3DScene.xsl -in model_processed.xml > OOXMLresources_dml-shape3DScene.cxx
+xalan -xsl resourcesimpl_dml-shape3DStyles.xsl -in model_processed.xml > OOXMLresources_dml-shape3DStyles.cxx
+xalan -xsl resourcesimpl_dml-shapeEffects.xsl -in model_processed.xml > OOXMLresources_dml-shapeEffects.cxx
+xalan -xsl resourcesimpl_dml-shapeGeometry.xsl -in model_processed.xml > OOXMLresources_dml-shapeGeometry.cxx
+xalan -xsl resourcesimpl_dml-shapeLineProperties.xsl -in model_processed.xml > OOXMLresources_dml-shapeLineProperties.cxx
+xalan -xsl resourcesimpl_dml-shapeProperties.xsl -in model_processed.xml > OOXMLresources_dml-shapeProperties.cxx
+xalan -xsl resourcesimpl_dml-styleDefaults.xsl -in model_processed.xml > OOXMLresources_dml-styleDefaults.cxx
+xalan -xsl resourcesimpl_dml-stylesheet.xsl -in model_processed.xml > OOXMLresources_dml-stylesheet.cxx
+xalan -xsl resourcesimpl_dml-textCharacter.xsl -in model_processed.xml > OOXMLresources_dml-textCharacter.cxx
+xalan -xsl resourcesimpl_dml-wordprocessingDrawing.xsl -in model_processed.xml > OOXMLresources_dml-wordprocessingDrawing.cxx
+xalan -xsl resourcesimpl_shared-math.xsl -in model_processed.xml > OOXMLresources_shared-math.cxx
+xalan -xsl resourcesimpl_shared-relationshipReference.xsl -in model_processed.xml > OOXMLresources_shared-relationshipReference.cxx
+xalan -xsl resourcesimpl_sml-customXmlMappings.xsl -in model_processed.xml > OOXMLresources_sml-customXmlMappings.cxx
+xalan -xsl resourcesimpl_wml.xsl -in model_processed.xml > OOXMLresources_wml.cxx
+xalan -xsl tokenmapinit.xsl -in model_processed.xml > TokenMapInit.cxx
+xalan -xsl valuesimpl.xsl -in model_processed.xml > OOXMLvalues.cxx
+xalan -xsl qnametostr.xsl -in model_processed.xml > qnametostr.tmp
+xalan -xsl resourceids.xsl -in model_processed.xml > ../../inc/ooxml/resourceids.hxx
+xalan -xsl gperfattributes.xsl -in model_processed.xml | gperf -t -E -S1 -LC++ > gperfattributes.hxx
+xalan -xsl gperfelements.xsl -in model_processed.xml | gperf -t -E -S1 -LC++ > gperfelements.hxx
diff --git a/writerfilter/source/ooxml/status.sh b/writerfilter/source/ooxml/status.sh
new file mode 100644
index 000000000000..c36ad0d65a37
--- /dev/null
+++ b/writerfilter/source/ooxml/status.sh
@@ -0,0 +1,24 @@
+#!/bin/bash
+
+SEARCHIN=$SRC_ROOT/writerfilter/source/dmapper
+
+(
+echo '<?xml version="1.0"?>'
+echo "<stage1>"
+
+xsltproc analyzemodel.xsl model.xml | tail -n +2
+
+find $SEARCHIN -name "*.cxx" -exec grep -nH -A 1 "case NS_" {} \; |
+grep -v "//.*case NS_" |
+sed 's#'$SEARCHIN'##' |
+sed 's#\(^[^:]*\):\([0-9]*\):#<qname file="\1" line="\2"#' |
+sed 's#[/* ]*case \(NS_.*\):.*# qname="\1"/>#' |
+sed 's#.*WRITERFILTERSTATUS: done: \([0-9]*\), planned: \([0-9.]*\), spent: \([0-9.]*\).*#<status done="\1" planned="\2" spent="\3"/>#' |
+sed 's#.*WRITERFILTERSTATUS:.*#<status done="100"/>#' |
+sed 's#^.*-[0-9][0-9]*-.*$#<nostatus/>#' |
+grep -v "^--"
+
+echo "</stage1>"
+) |
+xsltproc analyzestage2.xsl - |
+xsltproc analyzestage3.xsl -
diff --git a/writerfilter/source/ooxml/todo.xsl b/writerfilter/source/ooxml/todo.xsl
new file mode 100644
index 000000000000..80431ea90487
--- /dev/null
+++ b/writerfilter/source/ooxml/todo.xsl
@@ -0,0 +1,29 @@
+<?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">
+
+<xsl:output method="xml" indent="yes"/>
+
+<xsl:template match="/">
+ <todo>
+ <xsl:for-each select="/stage3">
+ <xsl:for-each select="attribute|element">
+ <xsl:choose>
+ <xsl:when test="@qname and @resource='Properties' and not(file)">
+ <xsl:copy-of select="."/>
+ </xsl:when>
+ <xsl:when test="@qname and file/status[number(@done) &lt; 100 and number(@planned) &gt; 0]">
+ <xsl:copy>
+ <xsl:copy-of select="@*"/>
+ <xsl:copy-of select="file[status[number(@done) &lt; 100 and number(@planned) &gt; 0]]"/>
+ </xsl:copy>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:for-each>
+ </xsl:for-each>
+ </todo>
+</xsl:template>
+
+</xsl:stylesheet> \ No newline at end of file
diff --git a/writerfilter/source/ooxml/tokenxmlfooter b/writerfilter/source/ooxml/tokenxmlfooter
new file mode 100644
index 000000000000..6f664070c0dd
--- /dev/null
+++ b/writerfilter/source/ooxml/tokenxmlfooter
@@ -0,0 +1 @@
+</model>
diff --git a/writerfilter/source/ooxml/tokenxmlheader b/writerfilter/source/ooxml/tokenxmlheader
new file mode 100644
index 000000000000..25a92439af63
--- /dev/null
+++ b/writerfilter/source/ooxml/tokenxmlheader
@@ -0,0 +1 @@
+<model>
diff --git a/writerfilter/source/resourcemodel/Fraction.cxx b/writerfilter/source/resourcemodel/Fraction.cxx
new file mode 100644
index 000000000000..c50668a7db03
--- /dev/null
+++ b/writerfilter/source/resourcemodel/Fraction.cxx
@@ -0,0 +1,150 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <resourcemodel/Fraction.hxx>
+
+namespace writerfilter {
+namespace resourcemodel {
+
+sal_uInt32 gcd(sal_uInt32 a, sal_uInt32 b)
+{
+ if (a == 0 || b == 0)
+ return a | b;
+
+ sal_uInt32 nShift = 0;
+ while (((a | b) & 1) == 0)
+ {
+ a >>= 1;
+ b >>= 1;
+ ++nShift;
+ }
+
+ while ((a & 1) == 0)
+ a >>= 1;
+
+ do
+ {
+ while ((b & 1) == 0)
+ b >>= 1;
+
+ if (a < b)
+ {
+ b -= a;
+ }
+ else
+ {
+ sal_uInt32 nDiff = a - b;
+ a = b;
+ b = nDiff;
+ }
+
+ b >>= 1;
+ }
+ while (b != 0);
+
+ return a << nShift;
+}
+
+sal_uInt32 lcm(sal_Int32 a, sal_Int32 b)
+{
+ return abs(a * b) / gcd(abs(a), abs(b));
+}
+
+Fraction::Fraction(sal_Int32 nNumerator, sal_Int32 nDenominator)
+{
+ init(nNumerator, nDenominator);
+}
+
+Fraction::Fraction(const Fraction & a, const Fraction & b)
+{
+ init(a.mnNumerator * b.mnDenominator, a.mnDenominator * b.mnNumerator);
+}
+
+Fraction::~Fraction()
+{
+}
+
+void Fraction::init(sal_Int32 nNumerator, sal_Int32 nDenominator)
+{
+ sal_uInt32 nGCD = gcd(nNumerator, nDenominator);
+
+ mnNumerator = nNumerator/ nGCD;
+ mnDenominator = nDenominator / nGCD;
+}
+
+void Fraction::assign(const Fraction & rFraction)
+{
+ init(rFraction.mnNumerator, rFraction.mnDenominator);
+}
+
+Fraction Fraction::inverse() const
+{
+ return Fraction(mnDenominator, mnNumerator);
+}
+
+Fraction Fraction::operator + (const Fraction & rFraction) const
+{
+ sal_uInt32 nLCM = lcm(mnDenominator, rFraction.mnDenominator);
+
+ return Fraction(mnNumerator * nLCM / mnDenominator + rFraction.mnNumerator * nLCM / rFraction.mnDenominator, nLCM);
+}
+
+Fraction Fraction::operator - (const Fraction & rFraction) const
+{
+ sal_uInt32 nLCM = lcm(mnDenominator, rFraction.mnDenominator);
+
+ return Fraction(mnNumerator * nLCM / mnDenominator - rFraction.mnNumerator * nLCM / rFraction.mnDenominator, nLCM);
+}
+
+Fraction Fraction::operator * (const Fraction & rFraction) const
+{
+ return Fraction(mnNumerator * rFraction.mnNumerator, mnDenominator * rFraction.mnDenominator);
+}
+
+Fraction Fraction::operator / (const Fraction & rFraction) const
+{
+ return *this * rFraction.inverse();
+}
+
+Fraction Fraction::operator = (const Fraction & rFraction)
+{
+ assign(rFraction);
+
+ return *this;
+}
+
+Fraction::operator sal_Int32() const
+{
+ return mnNumerator / mnDenominator;
+}
+
+Fraction::operator float() const
+{
+ return static_cast<float>(mnNumerator) / static_cast<float>(mnDenominator);
+}
+
+}}
diff --git a/writerfilter/source/resourcemodel/LoggedResources.cxx b/writerfilter/source/resourcemodel/LoggedResources.cxx
new file mode 100644
index 000000000000..f60b48b82b5b
--- /dev/null
+++ b/writerfilter/source/resourcemodel/LoggedResources.cxx
@@ -0,0 +1,322 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <rtl/ustrbuf.hxx>
+#include <resourcemodel/LoggedResources.hxx>
+#include <resourcemodel/QNameToString.hxx>
+
+namespace writerfilter
+{
+
+// class: LoggedResourcesHelper
+
+LoggedResourcesHelper::LoggedResourcesHelper(TagLogger::Pointer_t pLogger, const string & sPrefix)
+: mpLogger(pLogger), msPrefix(sPrefix)
+{
+}
+
+LoggedResourcesHelper::~LoggedResourcesHelper()
+{
+}
+
+void LoggedResourcesHelper::startElement(const string & sElement)
+{
+ mpLogger->startElement(msPrefix + "." + sElement);
+}
+
+void LoggedResourcesHelper::endElement(const string & sElement)
+{
+ mpLogger->endElement(msPrefix + "." + sElement);
+}
+
+void LoggedResourcesHelper::chars(const ::rtl::OUString & rChars)
+{
+ mpLogger->chars(rChars);
+}
+
+void LoggedResourcesHelper::chars(const string & rChars)
+{
+ mpLogger->chars(rChars);
+}
+
+void LoggedResourcesHelper::attribute(const string & rName, const string & rValue)
+{
+ mpLogger->attribute(rName, rValue);
+}
+
+void LoggedResourcesHelper::attribute(const string & rName, sal_uInt32 nValue)
+{
+ mpLogger->attribute(rName, nValue);
+}
+
+void LoggedResourcesHelper::setPrefix(const string & rPrefix)
+{
+ msPrefix = rPrefix;
+}
+
+// class: LoggedStream
+
+LoggedStream::LoggedStream(TagLogger::Pointer_t pLogger, const string & sPrefix)
+: mHelper(pLogger, sPrefix)
+{
+}
+
+LoggedStream::~LoggedStream()
+{
+}
+
+void LoggedStream::startSectionGroup()
+{
+#ifdef DEBUG_LOGGING
+ mHelper.startElement("section");
+#endif
+
+ lcl_startSectionGroup();
+}
+
+void LoggedStream::endSectionGroup()
+{
+ lcl_endSectionGroup();
+
+#ifdef DEBUG_LOGGING
+ mHelper.endElement("section");
+#endif
+}
+
+void LoggedStream::startParagraphGroup()
+{
+#ifdef DEBUG_LOGGING
+ mHelper.startElement("paragraph");
+#endif
+
+ lcl_startParagraphGroup();
+}
+
+void LoggedStream::endParagraphGroup()
+{
+ lcl_endParagraphGroup();
+
+#ifdef DEBUG_LOGGING
+ mHelper.endElement("paragraph");
+#endif
+}
+
+
+void LoggedStream::startCharacterGroup()
+{
+#ifdef DEBUG_LOGGING
+ mHelper.startElement("charactergroup");
+#endif
+
+ lcl_startCharacterGroup();
+}
+
+void LoggedStream::endCharacterGroup()
+{
+ lcl_endCharacterGroup();
+
+#ifdef DEBUG_LOGGING
+ mHelper.endElement("charactergroup");
+#endif
+}
+
+void LoggedStream::startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape )
+{
+#ifdef DEBUG_LOGGING
+ mHelper.startElement("shape");
+#endif
+
+ lcl_startShape(xShape);
+}
+
+void LoggedStream::endShape()
+{
+ lcl_endShape();
+
+#ifdef DEBUG_LOGGING
+ mHelper.endElement("shape");
+#endif
+}
+
+void LoggedStream::text(const sal_uInt8 * data, size_t len)
+{
+#ifdef DEBUG_LOGGING
+ mHelper.startElement("text");
+
+ ::rtl::OUString sText( (const sal_Char*) data, len, RTL_TEXTENCODING_MS_1252 );
+
+ mHelper.startElement("data");
+ mHelper.chars(sText);
+ mHelper.endElement("data");
+#endif
+
+ lcl_text(data, len);
+
+#ifdef DEBUG_LOGGING
+ mHelper.endElement("text");
+#endif
+}
+
+void LoggedStream::utext(const sal_uInt8 * data, size_t len)
+{
+#ifdef DEBUG_LOGGING
+ mHelper.startElement("utext");
+ mHelper.startElement("data");
+
+ ::rtl::OUString sText;
+ ::rtl::OUStringBuffer aBuffer = ::rtl::OUStringBuffer(len);
+ aBuffer.append( (const sal_Unicode *) data, len);
+ sText = aBuffer.makeStringAndClear();
+
+ mHelper.chars(sText);
+
+ mHelper.endElement("data");
+#endif
+
+ lcl_utext(data, len);
+
+#ifdef DEBUG_LOGGING
+ mHelper.endElement("utext");
+#endif
+}
+
+void LoggedStream::props(writerfilter::Reference<Properties>::Pointer_t ref)
+{
+#ifdef DEBUG_LOGGING
+ mHelper.startElement("props");
+#endif
+
+ lcl_props(ref);
+
+#ifdef DEBUG_LOGGING
+ mHelper.endElement("props");
+#endif
+}
+
+void LoggedStream::table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
+{
+#ifdef DEBUG_LOGGING
+ mHelper.startElement("table");
+ mHelper.attribute("name", (*QNameToString::Instance())(name));
+#endif
+
+ lcl_table(name, ref);
+
+#ifdef DEBUG_LOGGING
+ mHelper.endElement("table");
+#endif
+}
+
+void LoggedStream::substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref)
+{
+#ifdef DEBUG_LOGGING
+ mHelper.startElement("substream");
+ mHelper.attribute("name", (*QNameToString::Instance())(name));
+#endif
+
+ lcl_substream(name, ref);
+
+#ifdef DEBUG_LOGGING
+ mHelper.endElement("substream");
+#endif
+}
+
+void LoggedStream::info(const string & _info)
+{
+#ifdef DEBUG_LOGGING
+ mHelper.startElement("info");
+ mHelper.attribute("text", _info);
+#endif
+
+ lcl_info(_info);
+
+#ifdef DEBUG_LOGGING
+ mHelper.endElement("info");
+#endif
+}
+
+// class LoggedProperties
+LoggedProperties::LoggedProperties(TagLogger::Pointer_t pLogger, const string & sPrefix)
+: mHelper(pLogger, sPrefix)
+{
+}
+
+LoggedProperties::~LoggedProperties()
+{
+}
+
+void LoggedProperties::attribute(Id name, Value & val)
+{
+#ifdef DEBUG_LOGGING
+ mHelper.startElement("attribute");
+ mHelper.attribute("name", (*QNameToString::Instance())(name));
+ mHelper.attribute("value", val.toString());
+ mHelper.endElement("attribute");
+#endif
+
+ lcl_attribute(name, val);
+}
+
+void LoggedProperties::sprm(Sprm & _sprm)
+{
+#ifdef DEBUG_LOGGING
+ mHelper.startElement("sprm");
+ mHelper.attribute("name", (*QNameToString::Instance())(_sprm.getId()));
+ mHelper.chars(sprm.toString());
+#endif
+
+ lcl_sprm(_sprm);
+
+#ifdef DEBUG_LOGGING
+ mHelper.endElement("sprm");
+#endif
+}
+
+LoggedTable::LoggedTable(TagLogger::Pointer_t pLogger, const string & sPrefix)
+: mHelper(pLogger, sPrefix)
+{
+}
+
+LoggedTable::~LoggedTable()
+{
+}
+
+void LoggedTable::entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref)
+{
+#ifdef DEBUG_LOGGING
+ mHelper.startElement("entry");
+ mHelper.attribute("pos", pos);
+#endif
+
+ lcl_entry(pos, ref);
+
+#ifdef DEBUG_LOGGING
+ mHelper.endElement("entry");
+#endif
+}
+
+}
diff --git a/writerfilter/source/resourcemodel/Protocol.cxx b/writerfilter/source/resourcemodel/Protocol.cxx
new file mode 100644
index 000000000000..51d12eb4f2d6
--- /dev/null
+++ b/writerfilter/source/resourcemodel/Protocol.cxx
@@ -0,0 +1,218 @@
+/*************************************************************************
+ *
+ * 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: WW8ResourceModel.hxx,v $
+ * $Revision: 1.4 $
+ *
+ * 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.
+ *
+ ************************************************************************/
+
+#ifdef DEBUG
+#include <stdio.h>
+#include <rtl/ustrbuf.hxx>
+#include <resourcemodel/Protocol.hxx>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/QNameToString.hxx>
+namespace writerfilter
+{
+
+/*
+ StreamProtocol
+*/
+
+StreamProtocol::StreamProtocol(Stream * pStream,
+ TagLogger::Pointer_t pTagLogger)
+ : m_pStream(pStream), m_pTagLogger(pTagLogger)
+{
+}
+
+StreamProtocol::~StreamProtocol()
+{
+}
+
+void StreamProtocol::startSectionGroup()
+{
+ m_pTagLogger->element("protocol-startSectionGroup");
+ m_pStream->startSectionGroup();
+}
+
+void StreamProtocol::endSectionGroup()
+{
+ m_pTagLogger->element("protocol-endSectionGroup");
+ m_pStream->endSectionGroup();
+}
+
+void StreamProtocol::startParagraphGroup()
+{
+ m_pTagLogger->element("protocol-startParagraphGroup");
+ m_pStream->startParagraphGroup();
+}
+
+void StreamProtocol::endParagraphGroup()
+{
+ m_pTagLogger->element("protocol-endParagraphGroup");
+ m_pStream->endParagraphGroup();
+}
+
+void StreamProtocol::startCharacterGroup()
+{
+ m_pTagLogger->element("protocol-startCharacterGroup");
+ m_pStream->startCharacterGroup();
+}
+
+void StreamProtocol::endCharacterGroup()
+{
+ m_pTagLogger->element("protocol-endCharacterGroup");
+ m_pStream->endCharacterGroup();
+}
+
+void StreamProtocol::text(const sal_uInt8 * data, size_t len)
+{
+ ::rtl::OUString sText((const sal_Char*) data, len,
+ RTL_TEXTENCODING_MS_1252);
+ m_pTagLogger->startElement("protocol-text");
+ m_pTagLogger->chars(sText);
+ m_pTagLogger->endElement("protocol-text");
+
+ m_pStream->text(data, len);
+}
+
+void StreamProtocol::utext(const sal_uInt8 * data, size_t len)
+{
+ ::rtl::OUString sText;
+ ::rtl::OUStringBuffer aBuffer = ::rtl::OUStringBuffer(len);
+ aBuffer.append( (const sal_Unicode *) data, len);
+ sText = aBuffer.makeStringAndClear();
+
+ m_pTagLogger->startElement("protocol-utext");
+ m_pTagLogger->chars(sText);
+ m_pTagLogger->endElement("protocol-utext");
+
+ m_pStream->utext(data, len);
+}
+
+void StreamProtocol::props(writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ m_pTagLogger->startElement("protocol-props");
+ m_pStream->props(ref);
+ m_pTagLogger->endElement("protocol-props");
+}
+
+void StreamProtocol::table(Id name,
+ writerfilter::Reference<Table>::Pointer_t ref)
+{
+ m_pTagLogger->startElement("protocol-table");
+ m_pTagLogger->attribute("name", (*QNameToString::Instance())(name));
+ m_pStream->table(name, ref);
+ m_pTagLogger->endElement("protocol-table");
+}
+
+void StreamProtocol::substream(Id name,
+ writerfilter::Reference<Stream>::Pointer_t ref)
+{
+ m_pTagLogger->startElement("protocol-substream");
+ m_pTagLogger->attribute("name", (*QNameToString::Instance())(name));
+
+ m_pStream->substream(name, ref);
+ m_pTagLogger->endElement("protocol-substream");
+}
+
+void StreamProtocol::info(const string & rInfo)
+{
+ m_pStream->info(rInfo);
+}
+
+void StreamProtocol::startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape )
+{
+ m_pTagLogger->element("protocol-startShape");
+
+ m_pStream->startShape(xShape);
+}
+
+void StreamProtocol::endShape()
+{
+ m_pTagLogger->element("protocol-endShape");
+
+ m_pStream->endShape();
+}
+
+/*
+ PropertiesProtocol
+*/
+
+PropertiesProtocol::PropertiesProtocol(Properties * pProperties,
+ TagLogger::Pointer_t pTagLogger)
+: m_pProperties(pProperties), m_pTagLogger(pTagLogger)
+{
+}
+
+PropertiesProtocol::~PropertiesProtocol()
+{
+}
+
+void PropertiesProtocol::attribute(Id name, Value & val)
+{
+ m_pTagLogger->startElement("protocol-attribute");
+ m_pTagLogger->attribute("name", (*QNameToString::Instance())(name));
+ m_pTagLogger->attribute("value", val.toString());
+ m_pProperties->attribute(name, val);
+ m_pTagLogger->endElement("protocol-attribute");
+}
+
+void PropertiesProtocol::sprm(Sprm & _sprm)
+{
+ m_pTagLogger->startElement("protocol-sprm");
+ static char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "%04" SAL_PRIxUINT32, _sprm.getId());
+ m_pTagLogger->attribute("id", sBuffer);
+ m_pTagLogger->attribute("name", _sprm.getName());
+ m_pTagLogger->chars(_sprm.toString());
+ m_pProperties->sprm(_sprm);
+ m_pTagLogger->endElement("protocol-sprm");
+}
+
+/*
+ TableProtocol
+ */
+
+TableProtocol::TableProtocol(Table * pTable, TagLogger::Pointer_t pTagLogger)
+: m_pTable(pTable), m_pTagLogger(pTagLogger)
+{
+}
+
+TableProtocol::~TableProtocol()
+{
+}
+
+void TableProtocol::entry(int pos,
+ writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ m_pTagLogger->startElement("protocol-entry");
+ m_pTagLogger->attribute("pos", pos);
+ m_pTable->entry(pos, ref);
+ m_pTagLogger->endElement("protocol-entry");
+}
+
+}
+#endif // DEBUG
diff --git a/writerfilter/source/resourcemodel/ResourceModelHelper.cxx b/writerfilter/source/resourcemodel/ResourceModelHelper.cxx
new file mode 100644
index 000000000000..fee286fb4570
--- /dev/null
+++ b/writerfilter/source/resourcemodel/ResourceModelHelper.cxx
@@ -0,0 +1,48 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "resourcemodel/ResourceModelHelper.hxx"
+
+namespace writerfilter {
+namespace resourcemodel {
+
+void resolveSprmProps(Properties & rHandler, Sprm & rSprm)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = rSprm.getProps();
+ if( pProperties.get())
+ pProperties->resolve(rHandler);
+}
+
+void resolveAttributeProperties(Properties & rHandler, Value & val)
+{
+ writerfilter::Reference<Properties>::Pointer_t pProperties = val.getProperties();
+ if( pProperties.get())
+ pProperties->resolve(rHandler);
+}
+
+
+}}
diff --git a/writerfilter/source/resourcemodel/TagLogger.cxx b/writerfilter/source/resourcemodel/TagLogger.cxx
new file mode 100644
index 000000000000..ebb28aa0148b
--- /dev/null
+++ b/writerfilter/source/resourcemodel/TagLogger.cxx
@@ -0,0 +1,489 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <fstream>
+#include <string.h>
+#include <resourcemodel/TagLogger.hxx>
+#include <resourcemodel/util.hxx>
+#include <resourcemodel/QNameToString.hxx>
+
+namespace writerfilter
+{
+XMLTag::Pointer_t XMLTag::NIL(new XMLTag("NIL"));
+
+void XMLTag::addAttr(string sName, string sValue)
+{
+ XMLAttribute aAttr(sName, sValue);
+
+ mAttrs.push_back(aAttr);
+}
+
+void XMLTag::addAttr(string sName, const ::rtl::OUString & sValue)
+{
+ addAttr(sName,
+ OUStringToOString
+ (sValue, RTL_TEXTENCODING_ASCII_US).getStr());
+}
+
+void XMLTag::addAttr(string sName, sal_uInt32 nValue)
+{
+ static char buffer[256];
+ snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32, nValue);
+ addAttr(sName, buffer);
+}
+
+void XMLTag::addAttr(string sName, uno::Any aAny)
+{
+ string aTmpStrInt;
+ string aTmpStrFloat;
+ string aTmpStrString;
+
+ static char buffer[256];
+
+ try
+ {
+ sal_Int32 nInt = 0;
+ aAny >>= nInt;
+
+ snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32,
+ nInt);
+
+ aTmpStrInt = buffer;
+ }
+ catch (uno::Exception aExcept)
+ {
+ aTmpStrInt = "exception";
+ }
+
+ try
+ {
+ float nFloat = 0.0;
+ aAny >>= nFloat;
+
+ snprintf(buffer, sizeof(buffer), "%f",
+ nFloat);
+
+ aTmpStrFloat = buffer;
+ }
+ catch (uno::Exception aExcept)
+ {
+ aTmpStrFloat = "exception";
+ }
+
+ try
+ {
+ ::rtl::OUString aStr;
+ aAny >>= aStr;
+
+ aTmpStrString = OUStringToOString(aStr, RTL_TEXTENCODING_ASCII_US).getStr();
+ }
+ catch (uno::Exception aExcept)
+ {
+ aTmpStrString = "exception";
+ }
+
+ addAttr(sName, "i:" + aTmpStrInt + " f:" + aTmpStrFloat + " s:" +
+ aTmpStrString);
+}
+
+void XMLTag::addTag(XMLTag::Pointer_t pTag)
+{
+ if (pTag != XMLTag::Pointer_t())
+ mTags.push_back(pTag);
+}
+
+void XMLTag::chars(const string & rChars)
+{
+ mChars += rChars;
+}
+
+void XMLTag::chars(const ::rtl::OUString & rChars)
+{
+ chars(OUStringToOString(rChars, RTL_TEXTENCODING_ASCII_US).getStr());
+}
+
+const string & XMLTag::getTag() const
+{
+ return mTag;
+}
+
+string XMLTag::toString() const
+{
+ if (mChars.length() > 0)
+ return mChars;
+
+ string sResult;
+
+ if (mMode == START || mMode == COMPLETE)
+ {
+ sResult += "<" + mTag;
+
+ XMLAttributes_t::const_iterator aIt = mAttrs.begin();
+ while (aIt != mAttrs.end())
+ {
+ sResult += " ";
+ sResult += aIt->mName;
+ sResult += "=\"";
+ sResult += xmlify(aIt->mValue);
+ sResult += "\"";
+
+ aIt++;
+ }
+
+ sResult +=">";
+
+ if (mTags.size() > 0)
+ {
+ XMLTags_t::const_iterator aItTags = mTags.begin();
+ while (aItTags != mTags.end())
+ {
+ if ((*aItTags).get() != NULL)
+ sResult += (*aItTags)->toString();
+
+ aItTags++;
+ }
+ }
+ }
+
+ if (mMode == END || mMode == COMPLETE)
+ sResult += "</" + mTag + ">";
+
+ return sResult;
+}
+
+ostream & XMLTag::output(ostream & o, const string & sIndent) const
+{
+ bool bHasContent = mChars.size() > 0 || mTags.size() > 0;
+
+ if (mMode == START || mMode == COMPLETE)
+ {
+ o << sIndent << "<" << mTag;
+
+ XMLAttributes_t::const_iterator aItAttrs(mAttrs.begin());
+ while (aItAttrs != mAttrs.end())
+ {
+ o << " " << aItAttrs->mName << "=\""
+ << xmlify(aItAttrs->mValue)
+ << "\"";
+
+ aItAttrs++;
+ }
+
+ if (bHasContent)
+ {
+ o << ">";
+
+ string sNewIndent = sIndent + " ";
+ XMLTags_t::const_iterator aItTags(mTags.begin());
+ while (aItTags != mTags.end())
+ {
+ if (aItTags == mTags.begin())
+ o << endl;
+
+ (*aItTags)->output(o, sNewIndent);
+ aItTags++;
+ }
+
+ o << mChars;
+ }
+ }
+
+ if (mMode == END || mMode == COMPLETE)
+ {
+ if (bHasContent)
+ {
+ if (mTags.size() > 0)
+ o << sIndent;
+
+ o << "</" << mTag << ">" << endl;
+ }
+ else
+ o << "/>" << endl;
+ }
+
+ return o;
+}
+
+struct eqstr
+{
+ bool operator()(const char* s1, const char* s2) const
+ {
+ return strcmp(s1, s2) == 0;
+ }
+};
+
+typedef hash_map<const char *, TagLogger::Pointer_t, hash<const char *>, eqstr> TagLoggerHashMap_t;
+static TagLoggerHashMap_t * tagLoggers = NULL;
+
+TagLogger::TagLogger()
+: mFileName("writerfilter")
+{
+}
+
+TagLogger::~TagLogger()
+{
+}
+
+void TagLogger::setFileName(const string & rName)
+{
+ mFileName = rName;
+}
+
+TagLogger::Pointer_t TagLogger::getInstance(const char * name)
+{
+ if (tagLoggers == NULL)
+ tagLoggers = new TagLoggerHashMap_t();
+
+ TagLoggerHashMap_t::iterator aIt = tagLoggers->end();
+
+ if (! tagLoggers->empty())
+ aIt = tagLoggers->find(name);
+
+ if (aIt == tagLoggers->end())
+ {
+ TagLogger::Pointer_t pTagLogger(new TagLogger());
+ pair<const char *, TagLogger::Pointer_t> entry(name, pTagLogger);
+ aIt = tagLoggers->insert(entry).first;
+ }
+
+ return aIt->second;
+}
+
+XMLTag::Pointer_t TagLogger::currentTag() const
+{
+ bool bEmpty=mTags.empty();
+ if (!bEmpty)
+ return mTags.top();
+
+ return XMLTag::NIL;
+}
+
+void TagLogger::startDocument()
+{
+ XMLTag::Pointer_t pTag(new XMLTag("root"));
+ mTags.push(pTag);
+ mpRoot = pTag;
+}
+
+void TagLogger::element(const string & name)
+{
+ startElement(name);
+ endElement(name);
+}
+
+void TagLogger::startElement(const string & name)
+{
+ XMLTag::Pointer_t pTag(new XMLTag(name));
+ currentTag()->addTag(pTag);
+ mTags.push(pTag);
+}
+
+void TagLogger::attribute(const string & name, const string & value)
+{
+ currentTag()->addAttr(name, value);
+}
+
+void TagLogger::attribute(const string & name, const ::rtl::OUString & value)
+{
+ currentTag()->addAttr(name, value);
+}
+
+void TagLogger::attribute(const string & name, sal_uInt32 value)
+{
+ currentTag()->addAttr(name, value);
+}
+
+void TagLogger::attribute(const string & name, const uno::Any aAny)
+{
+ currentTag()->addAttr(name, aAny);
+}
+
+void TagLogger::addTag(XMLTag::Pointer_t pTag)
+{
+ currentTag()->addTag(pTag);
+}
+
+void TagLogger::chars(const string & rChars)
+{
+ currentTag()->chars(xmlify(rChars));
+}
+
+void TagLogger::chars(const ::rtl::OUString & rChars)
+{
+ chars(OUStringToOString(rChars, RTL_TEXTENCODING_ASCII_US).getStr());
+}
+
+void TagLogger::endElement(const string & name)
+{
+ string nameRemoved = currentTag()->getTag();
+
+ if (name == nameRemoved)
+ mTags.pop();
+ else {
+ XMLTag::Pointer_t pTag(new XMLTag("end.mismatch"));
+ pTag->addAttr("name", name);
+ pTag->addAttr("top", nameRemoved);
+
+ currentTag()->addTag(pTag);
+ }
+
+}
+
+void TagLogger::endDocument()
+{
+ mTags.pop();
+}
+
+ostream & TagLogger::output(ostream & o) const
+{
+ return mpRoot->output(o);
+}
+
+void TagLogger::dump(const char * name)
+{
+ TagLoggerHashMap_t::iterator aIt(tagLoggers->find(name));
+ if (aIt != tagLoggers->end())
+ {
+ string fileName;
+ char * temp = getenv("TAGLOGGERTMP");
+
+ if (temp != NULL)
+ fileName += temp;
+ else
+ fileName += "/tmp";
+
+ string sPrefix = aIt->second->mFileName;
+ size_t nLastSlash = sPrefix.find_last_of('/');
+ size_t nLastBackslash = sPrefix.find_last_of('\\');
+ size_t nCutPos = nLastSlash;
+ if (nLastBackslash < nCutPos)
+ nCutPos = nLastBackslash;
+ if (nCutPos < sPrefix.size())
+ sPrefix = sPrefix.substr(nCutPos + 1);
+
+ fileName += "/";
+ fileName += sPrefix;
+ fileName +=".";
+ fileName += name;
+ fileName += ".xml";
+
+ ofstream dumpStream(fileName.c_str());
+ aIt->second->output(dumpStream);
+ }
+}
+
+PropertySetToTagHandler::PropertySetToTagHandler(IdToString::Pointer_t pIdToString)
+ : mpTag(new XMLTag("propertyset")), mpIdToString(pIdToString)
+{
+}
+
+PropertySetToTagHandler::~PropertySetToTagHandler()
+{
+}
+
+void PropertySetToTagHandler::resolve
+(XMLTag & rTag, writerfilter::Reference<Properties>::Pointer_t pProps)
+{
+ if (pProps.get() != NULL)
+ {
+ PropertySetToTagHandler aHandler(mpIdToString);
+ pProps->resolve(aHandler);
+ rTag.addTag(aHandler.getTag());
+ }
+}
+
+void PropertySetToTagHandler::attribute(Id name, Value & val)
+{
+ XMLTag::Pointer_t pTag(new XMLTag("attribute"));
+
+ pTag->addAttr("name", (*QNameToString::Instance())(name));
+ pTag->addAttr("value", val.toString());
+
+ resolve(*pTag, val.getProperties());
+
+ mpTag->addTag(pTag);
+}
+
+void PropertySetToTagHandler::sprm(Sprm & rSprm)
+{
+ XMLTag::Pointer_t pTag(new XMLTag("sprm"));
+
+ string sName;
+
+ if (mpIdToString != IdToString::Pointer_t())
+ sName = mpIdToString->toString(rSprm.getId());
+
+ pTag->addAttr("name", sName);
+
+ static char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer),
+ "0x%" SAL_PRIxUINT32 ", %" SAL_PRIuUINT32, rSprm.getId(),
+ rSprm.getId());
+ pTag->addAttr("id", sBuffer);
+ pTag->addAttr("value", rSprm.getValue()->toString());
+
+ resolve(*pTag, rSprm.getProps());
+
+ mpTag->addTag(pTag);
+}
+
+
+XMLTag::Pointer_t unoPropertySetToTag(uno::Reference<beans::XPropertySet> rPropSet)
+{
+ uno::Reference<beans::XPropertySetInfo> xPropSetInfo(rPropSet->getPropertySetInfo());
+ uno::Sequence<beans::Property> aProps(xPropSetInfo->getProperties());
+
+ XMLTag::Pointer_t pResult(new XMLTag("unoPropertySet"));
+
+ for (int i = 0; i < aProps.getLength(); ++i)
+ {
+ XMLTag::Pointer_t pPropTag(new XMLTag("property"));
+
+ ::rtl::OUString sName(aProps[i].Name);
+
+ pPropTag->addAttr("name", sName);
+ try
+ {
+ pPropTag->addAttr("value", rPropSet->getPropertyValue(sName));
+ }
+ catch (uno::Exception aException)
+ {
+ XMLTag::Pointer_t pException(new XMLTag("exception"));
+
+ pException->chars("getPropertyValue(\"");
+ pException->chars(sName);
+ pException->chars("\")");
+ pPropTag->addTag(pException);
+ }
+
+ pResult->addTag(pPropTag);
+ }
+
+ return pResult;
+}
+
+}
diff --git a/writerfilter/source/resourcemodel/WW8Analyzer.cxx b/writerfilter/source/resourcemodel/WW8Analyzer.cxx
new file mode 100644
index 000000000000..75691b5f1483
--- /dev/null
+++ b/writerfilter/source/resourcemodel/WW8Analyzer.cxx
@@ -0,0 +1,216 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <WW8Analyzer.hxx>
+#include <doctok/resourceids.hxx>
+#include <resourcemodel/QNameToString.hxx>
+
+namespace writerfilter
+{
+bool eqSalUInt32::operator () (sal_uInt32 n1, sal_uInt32 n2) const
+{
+ return n1 == n2;
+}
+
+WW8Analyzer::WW8Analyzer()
+{
+}
+
+WW8Analyzer::~WW8Analyzer()
+{
+ dumpStats(cout);
+}
+
+void WW8Analyzer::attribute(Id name, Value & val)
+{
+ string aAttrName = (*QNameToString::Instance())(name);
+ string aStr;
+
+ if (aAttrName.length() > 6)
+ aStr = aAttrName.substr(4, 2);
+ else
+ logger("DEBUG", "WW8Analyzer::attribute:" + aAttrName);
+
+ bool bAdd = false;
+ if (aStr.compare("LC") == 0 || aStr.compare("FC") == 0)
+ {
+ if (val.getInt() != 0)
+ {
+ bAdd = true;
+ }
+ }
+ else
+ {
+ bAdd = true;
+ }
+
+ if (bAdd)
+ {
+ if (mAttributeMap.count(name) > 0)
+ {
+ sal_uInt32 nCount = mAttributeMap[name] + 1;
+ mAttributeMap[name] = nCount;
+ }
+ else
+ mAttributeMap[name] = 1;
+
+ mAttributeIdSet.insert(name);
+ }
+}
+
+void WW8Analyzer::sprm(Sprm & sprm_)
+{
+ if (mSprmMap.count(sprm_.getId()) > 0)
+ {
+ sal_uInt32 nCount = mSprmMap[sprm_.getId()] + 1;
+ mSprmMap[sprm_.getId()] = nCount;
+ }
+ else
+ mSprmMap[sprm_.getId()] = 1;
+
+ mSprmIdSet.insert(sprm_.getId());
+
+ writerfilter::Reference<Properties>::Pointer_t pProps = sprm_.getProps();
+
+ if (pProps.get() != NULL)
+ {
+ pProps->resolve(*this);
+ }
+
+}
+
+void WW8Analyzer::entry(int /*pos*/, ::writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ ref->resolve(*this);
+}
+
+void WW8Analyzer::data(const sal_uInt8 * /*buf*/, size_t /*len*/,
+ ::writerfilter::Reference<Properties>::Pointer_t /*ref*/)
+{
+}
+
+void WW8Analyzer::startSectionGroup()
+{
+}
+
+void WW8Analyzer::endSectionGroup()
+{
+}
+
+void WW8Analyzer::startParagraphGroup()
+{
+}
+
+void WW8Analyzer::endParagraphGroup()
+{
+}
+
+void WW8Analyzer::startCharacterGroup()
+{
+}
+
+void WW8Analyzer::endCharacterGroup()
+{
+}
+
+void WW8Analyzer::text(const sal_uInt8 * /*data*/, size_t /*len*/)
+{
+}
+
+void WW8Analyzer::utext(const sal_uInt8 * /*data*/, size_t /*len*/)
+{
+}
+
+void WW8Analyzer::props(writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ ref->resolve(*this);
+}
+
+void WW8Analyzer::table(Id /*id*/, writerfilter::Reference<Table>::Pointer_t ref)
+{
+ ref->resolve(*this);
+}
+
+void WW8Analyzer::substream(Id /*name*/,
+ writerfilter::Reference<Stream>::Pointer_t ref)
+{
+ ref->resolve(*this);
+}
+
+void WW8Analyzer::info(const string & /*info*/)
+{
+}
+
+void WW8Analyzer::startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > /*xShape*/ )
+{
+}
+
+void WW8Analyzer::endShape( )
+{
+}
+
+void WW8Analyzer::dumpStats(ostream & o) const
+{
+ {
+ for (IdSet::const_iterator aIt = mSprmIdSet.begin();
+ aIt != mSprmIdSet.end(); aIt++)
+ {
+ sal_uInt32 aId = *aIt;
+
+ o << "<sprm>" << endl
+ << "<id>" << hex << aId << "</id>" << endl
+ << "<name>" << (*SprmIdToString::Instance())(aId)
+ << "</name>" << endl
+ << "<count>" << dec << mSprmMap[aId] << "</count>"
+ << endl
+ << "</sprm>" << endl;
+ }
+ }
+
+ {
+ for (IdSet::const_iterator aIt = mAttributeIdSet.begin();
+ aIt != mAttributeIdSet.end(); aIt++)
+ {
+ sal_uInt32 aId = *aIt;
+
+ o << "<attribute>" << endl
+ << "<name>" << (*QNameToString::Instance())(aId) << "</name>"
+ << endl
+ << "<count>" << dec << mAttributeMap[aId] << "</count>"
+ << endl
+ << "</attribute>" << endl;
+ }
+ }
+
+}
+
+Stream::Pointer_t createAnalyzer()
+{
+ return Stream::Pointer_t(new WW8Analyzer());
+}
+
+}
diff --git a/writerfilter/source/resourcemodel/WW8Analyzer.hxx b/writerfilter/source/resourcemodel/WW8Analyzer.hxx
new file mode 100644
index 000000000000..a2fc9e4d4b3d
--- /dev/null
+++ b/writerfilter/source/resourcemodel/WW8Analyzer.hxx
@@ -0,0 +1,99 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_WW8_ANALYZER_HXX
+#define INCLUDED_WW8_ANALYZER_HXX
+
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+#include <hash_set>
+#include <map>
+
+namespace writerfilter
+{
+using namespace std;
+
+struct eqSalUInt32
+{
+ bool operator () (sal_uInt32 n1, sal_uInt32 n2) const;
+};
+
+class WW8Analyzer : public Properties, public Table,
+ public BinaryObj, public Stream
+{
+ typedef map<sal_uInt32, sal_uInt32> SprmMap;
+
+ typedef hash_set<sal_uInt32, hash<sal_uInt32>, eqSalUInt32> IdSet;
+ typedef map<Id, sal_uInt32> AttributeMap;
+
+ mutable SprmMap mSprmMap;
+ IdSet mSprmIdSet;
+ mutable AttributeMap mAttributeMap;
+ IdSet mAttributeIdSet;
+
+public:
+ WW8Analyzer();
+ virtual ~WW8Analyzer();
+
+ // Properties
+
+ virtual void attribute(Id Name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ // Table
+
+ virtual void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+
+ // BinaryObj
+
+ virtual void data(const sal_uInt8* buf, size_t len,
+ writerfilter::Reference<Properties>::Pointer_t ref);
+
+ // Stream
+
+ virtual void startSectionGroup();
+ virtual void endSectionGroup();
+ virtual void startParagraphGroup();
+ virtual void endParagraphGroup();
+ virtual void startCharacterGroup();
+ virtual void endCharacterGroup();
+ virtual void text(const sal_uInt8 * data, size_t len);
+ virtual void utext(const sal_uInt8 * data, size_t len);
+ virtual void props(writerfilter::Reference<Properties>::Pointer_t ref);
+ virtual void table(Id name,
+ writerfilter::Reference<Table>::Pointer_t ref);
+ virtual void substream(Id name,
+ writerfilter::Reference<Stream>::Pointer_t ref);
+ virtual void info(const string & info);
+ virtual void startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+ virtual void endShape( );
+
+ void dumpStats(ostream & o) const;
+};
+}
+
+#endif // INCLUDED_WW8_ANALYZER_HXX
diff --git a/writerfilter/source/resourcemodel/XPathLogger.cxx b/writerfilter/source/resourcemodel/XPathLogger.cxx
new file mode 100644
index 000000000000..89255c8311f8
--- /dev/null
+++ b/writerfilter/source/resourcemodel/XPathLogger.cxx
@@ -0,0 +1,90 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include <resourcemodel/XPathLogger.hxx>
+
+namespace writerfilter
+{
+XPathLogger::XPathLogger()
+: mp_tokenMap(new TokenMap_t)
+{
+}
+
+XPathLogger::~XPathLogger()
+{
+}
+
+string XPathLogger::getXPath() const
+{
+ return m_currentPath;
+}
+
+void XPathLogger::updateCurrentPath()
+{
+ m_currentPath = "";
+
+ for (vector<string>::const_iterator aIt = m_path.begin();
+ aIt != m_path.end();
+ aIt++)
+ {
+ if (m_currentPath.size() > 0)
+ m_currentPath += "/";
+
+ m_currentPath += *aIt;
+ }
+}
+
+void XPathLogger::startElement(string _token)
+{
+ TokenMap_t::const_iterator aIt = mp_tokenMap->find(_token);
+
+ if (aIt == mp_tokenMap->end())
+ (*mp_tokenMap)[_token] = 1;
+ else
+ (*mp_tokenMap)[_token]++;
+
+ static char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "[%d]", (*mp_tokenMap)[_token]);
+ m_path.push_back(_token + sBuffer);
+
+ m_tokenMapStack.push(mp_tokenMap);
+ mp_tokenMap.reset(new TokenMap_t);
+
+ updateCurrentPath();
+}
+
+void XPathLogger::endElement()
+{
+ mp_tokenMap = m_tokenMapStack.top();
+ m_tokenMapStack.pop();
+ m_path.pop_back();
+
+ updateCurrentPath();
+}
+
+}
diff --git a/writerfilter/source/resourcemodel/analyzerfooter b/writerfilter/source/resourcemodel/analyzerfooter
new file mode 100644
index 000000000000..b24a23641b2f
--- /dev/null
+++ b/writerfilter/source/resourcemodel/analyzerfooter
@@ -0,0 +1,4 @@
+ out << "</ids>" << endl;
+}
+
+}
diff --git a/writerfilter/source/resourcemodel/analyzerheader b/writerfilter/source/resourcemodel/analyzerheader
new file mode 100644
index 000000000000..1b4e2674ffab
--- /dev/null
+++ b/writerfilter/source/resourcemodel/analyzerheader
@@ -0,0 +1,36 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <resourcemodel/QNameToString.hxx>
+
+namespace writerfilter
+{
+void analyzerIds(::std::iostream & out)
+{
+ out << "<ids>" << endl;
diff --git a/writerfilter/source/resourcemodel/genqnametostr b/writerfilter/source/resourcemodel/genqnametostr
new file mode 100755
index 000000000000..12bad07b9b85
--- /dev/null
+++ b/writerfilter/source/resourcemodel/genqnametostr
@@ -0,0 +1,35 @@
+#!/bin/tcsh
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+cat qnametostrheader > qnametostr.cxx
+cat ../doctok/qnametostr.tmp >> qnametostr.cxx
+cat ../ooxml/qnametostr.tmp >> qnametostr.cxx
+cat qnametostrfooter >> qnametostr.cxx
+cat sprmcodetostrheader > sprmcodetostr.cxx
+cat ../doctok/sprmcodetostr.tmp >> sprmcodetostr.cxx
+echo "}" >> sprmcodetostr.cxx
diff --git a/writerfilter/source/resourcemodel/makefile.mk b/writerfilter/source/resourcemodel/makefile.mk
new file mode 100644
index 000000000000..1bc260455813
--- /dev/null
+++ b/writerfilter/source/resourcemodel/makefile.mk
@@ -0,0 +1,207 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+PRJ=..$/..
+PRJNAME=writerfilter
+TARGET=resourcemodel
+#LIBTARGET=NO
+#USE_DEFFILE=TRUE
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/inc$/writerfilter.mk
+
+#CFLAGS+=-DISOLATION_AWARE_ENABLED -DWIN32_LEAN_AND_MEAN -DXML_UNICODE -D_NTSDK -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x0501
+#CFLAGS+=-wd4710 -wd4711 -wd4514 -wd4619 -wd4217 -wd4820
+CDEFS+=-DWRITERFILTER_DLLIMPLEMENTATION
+
+
+# --- Files --------------------------------------------------------
+
+# work around gcc taking hours and/or OOM'ing on this file
+NOOPTFILES= \
+ $(SLO)$/qnametostr.obj
+
+SLOFILES= \
+ $(SLO)$/Fraction.obj \
+ $(SLO)$/LoggedResources.obj \
+ $(SLO)$/Protocol.obj \
+ $(SLO)$/ResourceModelHelper.obj \
+ $(SLO)$/TagLogger.obj \
+ $(SLO)$/WW8Analyzer.obj \
+ $(SLO)$/XPathLogger.obj \
+ $(SLO)$/qnametostr.obj \
+ $(SLO)$/resourcemodel.obj \
+ $(SLO)$/sprmcodetostr.obj \
+ $(SLO)$/util.obj \
+
+# linux 64 bit: compiler (gcc 4.2.3) fails with 'out of memory'
+.IF "$(OUTPATH)"=="unxlngx6"
+NOOPTFILES= \
+ $(SLO)$/qnametostr.obj
+.ENDIF
+
+SHL1TARGET=$(TARGET)
+
+.IF "$(GUI)"=="UNX" || "$(GUI)"=="MAC"
+RTFTOKLIB=-lrtftok
+DOCTOKLIB=-ldoctok
+OOXMLLIB=-looxml
+.ELIF "$(GUI)"=="WNT"
+RTFTOKLIB=$(LB)$/irtftok.lib
+DOCTOKLIB=$(LB)$/idoctok.lib
+OOXMLLIB=$(LB)$/iooxml.lib
+.ENDIF
+
+SHL1STDLIBS=$(SALLIB)\
+ $(CPPULIB)\
+ $(CPPUHELPERLIB) \
+ $(COMPHELPERLIB)
+
+SHL1IMPLIB=i$(SHL1TARGET)
+SHL1USE_EXPORTS=name
+
+SHL1OBJS=$(SLOFILES)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+DEF1NAME=$(SHL1TARGET)
+DEFLIB1NAME=$(TARGET)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+RESOURCEMODELCXXOUTDIR=$(MISC)
+DOCTOKHXXOUTDIR=$(INCCOM)$/doctok
+OOXMLHXXOUTDIR=$(INCCOM)$/ooxml
+
+DOCTOKHXXOUTDIRCREATED=$(DOCTOKHXXOUTDIR)$/created
+OOXMLHXXOUTDIRCREATED=$(OOXMLHXXOUTDIR)$/created
+
+OOXMLMODEL=..$/ooxml$/model.xml
+OOXMLPREPROCESSXSL=..$/ooxml$/modelpreprocess.xsl
+OOXMLPREPROCESSXSLCOPIED=$(MISC)$/modelpreprocess.xsl
+OOXMLQNAMETOSTRXSL=..$/ooxml$/qnametostr.xsl
+OOXMLANALYZERXSL=..$/ooxml$/analyzer.xsl
+OOXMLRESOURCEIDSXSL=..$/ooxml$/resourceids.xsl
+OOXMLFACTORYTOOLSXSL=..$/ooxml$/factorytools.xsl
+DOCTOKMODEL=..$/doctok$/resources.xmi
+DOCTOKQNAMETOSTRXSL=..$/doctok$/qnametostr.xsl
+DOCTOKANALYZERXSL=..$/doctok$/analyzer.xsl
+DOCTOKSPRMCODETOSTRXSL=..$/doctok$/sprmcodetostr.xsl
+DOCTOKRESOURCEIDSXSL=..$/doctok$/resourceids.xsl
+DOCTOKSPRMIDSXSL=..$/doctok$/sprmids.xsl
+DOCTOKRESOURCETOOLS=..$/doctok$/resourcetools.xsl
+
+NSPROCESS=namespace_preprocess.pl
+
+MODELPROCESSED=$(MISC)$/model_preprocessed.xml
+
+QNAMETOSTRCXX=$(RESOURCEMODELCXXOUTDIR)$/qnametostr.cxx
+OOXMLQNAMETOSTRTMP=$(RESOURCEMODELCXXOUTDIR)$/OOXMLqnameToStr.tmp
+DOCTOKQNAMETOSTRTMP=$(RESOURCEMODELCXXOUTDIR)$/DOCTOKqnameToStr.tmp
+SPRMCODETOSTRCXX=$(RESOURCEMODELCXXOUTDIR)$/sprmcodetostr.cxx
+SPRMCODETOSTRTMP=$(RESOURCEMODELCXXOUTDIR)$/sprmcodetostr.tmp
+DOCTOKRESOURCEIDSHXX=$(DOCTOKHXXOUTDIR)$/resourceids.hxx
+SPRMIDSHXX=$(DOCTOKHXXOUTDIR)$/sprmids.hxx
+OOXMLRESOURCEIDSHXX=$(OOXMLHXXOUTDIR)$/resourceids.hxx
+
+NSXSL=$(MISC)$/namespacesmap.xsl
+NAMESPACESTXT=$(SOLARVER)$/$(INPATH)$/inc$(UPDMINOREXT)$/oox$/namespaces.txt
+
+GENERATEDHEADERS=$(DOCTOKRESOURCEIDSHXX) $(OOXMLRESOURCEIDSHXX) $(SPRMIDSHXX)
+GENERATEDFILES= \
+ $(GENERATEDHEADERS) \
+ $(QNAMETOSTRCXX) \
+ $(SPRMCODETOSTRCXX) \
+ $(MODELPROCESSED) \
+ $(OOXMLQNAMETOSTRTMP) \
+ $(DOCTOKQNAMETOSTRTMP) \
+ $(SPRMCODETOSTRTMP)
+
+$(OOXMLQNAMETOSTRTMP): $(OOXMLQNAMETOSTRXSL) $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(XSLTPROC) $(OOXMLQNAMETOSTRXSL:s!\!/!) $(MODELPROCESSED) > $@
+
+$(DOCTOKQNAMETOSTRTMP): $(DOCTOKQNAMETOSTRXSL) $(DOCTOKMODEL)
+ @echo "Making: " $(@:f)
+ $(XSLTPROC) $(DOCTOKQNAMETOSTRXSL:s!\!/!) $(DOCTOKMODEL) > $@
+
+$(QNAMETOSTRCXX): $(OOXMLQNAMETOSTRTMP) $(DOCTOKQNAMETOSTRTMP) qnametostrheader qnametostrfooter $(OOXMLFACTORYTOOLSXSL) $(DOCTOKRESOURCETOOLS)
+ @$(TYPE) qnametostrheader $(OOXMLQNAMETOSTRTMP) $(DOCTOKQNAMETOSTRTMP) qnametostrfooter > $@
+
+$(SPRMCODETOSTRTMP): $(DOCTOKSPRMCODETOSTRXSL) $(DOCTOKMODEL)
+ @echo "Making: " $(@:f)
+ $(XSLTPROC) $(DOCTOKSPRMCODETOSTRXSL:s!\!/!) $(DOCTOKMODEL) > $@
+
+$(SPRMCODETOSTRCXX): sprmcodetostrheader $(SPRMCODETOSTRTMP) sprmcodetostrfooter
+ @$(TYPE) $< > $@
+
+$(SLO)$/sprmcodetostr.obj: $(SPRMCODETOSTRCXX)
+$(SLO)$/qnametostr.obj: $(QNAMETOSTRCXX)
+
+$(SLOFILES): $(GENERATEDHEADERS)
+
+$(DOCTOKHXXOUTDIRCREATED):
+ @$(MKDIRHIER) $(DOCTOKHXXOUTDIR)
+ @$(TOUCH) $@
+
+$(DOCTOKRESOURCEIDSHXX): $(DOCTOKHXXOUTDIRCREATED) $(DOCTOKRESOURCETOOLS) $(DOCTOKRESOURCEIDSXSL) $(DOCTOKMODEL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKRESOURCEIDSXSL:s!\!/!) $(DOCTOKMODEL) > $@
+
+$(OOXMLHXXOUTDIRCREATED):
+ @$(MKDIRHIER) $(OOXMLHXXOUTDIR)
+ @$(TOUCH) $@
+
+$(OOXMLPREPROCESSXSLCOPIED): $(OOXMLPREPROCESSXSL)
+ @$(COPY) $(OOXMLPREPROCESSXSL) $@
+
+$(NSXSL) : $(OOXMLMODEL) $(NAMESPACESTXT) $(NSPROCESS)
+ @$(PERL) $(NSPROCESS) $(NAMESPACESTXT) > $@
+
+$(MODELPROCESSED): $(NSXSL) $(OOXMLPREPROCESSXSLCOPIED) $(OOXMLMODEL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(NSXSL) $(OOXMLMODEL) > $@
+
+$(OOXMLRESOURCEIDSHXX): $(OOXMLHXXOUTDIRCREATED) $(OOXMLFACTORYTOOLSXSL) $(OOXMLRESOURCEIDSXSL) $(MODELPROCESSED)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(OOXMLRESOURCEIDSXSL:s!\!/!) $(MODELPROCESSED) > $@
+
+$(SPRMIDSHXX): $(DOCTOKHXXOUTDIRCREATED) $(DOCTOKSPRMIDSXSL) $(DOCTOKMODEL)
+ @echo "Making: " $(@:f)
+ $(COMMAND_ECHO)$(XSLTPROC) $(DOCTOKSPRMIDSXSL:s!\!/!) $(DOCTOKMODEL) > $@
+
+.PHONY: genclean genmake gendirs
+
+genclean:
+ rm -f $(GENERATEDFILES)
+
+genmake: $(GENERATEDFILES)
+
diff --git a/writerfilter/source/resourcemodel/namespace_preprocess.pl b/writerfilter/source/resourcemodel/namespace_preprocess.pl
new file mode 100644
index 000000000000..66644b70fd47
--- /dev/null
+++ b/writerfilter/source/resourcemodel/namespace_preprocess.pl
@@ -0,0 +1,50 @@
+$ARGV0 = shift @ARGV;
+
+print <<EOF;
+<?xml version="1.0"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+ <xsl:output method="xml"/>
+
+ <xsl:include href="./modelpreprocess.xsl"/>
+
+ <xsl:template match="namespace-alias[\@id]">
+ <xsl:variable name="value">
+ <xsl:call-template name="getnamespaceid">
+ <xsl:with-param name="id" select="\@id" />
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:copy>
+ <xsl:apply-templates select="@*"/>
+ <xsl:attribute name="id">
+ <xsl:value-of select="\$value"/>
+ </xsl:attribute>
+ </xsl:copy>
+ </xsl:template>
+
+ <xsl:template name="getnamespaceid">
+ <xsl:param name='id'/>
+ <xsl:choose>
+EOF
+
+
+# print the mapping
+open ( NAMESPACES, $ARGV0 ) || die "can't open namespace file: $!";
+while ( <NAMESPACES> )
+{
+ chomp( $_ );
+ # line format is: numeric-id short-name namespace-URL
+ $_ =~ /^([0-9]+)\s+([a-zA-Z]+)\s+([a-zA-Z0-9-.:\/]+)\s*$/ or die "Error: invalid character in input data";
+ print <<EOF;
+ <xsl:when test="\$id = '$2'">
+ <xsl:text>$1</xsl:text>
+ </xsl:when>
+EOF
+}
+
+print <<EOF;
+ </xsl:choose>
+ </xsl:template>
+
+</xsl:stylesheet>
+EOF
diff --git a/writerfilter/source/resourcemodel/qnametostrfooter b/writerfilter/source/resourcemodel/qnametostrfooter
new file mode 100644
index 000000000000..d0af0f6fa30f
--- /dev/null
+++ b/writerfilter/source/resourcemodel/qnametostrfooter
@@ -0,0 +1,24 @@
+QNameToString::QNameToString()
+{
+ init_doctok();
+ init_ooxml();
+}
+
+void WRITERFILTER_DLLPUBLIC analyzerIds()
+{
+ cout << "<ids type=\"sprm\">" << endl;
+
+ sprmidsToXML(cout);
+ ooxmlsprmidsToXML(cout);
+
+ cout << "</ids>" << endl;
+
+ cout << "<ids type=\"attribute\">" << endl;
+
+ doctokidsToXML(cout);
+ ooxmlidsToXML(cout);
+
+ cout << "</ids>" << endl;
+}
+
+}
diff --git a/writerfilter/source/resourcemodel/qnametostrheader b/writerfilter/source/resourcemodel/qnametostrheader
new file mode 100644
index 000000000000..6cbd0b3fec10
--- /dev/null
+++ b/writerfilter/source/resourcemodel/qnametostrheader
@@ -0,0 +1,57 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <resourcemodel/QNameToString.hxx>
+#include <stdio.h>
+
+namespace writerfilter
+{
+
+QNameToString::Pointer_t QNameToString::pInstance;
+
+QNameToString::Pointer_t WRITERFILTER_DLLPUBLIC QNameToString::Instance()
+{
+ if (pInstance.get() == NULL)
+ pInstance = QNameToString::Pointer_t(new QNameToString());
+
+ return pInstance;
+}
+
+string WRITERFILTER_DLLPUBLIC QNameToString::operator()(Id qName)
+{
+ string sResult;
+
+ Map::const_iterator aIt = mMap.find(qName);
+
+ if (aIt != mMap.end())
+ sResult = aIt->second;
+
+ return mMap[qName];
+}
+
diff --git a/writerfilter/source/resourcemodel/resourcemodel.cxx b/writerfilter/source/resourcemodel/resourcemodel.cxx
new file mode 100644
index 000000000000..096792c76b8e
--- /dev/null
+++ b/writerfilter/source/resourcemodel/resourcemodel.cxx
@@ -0,0 +1,563 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <stdio.h>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/TableManager.hxx>
+#include <resourcemodel/QNameToString.hxx>
+#include <resourcemodel/exceptions.hxx>
+#include <resourcemodel/SubSequence.hxx>
+#include <resourcemodel/util.hxx>
+#include <resourcemodel.hxx>
+
+namespace writerfilter {
+
+class ResourceModelOutputWithDepth : public OutputWithDepth<string>
+{
+public:
+ ResourceModelOutputWithDepth()
+ : OutputWithDepth<string>("<tablegroup>", "</tablegroup>") {}
+
+ ~ResourceModelOutputWithDepth() {outputGroup();}
+
+ void output(const string & str) const { cout << str << endl; }
+};
+
+ResourceModelOutputWithDepth output;
+
+Stream::Pointer_t createStreamHandler()
+{
+ return Stream::Pointer_t(new WW8StreamHandler());
+}
+
+void dump(OutputWithDepth<string> & /*o*/, const char * /*name*/,
+ writerfilter::Reference<Properties>::Pointer_t /*props*/)
+{
+}
+
+void dump(OutputWithDepth<string> & o, const char * name, sal_uInt32 n)
+{
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "%" SAL_PRIuUINT32, n);
+ string tmpStr = name;
+ tmpStr += "=";
+ tmpStr += sBuffer;
+
+ o.addItem(tmpStr);
+}
+
+void dump(OutputWithDepth<string> & /*o*/, const char * /*name*/,
+ const rtl::OUString & /*str*/)
+{
+}
+
+void dump(OutputWithDepth<string> & /*o*/, const char * /*name*/,
+ writerfilter::Reference<BinaryObj>::Pointer_t /*binary*/)
+{
+}
+
+string gInfo = "";
+// ------- WW8TableDataHandler ---------
+
+class TablePropsRef : public writerfilter::Reference<Properties>
+{
+public:
+ typedef boost::shared_ptr<TablePropsRef> Pointer_t;
+
+ TablePropsRef() {}
+ virtual ~TablePropsRef() {}
+
+ virtual void resolve(Properties & /*rHandler*/) {}
+
+ virtual string getType() const { return "TableProps"; }
+ void reset() {}
+ void insert(Pointer_t /* pTablePropsRef */) {}
+};
+
+typedef TablePropsRef::Pointer_t TablePropsRef_t;
+
+class WW8TableDataHandler : public TableDataHandler<string,
+ TablePropsRef_t>
+{
+public:
+ typedef boost::shared_ptr<WW8TableDataHandler> Pointer_t;
+ virtual void startTable(unsigned int nRows, unsigned int nDepth,
+ TablePropsRef_t pProps);
+ virtual void endTable();
+ virtual void startRow(unsigned int nCols,
+ TablePropsRef_t pProps);
+ virtual void endRow();
+ virtual void startCell(const string & start, TablePropsRef_t pProps);
+ virtual void endCell(const string & end);
+};
+
+void WW8TableDataHandler::startTable(unsigned int nRows, unsigned int nDepth,
+ TablePropsRef_t /*pProps*/)
+{
+ char sBuffer[256];
+
+ string tmpStr = "<tabledata.table rows=\"";
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nRows);
+ tmpStr += sBuffer;
+ tmpStr += "\" depth=\"";
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nDepth);
+ tmpStr += sBuffer;
+ tmpStr += "\">";
+
+ output.addItem(tmpStr);
+}
+
+void WW8TableDataHandler::endTable()
+{
+ output.addItem("</tabledata.table>");
+}
+
+void WW8TableDataHandler::startRow
+(unsigned int nCols, TablePropsRef_t /*pProps*/)
+{
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "%d", nCols);
+ string tmpStr = "<tabledata.row cells=\"";
+ tmpStr += sBuffer;
+ tmpStr += "\">";
+ output.addItem(tmpStr);
+}
+
+void WW8TableDataHandler::endRow()
+{
+ output.addItem("</tabledata.row>");
+}
+
+void WW8TableDataHandler::startCell(const string & start,
+ TablePropsRef_t /*pProps*/)
+{
+ output.addItem("<tabledata.cell>");
+ output.addItem(start);
+ output.addItem(", ");
+}
+
+void WW8TableDataHandler::endCell(const string & end)
+{
+ output.addItem(end);
+ output.addItem("</tabledata.cell>");
+}
+
+// ----- WW8TableDataManager -------------------------------
+
+class WW8TableManager :
+ public TableManager<string, TablePropsRef_t>
+{
+ typedef TableDataHandler<string, TablePropsRef_t>
+ TableDataHandlerPointer_t;
+
+public:
+ WW8TableManager();
+ virtual ~WW8TableManager() {}
+ virtual void endParagraphGroup();
+ virtual bool sprm(Sprm & rSprm);
+};
+
+WW8TableManager::WW8TableManager()
+{
+ TableDataHandler<string, TablePropsRef_t>::Pointer_t pHandler(new WW8TableDataHandler());
+ setHandler(pHandler);
+}
+
+bool WW8TableManager::sprm(Sprm & rSprm)
+{
+ TableManager<string, TablePropsRef_t>::sprm(rSprm);
+ output.setDepth(getTableDepthNew());
+ return true;
+}
+
+void WW8TableManager::endParagraphGroup()
+{
+ string tmpStr = "<tabledepth depth=\"";
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "%" SAL_PRIuUINT32, getTableDepthNew());
+ tmpStr += sBuffer;
+ tmpStr += "\"/>";
+ output.addItem(tmpStr);
+ TableManager<string, TablePropsRef_t>::endParagraphGroup();
+}
+
+WW8TableManager gTableManager;
+
+/* WW8StreamHandler */
+
+WW8StreamHandler::WW8StreamHandler()
+: mnUTextCount(0)
+{
+ output.closeGroup();
+ output.addItem("<stream>");
+ gTableManager.startLevel();
+}
+
+WW8StreamHandler::~WW8StreamHandler()
+{
+ gTableManager.endLevel();
+
+ output.closeGroup();
+ output.addItem("</stream>");
+}
+
+void WW8StreamHandler::startSectionGroup()
+{
+ output.addItem("<section-group>");
+}
+
+void WW8StreamHandler::endSectionGroup()
+{
+ output.addItem("</section-group>");
+}
+
+void WW8StreamHandler::startParagraphGroup()
+{
+ output.openGroup();
+ output.addItem("<paragraph-group>");
+
+ gTableManager.startParagraphGroup();
+ gTableManager.handle(gInfo);
+}
+
+void WW8StreamHandler::endParagraphGroup()
+{
+ gTableManager.endParagraphGroup();
+
+ output.addItem("</paragraph-group>");
+ output.closeGroup();
+
+}
+
+void WW8StreamHandler::startCharacterGroup()
+{
+ output.addItem("<character-group>");
+}
+
+void WW8StreamHandler::endCharacterGroup()
+{
+ output.addItem("</character-group>");
+}
+
+void WW8StreamHandler::startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > /*xShape*/ )
+{
+ output.addItem("<shape>");
+}
+
+void WW8StreamHandler::endShape( )
+{
+ output.addItem( "</shape>" );
+}
+
+void WW8StreamHandler::text(const sal_uInt8 * data, size_t len)
+{
+ string tmpStr = "<text>";
+
+ for (unsigned int n = 0; n < len; ++n)
+ {
+ switch (static_cast<unsigned char>(data[n]))
+ {
+ case '<':
+ tmpStr += "&lt;";
+
+ break;
+ case '>':
+ tmpStr += "&gt;";
+
+ break;
+
+ case '&':
+ tmpStr += "&amp;";
+
+ break;
+ default:
+ if (isprint(data[n]))
+ tmpStr += static_cast<char>(data[n]);
+ else
+ {
+ char sBuffer[256];
+
+ snprintf(sBuffer, sizeof(sBuffer), "\\0x%02x", data[n]);
+
+ tmpStr += sBuffer;
+ }
+ }
+ }
+
+ tmpStr += "</text>";
+
+ output.addItem(tmpStr);
+
+ gTableManager.text(data, len);
+}
+
+void WW8StreamHandler::utext(const sal_uInt8 * data, size_t len)
+{
+ static char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "<utext count=\"%d\">", mnUTextCount);
+ string tmpStr(sBuffer);
+
+ for (unsigned int n = 0; n < len; ++n)
+ {
+ sal_Unicode nChar = data[n * 2] + (data[n * 2 + 1] << 8);
+ if (nChar < 0xff && isprint(nChar))
+ {
+ switch (nChar)
+ {
+ case '&':
+ tmpStr += "&amp;";
+ break;
+ case '<':
+ tmpStr += "&lt;";
+ break;
+ case '>':
+ tmpStr += "&gt;";
+ break;
+ default:
+ tmpStr += static_cast<char>(nChar);
+ }
+ }
+ else
+ {
+ snprintf(sBuffer, sizeof(sBuffer), "\\0x%04x", nChar);
+
+ tmpStr += sBuffer;
+ }
+ }
+
+ tmpStr += "</utext>";
+
+ output.addItem(tmpStr);
+
+ gTableManager.utext(data, len);
+
+ mnUTextCount++;
+}
+
+void WW8StreamHandler::props(writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ WW8PropertiesHandler aHandler;
+
+ output.addItem("<properties type=\"" + ref->getType() + "\">");
+ ref->resolve(aHandler);
+
+ //gTableManager.props(ref);
+
+ output.addItem("</properties>");
+}
+
+void WW8StreamHandler::table(Id name, writerfilter::Reference<Table>::Pointer_t ref)
+{
+ WW8TableHandler aHandler;
+
+ output.addItem("<table id=\"" + (*QNameToString::Instance())(name)
+ + "\">");
+
+ try
+ {
+ ref->resolve(aHandler);
+ }
+ catch (Exception e)
+ {
+ output.addItem("<exception>" + e.getText() + "</exception>");
+ }
+
+ output.addItem("</table>");
+}
+
+void WW8StreamHandler::substream(Id name,
+ writerfilter::Reference<Stream>::Pointer_t ref)
+{
+ output.addItem("<substream name=\"" + (*QNameToString::Instance())(name)
+ + "\">");
+
+ gTableManager.startLevel();
+
+ ref->resolve(*this);
+
+ gTableManager.endLevel();
+
+ output.addItem("</substream>");
+}
+
+void WW8StreamHandler::info(const string & info_)
+{
+ gInfo = info_;
+ output.addItem("<info>" + info_ + "</info>");
+}
+
+void WW8PropertiesHandler::attribute(Id name, Value & val)
+{
+ boost::shared_ptr<rtl::OString> pStr(new ::rtl::OString());
+ ::rtl::OUString aStr = val.getString();
+ aStr.convertToString(pStr.get(), RTL_TEXTENCODING_ASCII_US,
+ OUSTRING_TO_OSTRING_CVTFLAGS);
+ string sXMLValue = xmlify(pStr->getStr());
+
+ char sBuffer[256];
+ snprintf(sBuffer, sizeof(sBuffer), "0x%x", val.getInt());
+
+ output.addItem("<attribute name=\"" +
+ (*QNameToString::Instance())(name) +
+ "\" value=\"" +
+ sXMLValue +
+ + "\" hexvalue=\""
+ + sBuffer + "\">");
+
+ writerfilter::Reference<Properties>::Pointer_t pProps = val.getProperties();
+
+ if (pProps.get() != NULL)
+ {
+ output.addItem("<properties name=\"" +
+ (*QNameToString::Instance())(name)
+ + "\" type=\"" + pProps->getType() + "\">");
+
+ try
+ {
+ pProps->resolve(*this);
+ }
+ catch (ExceptionOutOfBounds e)
+ {
+ }
+
+ output.addItem("</properties>");
+ }
+
+ writerfilter::Reference<Stream>::Pointer_t pStream = val.getStream();
+
+ if (pStream.get() != NULL)
+ {
+ try
+ {
+ WW8StreamHandler aHandler;
+
+ pStream->resolve(aHandler);
+ }
+ catch (ExceptionOutOfBounds e)
+ {
+ }
+ }
+
+ writerfilter::Reference<BinaryObj>::Pointer_t pBinObj = val.getBinary();
+
+ if (pBinObj.get() != NULL)
+ {
+ try
+ {
+ WW8BinaryObjHandler aHandler;
+
+ pBinObj->resolve(aHandler);
+ }
+ catch (ExceptionOutOfBounds e)
+ {
+ }
+ }
+
+ output.addItem("</attribute>");
+}
+
+void WW8PropertiesHandler::sprm(Sprm & sprm_)
+{
+ string tmpStr = "<sprm id=\"";
+ char buffer[256];
+ snprintf(buffer, sizeof(buffer), "0x%" SAL_PRIxUINT32, sprm_.getId());
+ tmpStr += buffer;
+ tmpStr += "\" name=\"";
+ tmpStr += sprm_.getName();
+ tmpStr += "\">";
+ output.addItem(tmpStr);
+ output.addItem(sprm_.toString());
+
+ writerfilter::Reference<Properties>::Pointer_t pProps = sprm_.getProps();
+
+ if (pProps.get() != NULL)
+ {
+ output.addItem("<properties type=\"" + pProps->getType() + "\">");
+ pProps->resolve(*this);
+ output.addItem("</properties>");
+ }
+
+ writerfilter::Reference<BinaryObj>::Pointer_t pBinObj = sprm_.getBinary();
+
+ if (pBinObj.get() != NULL)
+ {
+ output.addItem("<binary>");
+ WW8BinaryObjHandler aHandler;
+ pBinObj->resolve(aHandler);
+ output.addItem("</binary>");
+ }
+
+ writerfilter::Reference<Stream>::Pointer_t pStream = sprm_.getStream();
+
+ if (pStream.get() != NULL)
+ {
+ output.addItem("<stream>");
+ WW8StreamHandler aHandler;
+ pStream->resolve(aHandler);
+ output.addItem("</stream>");
+ }
+
+ gTableManager.sprm(sprm_);
+
+ output.addItem("</sprm>");
+}
+
+void WW8TableHandler::entry(int /*pos*/,
+ writerfilter::Reference<Properties>::Pointer_t ref)
+{
+ output.addItem("<tableentry>");
+
+ WW8PropertiesHandler aHandler;
+
+ try
+ {
+ ref->resolve(aHandler);
+ }
+ catch (Exception e)
+ {
+ output.addItem("<exception>" + e.getText() + "</exception>");
+ output.addItem("</tableentry>");
+
+ throw e;
+ }
+
+ output.addItem("</tableentry>");
+}
+
+void WW8BinaryObjHandler::data
+(const sal_uInt8 * buf, size_t length,
+ writerfilter::Reference<Properties>::Pointer_t /*pRef*/)
+{
+#if 1
+ SubSequence<sal_uInt8> aSeq(buf, length);
+
+ aSeq.dump(output);
+#endif
+}
+
+}
diff --git a/writerfilter/source/resourcemodel/resourcemodel.hxx b/writerfilter/source/resourcemodel/resourcemodel.hxx
new file mode 100644
index 000000000000..9f59e68b9e1f
--- /dev/null
+++ b/writerfilter/source/resourcemodel/resourcemodel.hxx
@@ -0,0 +1,110 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <resourcemodel/WW8ResourceModel.hxx>
+
+namespace writerfilter {
+class WW8StreamHandler : public Stream
+{
+ int mnUTextCount;
+
+public:
+ WW8StreamHandler();
+ virtual ~WW8StreamHandler();
+
+ virtual void startSectionGroup();
+ virtual void endSectionGroup();
+ virtual void startParagraphGroup();
+ virtual void endParagraphGroup();
+ virtual void startCharacterGroup();
+ virtual void endCharacterGroup();
+ virtual void text(const sal_uInt8 * data, size_t len);
+ virtual void utext(const sal_uInt8 * data, size_t len);
+
+ virtual void props(writerfilter::Reference<Properties>::Pointer_t ref);
+ virtual void table(Id name,
+ writerfilter::Reference<Table>::Pointer_t ref);
+
+ virtual void startShape( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape );
+ virtual void endShape( );
+
+ virtual void substream(Id name, writerfilter::Reference<Stream>::Pointer_t ref);
+
+ virtual void info(const string & info);
+};
+
+class WW8PropertiesHandler : public Properties
+{
+ typedef boost::shared_ptr<Sprm> SprmSharedPointer_t;
+ typedef vector<SprmSharedPointer_t> SprmPointers_t;
+ SprmPointers_t sprms;
+
+public:
+ WW8PropertiesHandler()
+ {
+ }
+
+ virtual ~WW8PropertiesHandler()
+ {
+ }
+
+ virtual void attribute(Id name, Value & val);
+ virtual void sprm(Sprm & sprm);
+
+ void dumpSprm(SprmSharedPointer_t sprm);
+ void dumpSprms();
+};
+
+class WW8BinaryObjHandler : public BinaryObj
+{
+public:
+ WW8BinaryObjHandler()
+ {
+ }
+
+ virtual ~WW8BinaryObjHandler()
+ {
+ }
+
+ virtual void data(const sal_uInt8* buf, size_t len,
+ writerfilter::Reference<Properties>::Pointer_t ref);
+};
+
+class WW8TableHandler : public Table
+{
+public:
+ WW8TableHandler()
+ {
+ }
+
+ virtual ~WW8TableHandler()
+ {
+ }
+
+ void entry(int pos, writerfilter::Reference<Properties>::Pointer_t ref);
+};
+
+}
diff --git a/writerfilter/source/resourcemodel/setdebugflags b/writerfilter/source/resourcemodel/setdebugflags
new file mode 100755
index 000000000000..dafa563d7a7d
--- /dev/null
+++ b/writerfilter/source/resourcemodel/setdebugflags
@@ -0,0 +1,3 @@
+#!/bin/tcsh
+
+setenv ENFCLAGS "-DDEBUG_ELEMENT -DDEBUG_ATTRIBUTES -DDEBUG_PROPERTIES -DDEBUG_CONTEXT_STACK -DDEBUG_CREATE -DDEBUG_DOMAINMAPPER"
diff --git a/writerfilter/source/resourcemodel/sprmcodetostrfooter b/writerfilter/source/resourcemodel/sprmcodetostrfooter
new file mode 100644
index 000000000000..5c34318c2147
--- /dev/null
+++ b/writerfilter/source/resourcemodel/sprmcodetostrfooter
@@ -0,0 +1 @@
+}
diff --git a/writerfilter/source/resourcemodel/sprmcodetostrheader b/writerfilter/source/resourcemodel/sprmcodetostrheader
new file mode 100644
index 000000000000..ff0663e30bde
--- /dev/null
+++ b/writerfilter/source/resourcemodel/sprmcodetostrheader
@@ -0,0 +1,50 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <doctok/resourceids.hxx>
+#include <ooxml/resourceids.hxx>
+#include <resourcemodel/QNameToString.hxx>
+#include <doctok/sprmids.hxx>
+
+namespace writerfilter
+{
+
+SprmIdToString::Pointer_t SprmIdToString::pInstance;
+
+SprmIdToString::Pointer_t SprmIdToString::Instance()
+{
+ if (pInstance.get() == NULL)
+ pInstance = SprmIdToString::Pointer_t(new SprmIdToString());
+
+ return pInstance;
+}
+
+string SprmIdToString::operator()(sal_uInt32 nId)
+{
+ return mMap[nId];
+}
+
diff --git a/writerfilter/source/resourcemodel/util.cxx b/writerfilter/source/resourcemodel/util.cxx
new file mode 100644
index 000000000000..3d041d18c126
--- /dev/null
+++ b/writerfilter/source/resourcemodel/util.cxx
@@ -0,0 +1,427 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <fstream>
+#include <string>
+#include <com/sun/star/awt/Point.hpp>
+#include <com/sun/star/awt/Rectangle.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/drawing/BitmapMode.hpp>
+#include <com/sun/star/drawing/FillStyle.hpp>
+#include <com/sun/star/drawing/HomogenMatrix3.hpp>
+#include <com/sun/star/text/TextContentAnchorType.hpp>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/TagLogger.hxx>
+#include <resourcemodel/util.hxx>
+
+namespace writerfilter
+{
+using namespace com::sun::star;
+using namespace std;
+using text::TextContentAnchorType;
+
+static string & logger_file()
+{
+ static string _logger_file = string(getenv("TEMP")?getenv("TEMP"):"/tmp") + "/writerfilter.ooxml.tmp";
+ return _logger_file;
+}
+
+static ofstream & logger_stream()
+{
+ static ofstream _logger_stream(logger_file().c_str());
+ return _logger_stream;
+}
+
+
+void logger(string prefix, string message)
+{
+ logger_stream() << prefix << ":" << message << endl;
+ logger_stream().flush();
+}
+
+ string xmlify(const string & str)
+ {
+ string result = "";
+ char sBuffer[16];
+
+ for (string::const_iterator aIt = str.begin(); aIt != str.end(); ++aIt)
+ {
+ char c = *aIt;
+
+ if (isprint(c) && c != '\"')
+ {
+ if (c == '<')
+ result += "&lt;";
+ else if (c == '>')
+ result += "&gt;";
+ else if (c == '&')
+ result += "&amp;";
+ else
+ result += c;
+ }
+ else
+ {
+ snprintf(sBuffer, sizeof(sBuffer), "\\%03d", c);
+ result += sBuffer;
+ }
+ }
+
+ return result;
+ }
+
+#ifdef DEBUG
+string propertysetToString(uno::Reference<beans::XPropertySet> const & xPropSet)
+{
+ string sResult;
+
+ static int nAttribNames = 9;
+ static string sPropertyAttribNames[9] =
+ {
+ "MAYBEVOID",
+ "BOUND",
+ "CONSTRAINED",
+ "TRANSIENT",
+ "READONLY",
+ "MAYBEAMBIGUOUS",
+ "MAYBEDEFAULT",
+ "REMOVEABLE",
+ "OPTIONAL"
+ };
+
+ static const ::rtl::OUString sMetaFile(RTL_CONSTASCII_USTRINGPARAM("MetaFile"));
+
+ uno::Reference<beans::XPropertySetInfo> xPropSetInfo
+ (xPropSet->getPropertySetInfo());
+
+ if (xPropSetInfo.is())
+ {
+ uno::Sequence<beans::Property> aProps(xPropSetInfo->getProperties());
+
+ sResult +="<propertyset>";
+
+ for (sal_Int32 n = 0; n < aProps.getLength(); n++)
+ {
+ ::rtl::OUString sPropName(aProps[n].Name);
+
+ if (xPropSetInfo->hasPropertyByName(sPropName))
+ {
+ bool bPropertyFound = true;
+ uno::Any aAny;
+ try
+ {
+ if (sPropName == sMetaFile)
+ bPropertyFound = false;
+ else
+ xPropSet->getPropertyValue(sPropName) >>= aAny;
+ }
+ catch (beans::UnknownPropertyException)
+ {
+ bPropertyFound = false;
+ }
+
+ if (bPropertyFound)
+ {
+ sResult += "<property name=\"";
+ sResult += OUStringToOString
+ (sPropName, RTL_TEXTENCODING_ASCII_US).getStr();
+ sResult +="\" type=\"";
+
+ ::rtl::OUString sPropType(aProps[n].Type.getTypeName());
+ sResult += OUStringToOString
+ (sPropType, RTL_TEXTENCODING_ASCII_US).getStr();
+
+ sResult += "\" attribs=\"";
+
+ sal_uInt16 nMask = 1;
+ bool bFirstAttrib = true;
+ sal_uInt16 nAttribs = aProps[n].Attributes;
+ for (int i = 0; i < nAttribNames; i++)
+ {
+ if ((nAttribs & nMask) != 0)
+ {
+ if (bFirstAttrib)
+ bFirstAttrib = false;
+ else
+ sResult += "|";
+
+ sResult += sPropertyAttribNames[i];
+ }
+
+ nMask <<= 1;
+ }
+
+ sResult += "\">";
+
+ char buffer[256];
+ if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("byte")))
+ {
+ sal_Int8 nValue = 0;
+ aAny >>= nValue;
+
+ snprintf(buffer, sizeof(buffer), "%d", nValue);
+ sResult += buffer;
+ }
+ if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("short")))
+ {
+ sal_Int16 nValue = 0;
+ aAny >>= nValue;
+
+ snprintf(buffer, sizeof(buffer), "%d", nValue);
+ sResult += buffer;
+ }
+ else if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("long")))
+ {
+ sal_Int32 nValue = 0;
+ aAny >>= nValue;
+
+ snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32, nValue);
+ sResult += buffer;
+ }
+ else if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("float")))
+ {
+ float nValue = 0.0;
+ aAny >>= nValue;
+
+ snprintf(buffer, sizeof(buffer), "%f", nValue);
+ sResult += buffer;
+ }
+ else if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("double")))
+ {
+ double nValue = 0.0;
+ aAny >>= nValue;
+
+ snprintf(buffer, sizeof(buffer), "%lf", nValue);
+ sResult += buffer;
+ }
+ else if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("boolean")))
+ {
+ sal_Bool nValue = sal_False;
+ aAny >>= nValue;
+
+ if (nValue)
+ sResult += "true";
+ else
+ sResult += "false";
+ }
+ else if (sPropType ==
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("string")))
+ {
+ ::rtl::OUString sValue;
+ aAny >>= sValue;
+
+ sResult += OUStringToOString
+ (sValue, RTL_TEXTENCODING_ASCII_US).getStr();
+ }
+ else if (sPropType ==
+ ::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.text.TextContentAnchorType")))
+ {
+ text::TextContentAnchorType nValue;
+ aAny >>= nValue;
+
+ switch (nValue)
+ {
+ case text::TextContentAnchorType_AT_PARAGRAPH:
+ sResult += "AT_PARAGRAPH";
+ break;
+ case text::TextContentAnchorType_AS_CHARACTER:
+ sResult += "AS_CHARACTER";
+ break;
+ case text::TextContentAnchorType_AT_PAGE:
+ sResult += "AT_PAGE";
+ break;
+ case text::TextContentAnchorType_AT_FRAME:
+ sResult += "AT_FRAME";
+ break;
+ case text::TextContentAnchorType_AT_CHARACTER:
+ sResult += "AT_CHARACTER";
+ break;
+ case text::TextContentAnchorType_MAKE_FIXED_SIZE:
+ sResult += "MAKE_FIXED_SIZE";
+ break;
+ default:
+ break;
+ }
+ }
+ else if (sPropType ==
+ ::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.awt.Point")))
+ {
+ awt::Point aPoint;
+ aAny >>= aPoint;
+
+ snprintf(buffer, sizeof(buffer), "(%" SAL_PRIdINT32 ", %" SAL_PRIdINT32 ")", aPoint.X,
+ aPoint.Y);
+
+ sResult += buffer;
+ }
+ else if (sPropType ==
+ ::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.awt.Rectangle")))
+ {
+ awt::Rectangle aRect;
+ aAny >>= aRect;
+
+ snprintf(buffer, sizeof(buffer), "(%" SAL_PRIdINT32 ", %" SAL_PRIdINT32 ", %" SAL_PRIdINT32 ", %" SAL_PRIdINT32 ")",
+ aRect.X, aRect.Y, aRect.Width, aRect.Height);
+ sResult += buffer;
+ }
+ else if (sPropType ==
+ ::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.drawing.FillStyle")))
+ {
+ drawing::FillStyle nValue;
+ aAny >>= nValue;
+
+ switch (nValue)
+ {
+ case drawing::FillStyle_NONE:
+ sResult += "NONE";
+ break;
+ case drawing::FillStyle_SOLID:
+ sResult += "SOLID";
+ break;
+ case drawing::FillStyle_GRADIENT:
+ sResult += "GRADIENT";
+ break;
+ case drawing::FillStyle_HATCH:
+ sResult += "HATCH";
+ break;
+ case drawing::FillStyle_BITMAP:
+ sResult += "BITMAP";
+ break;
+ case drawing::FillStyle_MAKE_FIXED_SIZE:
+ sResult += "MAKE_FIXED_SIZE";
+ break;
+ }
+ }
+ else if (sPropType ==
+ ::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.drawing.BitmapMode")))
+ {
+ drawing::BitmapMode nValue;
+ aAny >>= nValue;
+
+ switch (nValue)
+ {
+ case drawing::BitmapMode_REPEAT:
+ sResult += "REPEAT";
+ break;
+ case drawing::BitmapMode_STRETCH:
+ sResult += "STRETCH";
+ break;
+ case drawing::BitmapMode_NO_REPEAT:
+ sResult += "NO_REPEAT";
+ break;
+ case drawing::BitmapMode_MAKE_FIXED_SIZE:
+ sResult += "MAKE_FIXED_SIZE";
+ break;
+ }
+ }
+ else if (sPropType ==
+ ::rtl::OUString
+ (RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.drawing.HomogenMatrix3")))
+ {
+ drawing::HomogenMatrix3 aMatrix;
+ aAny >>= aMatrix;
+
+ snprintf(buffer, sizeof(buffer),
+ "((%f %f %f)(%f %f %f)(%f %f %f))",
+ aMatrix.Line1.Column1,
+ aMatrix.Line1.Column2,
+ aMatrix.Line1.Column3,
+ aMatrix.Line2.Column1,
+ aMatrix.Line2.Column2,
+ aMatrix.Line2.Column3,
+ aMatrix.Line3.Column1,
+ aMatrix.Line3.Column2,
+ aMatrix.Line3.Column3);
+ sResult += buffer;
+ }
+
+ sResult += "</property>";
+ }
+ }
+ else
+ {
+ sResult += "<unknown-property>";
+ sResult += OUStringToOString
+ (sPropName, RTL_TEXTENCODING_ASCII_US).getStr();
+ sResult += "</unknown-property>";
+ }
+ }
+ sResult += "</propertyset>";
+ }
+
+ return sResult;
+}
+
+string toString(uno::Reference< text::XTextRange > textRange)
+{
+ string result;
+
+ if (textRange.get())
+ {
+ rtl::OUString aOUStr = textRange->getString();
+ rtl::OString aOStr(aOUStr.getStr(), aOUStr.getLength(), RTL_TEXTENCODING_ASCII_US );
+
+ result = aOStr.getStr();
+ }
+ else
+ {
+ result="(nil)";
+ }
+
+ return result;
+}
+
+string toString(const string & rString)
+{
+ return rString;
+}
+#endif
+}
diff --git a/writerfilter/source/rtftok/FlexLexer.h b/writerfilter/source/rtftok/FlexLexer.h
new file mode 100644
index 000000000000..309cd30ffe1a
--- /dev/null
+++ b/writerfilter/source/rtftok/FlexLexer.h
@@ -0,0 +1,149 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef __FLEX_LEXER_H
+// Never included before - need to define base class.
+#define __FLEX_LEXER_H
+//#include <iostream.h>
+typedef void ostream;
+#include <vector>
+#include <rtftok/RTFInputSource.hxx>
+
+extern "C++" {
+
+struct yy_buffer_state;
+typedef int yy_state_type;
+
+}
+#include <rtftok/RTFScanner.hxx>
+#endif
+
+#if defined(yyFlexLexer) || ! defined(yyFlexLexerOnce)
+// Either this is the first time through (yyFlexLexerOnce not defined),
+// or this is a repeated include to define a different flavor of
+// yyFlexLexer, as discussed in the flex man page.
+#define yyFlexLexerOnce
+
+class yyFlexLexer : public writerfilter::rtftok::RTFScanner {
+private:
+ class RtfTokenizer* tokenizerInstance;
+
+ void split_ctrl(char *yytext, char* token, char *value);
+ void raise_ctrl(char* yytext);
+ void raise_dest(char* yytext);
+ void raise_destOrCtrl(char* yytext);
+protected:
+ int num_lines;
+ sal_uInt64 num_chars;
+ int star_flag;
+
+public:
+ // arg_yyin and arg_yyout default to the cin and cout, but we
+ // only make that assignment when initializing in yylex().
+ yyFlexLexer( class writerfilter::rtftok::RTFInputSource* arg_yyin, class writerfilter::rtftok::RTFScannerHandler &eventHandler );
+
+ virtual ~yyFlexLexer();
+
+ void yy_switch_to_buffer( struct yy_buffer_state* new_buffer );
+ struct yy_buffer_state* yy_create_buffer( class writerfilter::rtftok::RTFInputSource* s, int size );
+ void yy_delete_buffer( struct yy_buffer_state* b );
+ void yyrestart( class writerfilter::rtftok::RTFInputSource* s );
+
+ virtual int yylex();
+ virtual void switch_streams( class writerfilter::rtftok::RTFInputSource* new_in, ostream* new_out );
+
+protected:
+
+// int LexerInput( char* buf, int max_size );
+ virtual void LexerOutput( const char* buf, int size );
+ virtual void LexerError( const char* msg );
+
+ void yyunput( int c, char* buf_ptr );
+ int yyinput();
+
+ void yy_load_buffer_state();
+ void yy_init_buffer( struct yy_buffer_state* b, class writerfilter::rtftok::RTFInputSource* s );
+ void yy_flush_buffer( struct yy_buffer_state* b );
+
+ int yy_start_stack_ptr;
+ int yy_start_stack_depth;
+ int* yy_start_stack;
+
+ void yy_push_state( int new_state );
+ void yy_pop_state();
+ int yy_top_state();
+
+ yy_state_type yy_get_previous_state();
+ yy_state_type yy_try_NUL_trans( yy_state_type current_state );
+ int yy_get_next_buffer();
+
+ class writerfilter::rtftok::RTFInputSource* yyin; // input source for default LexerInput
+ ostream* yyout; // output sink for default LexerOutput
+
+ struct yy_buffer_state* yy_current_buffer;
+
+ // yy_hold_char holds the character lost when yytext is formed.
+ char yy_hold_char;
+
+ // Number of characters read into yy_ch_buf.
+ int yy_n_chars;
+
+ // Points to current character in buffer.
+ char* yy_c_buf_p;
+
+ int yy_init; // whether we need to initialize
+ int yy_start; // start state number
+
+ // Flag which is used to allow yywrap()'s to do buffer switches
+ // instead of setting up a fresh yyin. A bit of a hack ...
+ int yy_did_buffer_switch_on_eof;
+
+ // The following are not always needed, but may be depending
+ // on use of certain flex features (like REJECT or yymore()).
+
+ yy_state_type yy_last_accepting_state;
+ char* yy_last_accepting_cpos;
+
+ yy_state_type* yy_state_buf;
+ yy_state_type* yy_state_ptr;
+
+ char* yy_full_match;
+ int* yy_full_state;
+ int yy_full_lp;
+
+ int yy_lp;
+ int yy_looking_for_trail_begin;
+
+ int yy_more_flag;
+ int yy_more_len;
+ int yy_more_offset;
+ int yy_prev_more_offset;
+
+ private:
+
+};
+
+#endif
diff --git a/writerfilter/source/rtftok/RTFParseException.cxx b/writerfilter/source/rtftok/RTFParseException.cxx
new file mode 100644
index 000000000000..75212471e02f
--- /dev/null
+++ b/writerfilter/source/rtftok/RTFParseException.cxx
@@ -0,0 +1,33 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <rtftok/RTFParseException.hxx>
+
+writerfilter::rtftok::RTFParseException::RTFParseException(char * /*message*/)
+{
+}
+
diff --git a/writerfilter/source/rtftok/RTFScanner.lex b/writerfilter/source/rtftok/RTFScanner.lex
new file mode 100644
index 000000000000..e5b4c63b397a
--- /dev/null
+++ b/writerfilter/source/rtftok/RTFScanner.lex
@@ -0,0 +1,333 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+/* compile with flex++ -8 -f -+ -Sflex.skl -ortfparser.cxx rtfparser.lex */
+%option yylineno
+%{
+ //#include <io.h>
+#include <math.h>
+#include <string.h>
+#include <osl/file.h>
+#include <assert.h>
+#include <vector>
+
+#if defined (UNX)
+ #define stricmp strcasecmp
+#endif
+
+writerfilter::rtftok::RTFScanner* writerfilter::rtftok::RTFScanner::createRTFScanner(class writerfilter::rtftok::RTFInputSource& inputSource, writerfilter::rtftok::RTFScannerHandler &eventHandler)
+{
+ return new yyFlexLexer(&inputSource, eventHandler);
+}
+
+
+
+extern "C" {
+//int isatty(int fd) { return 0; }
+int yywrap(void) { return 1; }
+}
+
+/*
+oslFileHandle yy_osl_in=NULL;
+#define YY_INPUT(buf,result,max_size) \
+{\
+{\
+ assert(yy_osl_in!=NULL);\
+ sal_Bool isEOF;\
+ oslFileError ret=osl_isEndOfFile( yy_osl_in, &isEOF );\
+ assert(ret==osl_File_E_None);\
+ if (isEOF)\
+ {\
+ result=YY_NULL;\
+ }\
+ else\
+ {\
+ sal_uInt64 bytesRead;\
+ ret=osl_readFile( yy_osl_in, buf, max_size, &bytesRead);\
+ assert(ret==osl_File_E_None);\
+ result = bytesRead; \
+ }\
+}\
+}
+*/
+
+//extern RtfTokenizer* this;
+void yyFlexLexer::split_ctrl(char *_yytext, char* token, char *value)
+ {
+ int i=0; // skip first '\'
+ while(_yytext[i]!=0 && (_yytext[i]=='\r' || _yytext[i]=='\n')) i++;
+ while(_yytext[i]!=0 && (_yytext[i]<'A' || (_yytext[i]>'Z' && _yytext[i]<'a') || _yytext[i]>'z')) i++;
+ while(_yytext[i]!=0 && _yytext[i]>='A') *(token++)=_yytext[i++];
+ *token=0;
+ while(_yytext[i]!=0 && _yytext[i]>' ') *(value++)=_yytext[i++];
+ *value=0;
+ }
+
+ void yyFlexLexer::raise_ctrl(char* _yytext)
+ {
+ char token[50];
+ char value[50];
+ split_ctrl(_yytext, token, value);
+ eventHandler.ctrl(token, value);
+ }
+
+ void yyFlexLexer::raise_dest(char* _yytext)
+ {
+ char token[50];
+ char value[50];
+ split_ctrl(_yytext, token, value);
+ eventHandler.dest(token, value);
+ }
+
+#define _num_of_destctrls (sizeof(_destctrls)/sizeof(_destctrls[0]))
+static const char* _destctrls[] = {
+"aftncn",
+"aftnsep",
+"aftnsepc",
+"annotation",
+"atnauthor",
+"atndate",
+"atnicn",
+"atnid",
+"atnparent",
+"atnref",
+"atntime",
+"atrfend",
+"atrfstart",
+"author",
+"background",
+"bkmkend",
+"bkmkstart",
+"buptim",
+"category",
+"colortbl",
+"comment",
+"company",
+"creatim",
+"datafield",
+"do",
+"doccomm",
+"docvar",
+"dptxbxtext",
+"falt",
+"fchars",
+"ffdeftext",
+"ffentrymcr",
+"ffexitmcr",
+"ffformat",
+"ffhelptext",
+"ffl",
+"ffname",
+"ffstattext",
+"field",
+"file",
+"filetbl",
+"fldinst",
+"fldrslt",
+"fldtype",
+"fname",
+"fontemb",
+"fontfile",
+"fonttbl",
+"footer",
+"footer",
+"footerf",
+"footerl",
+"footnote",
+"formfield",
+"ftncn",
+"ftnsep",
+"ftnsepc",
+"g",
+"generator",
+"gridtbl",
+"header",
+"header",
+"headerf",
+"headerl",
+"htmltag",
+"info",
+"keycode",
+"keywords",
+"lchars",
+"levelnumbers",
+"leveltext",
+"lfolevel",
+"list",
+"listlevel",
+"listname",
+"listoverride",
+"listoverridetable",
+"listtable",
+"listtext",
+"manager",
+"mhtmltag",
+"nesttableprops",
+"nextfile",
+"nonesttables",
+"nonshppict",
+"objalias",
+"objclass",
+"objdata",
+"object",
+"objname",
+"objsect",
+"objtime",
+"oldcprops",
+"oldpprops",
+"oldsprops",
+"oldtprops",
+"operator",
+"panose",
+"pgp",
+"pgptbl",
+"picprop",
+"pict",
+"pn",
+"pnseclvl",
+"pntext",
+"pntxta",
+"pntxtb",
+"printim",
+"private",
+"pwd",
+"pxe",
+"result",
+"revtbl",
+"revtim",
+"rsidtbl",
+"rtf",
+"rxe",
+"shp",
+"shpgrp",
+"shpinst",
+"shppict",
+"shprslt",
+"shptxt",
+"sn",
+"sp",
+"stylesheet",
+"subject",
+"sv",
+"tc",
+"template",
+"title",
+"txe",
+"ud",
+"upr",
+"urtf",
+"userprops",
+"xe"
+};
+
+ void yyFlexLexer::raise_destOrCtrl(char* _yytext)
+ {
+ char token[50];
+ char value[50];
+ split_ctrl(_yytext, token, value);
+ char* result=(char*)bsearch(token, _destctrls, _num_of_destctrls, 20, (int (*)(const void*, const void*))stricmp);
+ if (result)
+ {
+ eventHandler.dest(token, value);
+ }
+ else
+ {
+ eventHandler.lbrace();
+ eventHandler.ctrl(token, value);
+ }
+ }
+
+%}
+
+%%
+\{\\upr\{" "? { /* skip upr destination */
+ int c;
+ int br=1;
+ while (br>0 && (c = yyinput()) != EOF)
+ {
+ if (c=='}') br--;
+ if (c=='{') br++;
+ }
+ eventHandler.lbrace();
+ num_chars+=yyleng;
+}
+
+
+\\bin(("+"|"-")?[0-9]*)?" "? {
+ raise_dest(yytext);
+ num_chars+=yyleng;
+ int len=atoi(yytext+4);
+ num_chars+=len;
+ // pictureBytes=2*len;
+ while ( len )
+ {
+ int c = yyinput();
+ eventHandler.addBinData((unsigned char)c);
+ len--;
+ }
+ eventHandler.rbrace();
+}
+
+\{[\r\n]*\\\*\\[A-Za-z]+(("+"|"-")?[0-9]*)?" "? { /* stared dest word */
+ raise_dest(yytext);
+ num_chars+=yyleng;
+}
+\{[\r\n]*\\[A-Za-z]+(("+"|"-")?[0-9]*)?" "? { /* dest word */
+ raise_destOrCtrl(yytext);
+}
+\\[A-Za-z]+(("+"|"-")?[0-9]*)?" "? { /* ctrl word */
+ raise_ctrl(yytext);
+ star_flag=0;
+ num_chars+=yyleng;
+}
+\\\'[A-Fa-f0-9][A-Fa-f0-9] { /* hex char */
+ eventHandler.addHexChar(yytext);
+ num_chars+=yyleng;
+}
+\\* { /* star */
+ star_flag=1;
+ num_chars+=yyleng;
+}
+\{ { /* lbrace */
+ eventHandler.lbrace();
+ num_chars+=yyleng;
+}
+\} { /* rbrace */
+ eventHandler.rbrace();
+ num_chars+=yyleng;
+}
+\\\| { num_chars+=yyleng;}
+\\~ {num_chars+=yyleng; eventHandler.addCharU(0xa0);}
+\\- {num_chars+=yyleng;}
+\\_ {num_chars+=yyleng;}
+\\\: {num_chars+=yyleng;}
+\n { ++num_lines;num_chars+=yyleng;}
+\r {num_chars+=yyleng;}
+\t {num_chars+=yyleng;}
+" "(" "+) { eventHandler.addSpaces(yyleng); num_chars+=yyleng;}
+. { eventHandler.addChar(yytext[0]); num_chars+=yyleng;}
+%%
diff --git a/writerfilter/source/rtftok/RTFScanner.skl b/writerfilter/source/rtftok/RTFScanner.skl
new file mode 100644
index 000000000000..ffcca566e267
--- /dev/null
+++ b/writerfilter/source/rtftok/RTFScanner.skl
@@ -0,0 +1,1537 @@
+#define FLEX_SCANNER
+#define YY_FLEX_MAJOR_VERSION 2
+#define YY_FLEX_MINOR_VERSION 5
+
+%-
+#include <stdio.h>
+%*
+
+
+/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+#ifdef c_plusplus
+#ifndef __cplusplus
+#define __cplusplus
+#endif
+#endif
+
+
+#ifdef __cplusplus
+
+#include <math.h>
+#include <osl/file.h>
+#include <rtl/alloc.h>
+#include <rtftok/RTFInputSource.hxx>
+#include <rtftok/RTFParseException.hxx>
+
+static const int EOF=0;
+
+%+
+//class istream;
+%*
+//#include <unistd.h>
+
+/* Use prototypes in function declarations. */
+#define YY_USE_PROTOS
+
+/* The "const" storage-class-modifier is valid. */
+#define YY_USE_CONST
+
+#else /* ! __cplusplus */
+
+#if __STDC__
+
+#define YY_USE_PROTOS
+#define YY_USE_CONST
+
+#endif /* __STDC__ */
+#endif /* ! __cplusplus */
+
+#ifdef __TURBOC__
+ #pragma warn -rch
+ #pragma warn -use
+#include <io.h>
+#include <stdlib.h>
+#define YY_USE_CONST
+#define YY_USE_PROTOS
+#endif
+
+#ifdef YY_USE_CONST
+#define yyconst const
+#else
+#define yyconst
+#endif
+
+
+#ifdef YY_USE_PROTOS
+#define YY_PROTO(proto) proto
+#else
+#define YY_PROTO(proto) ()
+#endif
+
+/* Returned upon end-of-file. */
+#define YY_NULL 0
+
+/* Promotes a possibly negative, possibly signed char to an unsigned
+ * integer for use as an array index. If the signed char is negative,
+ * we want to instead treat it as an 8-bit unsigned char, hence the
+ * double cast.
+ */
+#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+
+/* Enter a start condition. This macro really ought to take a parameter,
+ * but we do it the disgusting crufty way forced on us by the ()-less
+ * definition of BEGIN.
+ */
+#define BEGIN yy_start = 1 + 2 *
+
+/* Translate the current start state into a value that can be later handed
+ * to BEGIN to return to the state. The YYSTATE alias is for lex
+ * compatibility.
+ */
+#define YY_START ((yy_start - 1) / 2)
+#define YYSTATE YY_START
+
+/* Action number for EOF rule of a given start state. */
+#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+
+/* Special action meaning "start processing a new file". */
+#define YY_NEW_FILE yyrestart( yyin )
+
+#define YY_END_OF_BUFFER_CHAR 0
+
+/* Size of default input buffer. */
+#define YY_BUF_SIZE 16384
+
+typedef struct yy_buffer_state *YY_BUFFER_STATE;
+
+extern int yyleng;
+%-
+extern FILE *yyin, *yyout;
+%*
+
+#define EOB_ACT_CONTINUE_SCAN 0
+#define EOB_ACT_END_OF_FILE 1
+#define EOB_ACT_LAST_MATCH 2
+
+/* The funky do-while in the following #define is used to turn the definition
+ * int a single C statement (which needs a semi-colon terminator). This
+ * avoids problems with code like:
+ *
+ * if ( condition_holds )
+ * yyless( 5 );
+ * else
+ * do_something_else();
+ *
+ * Prior to using the do-while the compiler would get upset at the
+ * "else" because it interpreted the "if" statement as being all
+ * done when it reached the ';' after the yyless() call.
+ */
+
+/* Return all but the first 'n' matched characters back to the input stream. */
+
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ *yy_cp = yy_hold_char; \
+ YY_RESTORE_YY_MORE_OFFSET \
+ yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+ while ( 0 )
+
+#define unput(c) yyunput( c, yytext_ptr )
+
+/* The following is because we cannot portably get our hands on size_t
+ * (without autoconf's help, which isn't available because we want
+ * flex-generated scanners to compile on their own).
+ */
+typedef unsigned int yy_size_t;
+
+
+struct yy_buffer_state
+ {
+%-
+ FILE *yy_input_file;
+%+
+// istream* yy_input_file;
+ writerfilter::rtftok::RTFInputSource *yy_input_file;
+%*
+
+ char *yy_ch_buf; /* input buffer */
+ char *yy_buf_pos; /* current position in input buffer */
+
+ /* Size of input buffer in bytes, not including room for EOB
+ * characters.
+ */
+ yy_size_t yy_buf_size;
+
+ /* Number of characters read into yy_ch_buf, not including EOB
+ * characters.
+ */
+ int yy_n_chars;
+
+ /* Whether we "own" the buffer - i.e., we know we created it,
+ * and can realloc() it to grow it, and should free() it to
+ * delete it.
+ */
+ int yy_is_our_buffer;
+
+ /* Whether this is an "interactive" input source; if so, and
+ * if we're using stdio for input, then we want to use getc()
+ * instead of fread(), to make sure we stop fetching input after
+ * each newline.
+ */
+ int yy_is_interactive;
+
+ /* Whether we're considered to be at the beginning of a line.
+ * If so, '^' rules will be active on the next match, otherwise
+ * not.
+ */
+ int yy_at_bol;
+
+ /* Whether to try to fill the input buffer when we reach the
+ * end of it.
+ */
+ int yy_fill_buffer;
+
+ int yy_buffer_status;
+#define YY_BUFFER_NEW 0
+#define YY_BUFFER_NORMAL 1
+ /* When an EOF's been seen but there's still some text to process
+ * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ * shouldn't try reading from the input source any more. We might
+ * still have a bunch of tokens to match, though, because of
+ * possible backing-up.
+ *
+ * When we actually see the EOF, we change the status to "new"
+ * (via yyrestart()), so that the user can continue scanning by
+ * just pointing yyin at a new input file.
+ */
+#define YY_BUFFER_EOF_PENDING 2
+ };
+
+%- Standard (non-C++) definition
+static YY_BUFFER_STATE yy_current_buffer = 0;
+%*
+
+/* We provide macros for accessing buffer states in case in the
+ * future we want to put the buffer states in a more general
+ * "scanner state".
+ */
+#define YY_CURRENT_BUFFER yy_current_buffer
+
+
+%- Standard (non-C++) definition
+/* yy_hold_char holds the character lost when yytext is formed. */
+static char yy_hold_char;
+
+static int yy_n_chars; /* number of characters read into yy_ch_buf */
+
+
+int yyleng;
+
+/* Points to current character in buffer. */
+static char *yy_c_buf_p = (char *) 0;
+static int yy_init = 1; /* whether we need to initialize */
+static int yy_start = 0; /* start state number */
+
+/* Flag which is used to allow yywrap()'s to do buffer switches
+ * instead of setting up a fresh yyin. A bit of a hack ...
+ */
+static int yy_did_buffer_switch_on_eof;
+
+void yyrestart YY_PROTO(( FILE *input_file ));
+
+void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+void yy_load_buffer_state YY_PROTO(( void ));
+YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+
+YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+%*
+
+static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
+static void yy_flex_free YY_PROTO(( void * ));
+
+#define yy_new_buffer yy_create_buffer
+
+#define yy_set_interactive(is_interactive) \
+ { \
+ if ( ! yy_current_buffer ) \
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ yy_current_buffer->yy_is_interactive = is_interactive; \
+ }
+
+#define yy_set_bol(at_bol) \
+ { \
+ if ( ! yy_current_buffer ) \
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ yy_current_buffer->yy_at_bol = at_bol; \
+ }
+
+#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+
+%% yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here
+
+%- Standard (non-C++) definition
+static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+static int yy_get_next_buffer YY_PROTO(( void ));
+static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+%*
+
+/* Done after the current pattern has been matched and before the
+ * corresponding action - sets up yytext.
+ */
+#define YY_DO_BEFORE_ACTION \
+ yytext_ptr = yy_bp; \
+%% code to fiddle yytext and yyleng for yymore() goes here
+ yy_hold_char = *yy_cp; \
+ *yy_cp = '\0'; \
+%% code to copy yytext_ptr to yytext[] goes here, if %array
+ yy_c_buf_p = yy_cp;
+
+%% data tables for the DFA and the user's section 1 definitions go here
+
+/* Macros after this point can all be overridden by user definitions in
+ * section 1.
+ */
+
+#ifndef YY_SKIP_YYWRAP
+#ifdef __cplusplus
+extern "C" int yywrap YY_PROTO(( void ));
+#else
+extern int yywrap YY_PROTO(( void ));
+#endif
+#endif
+
+%-
+#ifndef YY_NO_UNPUT
+static void yyunput YY_PROTO(( int c, char *buf_ptr ));
+#endif
+%*
+
+#ifndef yytext_ptr
+static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+#endif
+
+#ifdef YY_NEED_STRLEN
+static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+#endif
+
+#ifndef YY_NO_INPUT
+%- Standard (non-C++) definition
+#ifdef __cplusplus
+static int yyinput YY_PROTO(( void ));
+#else
+static int input YY_PROTO(( void ));
+#endif
+%*
+#endif
+
+#if YY_STACK_USED
+static int yy_start_stack_ptr = 0;
+static int yy_start_stack_depth = 0;
+static int *yy_start_stack = 0;
+#ifndef YY_NO_PUSH_STATE
+static void yy_push_state YY_PROTO(( int new_state ));
+#endif
+#ifndef YY_NO_POP_STATE
+static void yy_pop_state YY_PROTO(( void ));
+#endif
+#ifndef YY_NO_TOP_STATE
+static int yy_top_state YY_PROTO(( void ));
+#endif
+
+#else
+#define YY_NO_PUSH_STATE 1
+#define YY_NO_POP_STATE 1
+#define YY_NO_TOP_STATE 1
+#endif
+
+#ifdef YY_MALLOC_DECL
+YY_MALLOC_DECL
+#else
+#if __STDC__
+#ifndef __cplusplus
+#include <stdlib.h>
+#endif
+#else
+/* Just try to get by without declaring the routines. This will fail
+ * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+ * or sizeof(void*) != sizeof(int).
+ */
+#endif
+#endif
+
+/* Amount of stuff to slurp up with each read. */
+#ifndef YY_READ_BUF_SIZE
+#define YY_READ_BUF_SIZE 8192
+#endif
+
+/* Copy whatever the last rule matched to the standard output. */
+
+#ifndef ECHO
+%- Standard (non-C++) definition
+/* This used to be an fputs(), but since the string might contain NUL's,
+ * we now use fwrite().
+ */
+#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+%+ C++ definition
+#define ECHO LexerOutput( yytext, yyleng )
+%*
+#endif
+
+/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
+ * is returned in "result".
+ */
+#ifndef YY_INPUT
+#define YY_INPUT(buf,result,max_size) \
+%% fread()/read() definition of YY_INPUT goes here unless we're doing C++
+%+ C++ definition
+{result=yyin->read(buf, max_size);}
+%*
+#endif
+
+/* No semi-colon after return; correct usage is to write "yyterminate();" -
+ * we don't want an extra ';' after the "return" because that will cause
+ * some compilers to complain about unreachable statements.
+ */
+#ifndef yyterminate
+#define yyterminate() return YY_NULL
+#endif
+
+/* Number of entries by which start-condition stack grows. */
+#ifndef YY_START_STACK_INCR
+#define YY_START_STACK_INCR 25
+#endif
+
+/* Report a fatal error. */
+#ifndef YY_FATAL_ERROR
+%-
+#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+%+
+#define YY_FATAL_ERROR(msg) LexerError( msg )
+%*
+#endif
+
+/* Default declaration of generated scanner - a define so the user can
+ * easily add parameters.
+ */
+#ifndef YY_DECL
+%- Standard (non-C++) definition
+#define YY_DECL int yylex YY_PROTO(( void ))
+%+ C++ definition
+#define YY_DECL int yyFlexLexer::yylex()
+%*
+#endif
+
+/* Code executed at the beginning of each rule, after yytext and yyleng
+ * have been set up.
+ */
+#ifndef YY_USER_ACTION
+#define YY_USER_ACTION
+#endif
+
+/* Code executed at the end of each rule. */
+#ifndef YY_BREAK
+#define YY_BREAK break;
+#endif
+
+%% YY_RULE_SETUP definition goes here
+
+YY_DECL
+ {
+ register yy_state_type yy_current_state;
+ register char *yy_cp, *yy_bp;
+ register int yy_act;
+
+%% user's declarations go here
+
+ if ( yy_init )
+ {
+ yy_init = 0;
+
+#ifdef YY_USER_INIT
+ YY_USER_INIT;
+#endif
+
+ if ( ! yy_start )
+ yy_start = 1; /* first start state */
+
+ if ( ! yyin )
+%-
+ yyin = stdin;
+%+
+// yyin = &cin;
+ yyin = NULL;
+%*
+
+ if ( ! yyout )
+%-
+ yyout = stdout;
+%+
+// yyout = &cout;
+ yyout = NULL;
+%*
+
+ if ( ! yy_current_buffer )
+ yy_current_buffer =
+ yy_create_buffer( yyin, YY_BUF_SIZE );
+
+ yy_load_buffer_state();
+ }
+
+ while ( 1 ) /* loops until end-of-file is reached */
+ {
+%% yymore()-related code goes here
+ yy_cp = yy_c_buf_p;
+
+ /* Support of yytext. */
+ *yy_cp = yy_hold_char;
+
+ /* yy_bp points to the position in yy_ch_buf of the start of
+ * the current run.
+ */
+ yy_bp = yy_cp;
+
+%% code to set up and find next match goes here
+
+yy_find_action:
+%% code to find the action number goes here
+
+ YY_DO_BEFORE_ACTION;
+
+%% code for yylineno update goes here
+
+do_action: /* This label is used only to access EOF actions. */
+
+%% debug code goes here
+
+ switch ( yy_act )
+ { /* beginning of action switch */
+%% actions go here
+
+ case YY_END_OF_BUFFER:
+ {
+ /* Amount of text matched not including the EOB char. */
+ int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = yy_hold_char;
+ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+ {
+ /* We're scanning a new file or input source. It's
+ * possible that this happened because the user
+ * just pointed yyin at a new source and called
+ * yylex(). If so, then we have to assure
+ * consistency between yy_current_buffer and our
+ * globals. Here is the right place to do so, because
+ * this is the first action (other than possibly a
+ * back-up) that will match for the new input source.
+ */
+ yy_n_chars = yy_current_buffer->yy_n_chars;
+ yy_current_buffer->yy_input_file = yyin;
+ yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+ }
+
+ /* Note that here we test for yy_c_buf_p "<=" to the position
+ * of the first EOB in the buffer, since yy_c_buf_p will
+ * already have been incremented past the NUL character
+ * (since all states make transitions on EOB to the
+ * end-of-buffer state). Contrast this with the test
+ * in input().
+ */
+ if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ { /* This was really a NUL. */
+ yy_state_type yy_next_state;
+
+ yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state();
+
+ /* Okay, we're now positioned to make the NUL
+ * transition. We couldn't have
+ * yy_get_previous_state() go ahead and do it
+ * for us because it doesn't know how to deal
+ * with the possibility of jamming (and we don't
+ * want to build jamming into it because then it
+ * will run more slowly).
+ */
+
+ yy_next_state = yy_try_NUL_trans( yy_current_state );
+
+ yy_bp = yytext_ptr + YY_MORE_ADJ;
+
+ if ( yy_next_state )
+ {
+ /* Consume the NUL. */
+ yy_cp = ++yy_c_buf_p;
+ yy_current_state = yy_next_state;
+ goto yy_match;
+ }
+
+ else
+ {
+%% code to do back-up for compressed tables and set up yy_cp goes here
+ goto yy_find_action;
+ }
+ }
+
+ else switch ( yy_get_next_buffer() )
+ {
+ case EOB_ACT_END_OF_FILE:
+ {
+ yy_did_buffer_switch_on_eof = 0;
+
+ if ( yywrap() )
+ {
+ /* Note: because we've taken care in
+ * yy_get_next_buffer() to have set up
+ * yytext, we can now set up
+ * yy_c_buf_p so that if some total
+ * hoser (like flex itself) wants to
+ * call the scanner after we return the
+ * YY_NULL, it'll still work - another
+ * YY_NULL will get returned.
+ */
+ yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+
+ yy_act = YY_STATE_EOF(YY_START);
+ goto do_action;
+ }
+
+ else
+ {
+ if ( ! yy_did_buffer_switch_on_eof )
+ YY_NEW_FILE;
+ }
+ break;
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ yy_c_buf_p =
+ yytext_ptr + yy_amount_of_matched_text;
+
+ yy_current_state = yy_get_previous_state();
+
+ yy_cp = yy_c_buf_p;
+ yy_bp = yytext_ptr + YY_MORE_ADJ;
+ goto yy_match;
+
+ case EOB_ACT_LAST_MATCH:
+ yy_c_buf_p =
+ &yy_current_buffer->yy_ch_buf[yy_n_chars];
+
+ yy_current_state = yy_get_previous_state();
+
+ yy_cp = yy_c_buf_p;
+ yy_bp = yytext_ptr + YY_MORE_ADJ;
+ goto yy_find_action;
+ }
+ break;
+ }
+
+ default:
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--no action found" );
+ } /* end of action switch */
+ } /* end of scanning one token */
+ } /* end of yylex */
+
+%+
+yyFlexLexer::yyFlexLexer( writerfilter::rtftok::RTFInputSource* arg_yyin, class writerfilter::rtftok::RTFScannerHandler &eventHandler )
+: writerfilter::rtftok::RTFScanner(eventHandler)
+ {
+ yyin = arg_yyin;
+ yyout = 0;
+ yy_c_buf_p = 0;
+ yy_init = 1;
+ yy_start = 0;
+ yy_flex_debug = 0;
+ yylineno = 1; // this will only get updated if %option yylineno
+
+ yy_did_buffer_switch_on_eof = 0;
+
+ yy_looking_for_trail_begin = 0;
+ yy_more_flag = 0;
+ yy_more_len = 0;
+ yy_more_offset = yy_prev_more_offset = 0;
+
+ yy_start_stack_ptr = yy_start_stack_depth = 0;
+ yy_start_stack = 0;
+
+ yy_current_buffer = 0;
+
+#ifdef YY_USES_REJECT
+ yy_state_buf = new yy_state_type[YY_BUF_SIZE + 2];
+#else
+ yy_state_buf = 0;
+#endif
+
+ num_lines=0;
+ num_chars=0;
+ star_flag=false;
+ }
+
+yyFlexLexer::~yyFlexLexer()
+ {
+ delete yy_state_buf;
+ yy_delete_buffer( yy_current_buffer );
+ }
+
+void yyFlexLexer::switch_streams( writerfilter::rtftok::RTFInputSource* new_in, ostream* new_out )
+ {
+ if ( new_in )
+ {
+ yy_delete_buffer( yy_current_buffer );
+ yy_switch_to_buffer( yy_create_buffer( new_in, YY_BUF_SIZE ) );
+ }
+
+ if ( new_out )
+ yyout = new_out;
+ }
+
+#if 0
+#ifdef YY_INTERACTIVE
+int yyFlexLexer::LexerInput( char* buf, int /* max_size */ )
+#else
+int yyFlexLexer::LexerInput( char* buf, int max_size )
+#endif
+{
+ OSL_ASSERT(yyin!=NULL);
+ ::com::sun::star::uno::Sequence< ::sal_Int8 > buffer;
+ int len=yyin->readSomeBytes(buffer,max_size);
+ if (len>0)
+ {
+ sal_Int8 *_buffer=buffer.getArray();
+ memcpy(buf, _buffer, len);
+ return len;
+ }
+ else
+ {
+ return YY_NULL;
+ }
+}
+#endif
+
+void yyFlexLexer::LexerOutput( const char* buf, int size )
+ {
+// (void) yyout->write( buf, size );
+ }
+%*
+
+/* yy_get_next_buffer - try to read in a new buffer
+ *
+ * Returns a code representing an action:
+ * EOB_ACT_LAST_MATCH -
+ * EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+ * EOB_ACT_END_OF_FILE - end of file
+ */
+
+%-
+static int yy_get_next_buffer()
+%+
+int yyFlexLexer::yy_get_next_buffer()
+%*
+ {
+ register char *dest = yy_current_buffer->yy_ch_buf;
+ register char *source = yytext_ptr;
+ register int number_to_move, i;
+ int ret_val;
+
+ if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+ YY_FATAL_ERROR(
+ "fatal flex scanner internal error--end of buffer missed" );
+
+ if ( yy_current_buffer->yy_fill_buffer == 0 )
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+ {
+ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+ }
+
+ else
+ {
+ /* We matched some text prior to the EOB, first
+ * process it.
+ */
+ return EOB_ACT_LAST_MATCH;
+ }
+ }
+
+ /* Try to read more data. */
+
+ /* First move last chars to start of buffer. */
+ number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+
+ for ( i = 0; i < number_to_move; ++i )
+ *(dest++) = *(source++);
+
+ if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+ yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+
+ else
+ {
+ int num_to_read =
+ yy_current_buffer->yy_buf_size - number_to_move - 1;
+
+ while ( num_to_read <= 0 )
+ { /* Not enough room in the buffer - grow it. */
+#ifdef YY_USES_REJECT
+ YY_FATAL_ERROR(
+"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+#else
+
+ /* just a shorter name for the current buffer */
+ YY_BUFFER_STATE b = yy_current_buffer;
+
+ int yy_c_buf_p_offset =
+ (int) (yy_c_buf_p - b->yy_ch_buf);
+
+ if ( b->yy_is_our_buffer )
+ {
+ int new_size = b->yy_buf_size * 2;
+
+ if ( new_size <= 0 )
+ b->yy_buf_size += b->yy_buf_size / 8;
+ else
+ b->yy_buf_size *= 2;
+
+ b->yy_ch_buf = (char *)
+ /* Include room in for 2 EOB chars. */
+ yy_flex_realloc( (void *) b->yy_ch_buf,
+ b->yy_buf_size + 2 );
+ }
+ else
+ /* Can't grow it, we don't own it. */
+ b->yy_ch_buf = 0;
+
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR(
+ "fatal error - scanner input buffer overflow" );
+
+ yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+
+ num_to_read = yy_current_buffer->yy_buf_size -
+ number_to_move - 1;
+#endif
+ }
+
+ if ( num_to_read > YY_READ_BUF_SIZE )
+ num_to_read = YY_READ_BUF_SIZE;
+
+ /* Read in more data. */
+ YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+ yy_n_chars, num_to_read );
+
+ yy_current_buffer->yy_n_chars = yy_n_chars;
+ }
+
+ if ( yy_n_chars == 0 )
+ {
+ if ( number_to_move == YY_MORE_ADJ )
+ {
+ ret_val = EOB_ACT_END_OF_FILE;
+ yyrestart( yyin );
+ }
+
+ else
+ {
+ ret_val = EOB_ACT_LAST_MATCH;
+ yy_current_buffer->yy_buffer_status =
+ YY_BUFFER_EOF_PENDING;
+ }
+ }
+
+ else
+ ret_val = EOB_ACT_CONTINUE_SCAN;
+
+ yy_n_chars += number_to_move;
+ yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+ yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+
+ yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+
+ return ret_val;
+ }
+
+
+/* yy_get_previous_state - get the state just before the EOB char was reached */
+
+%-
+static yy_state_type yy_get_previous_state()
+%+
+yy_state_type yyFlexLexer::yy_get_previous_state()
+%*
+ {
+ register yy_state_type yy_current_state;
+ register char *yy_cp;
+
+%% code to get the start state into yy_current_state goes here
+
+ for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+ {
+%% code to find the next state goes here
+ }
+
+ return yy_current_state;
+ }
+
+
+/* yy_try_NUL_trans - try to make a transition on the NUL character
+ *
+ * synopsis
+ * next_state = yy_try_NUL_trans( current_state );
+ */
+
+%-
+#ifdef YY_USE_PROTOS
+static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+#else
+static yy_state_type yy_try_NUL_trans( yy_current_state )
+yy_state_type yy_current_state;
+#endif
+%+
+yy_state_type yyFlexLexer::yy_try_NUL_trans( yy_state_type yy_current_state )
+%*
+ {
+ register int yy_is_jam;
+%% code to find the next state, and perhaps do backing up, goes here
+
+ return yy_is_jam ? 0 : yy_current_state;
+ }
+
+
+%-
+#ifndef YY_NO_UNPUT
+#ifdef YY_USE_PROTOS
+static void yyunput( int c, register char *yy_bp )
+#else
+static void yyunput( c, yy_bp )
+int c;
+register char *yy_bp;
+#endif
+%+
+void yyFlexLexer::yyunput( int c, register char* yy_bp )
+%*
+ {
+ register char *yy_cp = yy_c_buf_p;
+
+ /* undo effects of setting up yytext */
+ *yy_cp = yy_hold_char;
+
+ if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ { /* need to shift things up to make room */
+ /* +2 for EOB chars. */
+ register int number_to_move = yy_n_chars + 2;
+ register char *dest = &yy_current_buffer->yy_ch_buf[
+ yy_current_buffer->yy_buf_size + 2];
+ register char *source =
+ &yy_current_buffer->yy_ch_buf[number_to_move];
+
+ while ( source > yy_current_buffer->yy_ch_buf )
+ *--dest = *--source;
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+ yy_current_buffer->yy_n_chars =
+ yy_n_chars = yy_current_buffer->yy_buf_size;
+
+ if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ }
+
+ *--yy_cp = (char) c;
+
+%% update yylineno here
+
+ yytext_ptr = yy_bp;
+ yy_hold_char = *yy_cp;
+ yy_c_buf_p = yy_cp;
+ }
+%-
+#endif /* ifndef YY_NO_UNPUT */
+%*
+
+
+%-
+#ifdef __cplusplus
+static int yyinput()
+#else
+static int input()
+#endif
+%+
+int yyFlexLexer::yyinput()
+%*
+ {
+ int c;
+
+ *yy_c_buf_p = yy_hold_char;
+
+ if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+ {
+ /* yy_c_buf_p now points to the character we want to return.
+ * If this occurs *before* the EOB characters, then it's a
+ * valid NUL; if not, then we've hit the end of the buffer.
+ */
+ if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ /* This was really a NUL. */
+ *yy_c_buf_p = '\0';
+
+ else
+ { /* need more input */
+ int offset = yy_c_buf_p - yytext_ptr;
+ ++yy_c_buf_p;
+
+ switch ( yy_get_next_buffer() )
+ {
+ case EOB_ACT_LAST_MATCH:
+ /* This happens because yy_g_n_b()
+ * sees that we've accumulated a
+ * token and flags that we need to
+ * try matching the token before
+ * proceeding. But for input(),
+ * there's no matching to consider.
+ * So convert the EOB_ACT_LAST_MATCH
+ * to EOB_ACT_END_OF_FILE.
+ */
+
+ /* Reset buffer status. */
+ yyrestart( yyin );
+
+ /* fall through */
+
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap() )
+ return EOF;
+
+ if ( ! yy_did_buffer_switch_on_eof )
+ YY_NEW_FILE;
+#ifdef __cplusplus
+ return yyinput();
+#else
+ return input();
+#endif
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+ yy_c_buf_p = yytext_ptr + offset;
+ break;
+ }
+ }
+ }
+
+ c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
+ *yy_c_buf_p = '\0'; /* preserve yytext */
+ yy_hold_char = *++yy_c_buf_p;
+
+%% update BOL and yylineno
+
+ return c;
+ }
+
+
+%-
+#ifdef YY_USE_PROTOS
+void yyrestart( FILE *input_file )
+#else
+void yyrestart( input_file )
+FILE *input_file;
+#endif
+%+
+void yyFlexLexer::yyrestart( writerfilter::rtftok::RTFInputSource* input_file )
+%*
+ {
+ if ( ! yy_current_buffer )
+ yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+
+ yy_init_buffer( yy_current_buffer, input_file );
+ yy_load_buffer_state();
+ }
+
+
+%-
+#ifdef YY_USE_PROTOS
+void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+#else
+void yy_switch_to_buffer( new_buffer )
+YY_BUFFER_STATE new_buffer;
+#endif
+%+
+void yyFlexLexer::yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+%*
+ {
+ if ( yy_current_buffer == new_buffer )
+ return;
+
+ if ( yy_current_buffer )
+ {
+ /* Flush out information for old buffer. */
+ *yy_c_buf_p = yy_hold_char;
+ yy_current_buffer->yy_buf_pos = yy_c_buf_p;
+ yy_current_buffer->yy_n_chars = yy_n_chars;
+ }
+
+ yy_current_buffer = new_buffer;
+ yy_load_buffer_state();
+
+ /* We don't actually know whether we did this switch during
+ * EOF (yywrap()) processing, but the only time this flag
+ * is looked at is after yywrap() is called, so it's safe
+ * to go ahead and always set it.
+ */
+ yy_did_buffer_switch_on_eof = 1;
+ }
+
+
+%-
+#ifdef YY_USE_PROTOS
+void yy_load_buffer_state( void )
+#else
+void yy_load_buffer_state()
+#endif
+%+
+void yyFlexLexer::yy_load_buffer_state()
+%*
+ {
+ yy_n_chars = yy_current_buffer->yy_n_chars;
+ yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+ yyin = yy_current_buffer->yy_input_file;
+ yy_hold_char = *yy_c_buf_p;
+ }
+
+
+%-
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+#else
+YY_BUFFER_STATE yy_create_buffer( file, size )
+FILE *file;
+int size;
+#endif
+%+
+YY_BUFFER_STATE yyFlexLexer::yy_create_buffer( writerfilter::rtftok::RTFInputSource* file, int size )
+%*
+ {
+ YY_BUFFER_STATE b;
+
+ b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_buf_size = size;
+
+ /* yy_ch_buf has to be 2 characters longer than the size given because
+ * we need to put in 2 end-of-buffer characters.
+ */
+ b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+ if ( ! b->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+
+ b->yy_is_our_buffer = 1;
+
+ yy_init_buffer( b, file );
+
+ return b;
+ }
+
+
+%-
+#ifdef YY_USE_PROTOS
+void yy_delete_buffer( YY_BUFFER_STATE b )
+#else
+void yy_delete_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+%+
+void yyFlexLexer::yy_delete_buffer( YY_BUFFER_STATE b )
+%*
+ {
+ if ( ! b )
+ return;
+
+ if ( b == yy_current_buffer )
+ yy_current_buffer = (YY_BUFFER_STATE) 0;
+
+ if ( b->yy_is_our_buffer )
+ yy_flex_free( (void *) b->yy_ch_buf );
+
+ yy_flex_free( (void *) b );
+ }
+
+
+%-
+#ifndef YY_ALWAYS_INTERACTIVE
+#ifndef YY_NEVER_INTERACTIVE
+extern int isatty YY_PROTO(( int ));
+#endif
+#endif
+
+#ifdef YY_USE_PROTOS
+void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+#else
+void yy_init_buffer( b, file )
+YY_BUFFER_STATE b;
+FILE *file;
+#endif
+
+%+
+//extern "C" int isatty YY_PROTO(( int ));
+void yyFlexLexer::yy_init_buffer( YY_BUFFER_STATE b, writerfilter::rtftok::RTFInputSource* file )
+%*
+
+ {
+ yy_flush_buffer( b );
+
+ b->yy_input_file = file;
+ b->yy_fill_buffer = 1;
+
+%-
+#if YY_ALWAYS_INTERACTIVE
+ b->yy_is_interactive = 1;
+#else
+#if YY_NEVER_INTERACTIVE
+ b->yy_is_interactive = 0;
+#else
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+#endif
+#endif
+%+
+ b->yy_is_interactive = 0;
+%*
+ }
+
+
+%-
+#ifdef YY_USE_PROTOS
+void yy_flush_buffer( YY_BUFFER_STATE b )
+#else
+void yy_flush_buffer( b )
+YY_BUFFER_STATE b;
+#endif
+
+%+
+void yyFlexLexer::yy_flush_buffer( YY_BUFFER_STATE b )
+%*
+ {
+ if ( ! b )
+ return;
+
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+ * a transition to the end-of-buffer state. The second causes
+ * a jam in that state.
+ */
+ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+
+ b->yy_buf_pos = &b->yy_ch_buf[0];
+
+ b->yy_at_bol = 1;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ if ( b == yy_current_buffer )
+ yy_load_buffer_state();
+ }
+%*
+
+
+#ifndef YY_NO_SCAN_BUFFER
+%-
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+#else
+YY_BUFFER_STATE yy_scan_buffer( base, size )
+char *base;
+yy_size_t size;
+#endif
+ {
+ YY_BUFFER_STATE b;
+
+ if ( size < 2 ||
+ base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ base[size-1] != YY_END_OF_BUFFER_CHAR )
+ /* They forgot to leave room for the EOB's. */
+ return 0;
+
+ b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ if ( ! b )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+
+ b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
+ b->yy_buf_pos = b->yy_ch_buf = base;
+ b->yy_is_our_buffer = 0;
+ b->yy_input_file = 0;
+ b->yy_n_chars = b->yy_buf_size;
+ b->yy_is_interactive = 0;
+ b->yy_at_bol = 1;
+ b->yy_fill_buffer = 0;
+ b->yy_buffer_status = YY_BUFFER_NEW;
+
+ yy_switch_to_buffer( b );
+
+ return b;
+ }
+%*
+#endif
+
+
+#ifndef YY_NO_SCAN_STRING
+%-
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+#else
+YY_BUFFER_STATE yy_scan_string( yy_str )
+yyconst char *yy_str;
+#endif
+ {
+ int len;
+ for ( len = 0; yy_str[len]; ++len )
+ ;
+
+ return yy_scan_bytes( yy_str, len );
+ }
+%*
+#endif
+
+
+#ifndef YY_NO_SCAN_BYTES
+%-
+#ifdef YY_USE_PROTOS
+YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+#else
+YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+yyconst char *bytes;
+int len;
+#endif
+ {
+ YY_BUFFER_STATE b;
+ char *buf;
+ yy_size_t n;
+ int i;
+
+ /* Get memory for full buffer, including space for trailing EOB's. */
+ n = len + 2;
+ buf = (char *) yy_flex_alloc( n );
+ if ( ! buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+
+ for ( i = 0; i < len; ++i )
+ buf[i] = bytes[i];
+
+ buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+
+ b = yy_scan_buffer( buf, n );
+ if ( ! b )
+ YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+
+ /* It's okay to grow etc. this buffer, and we should throw it
+ * away when we're done.
+ */
+ b->yy_is_our_buffer = 1;
+
+ return b;
+ }
+%*
+#endif
+
+
+#ifndef YY_NO_PUSH_STATE
+%-
+#ifdef YY_USE_PROTOS
+static void yy_push_state( int new_state )
+#else
+static void yy_push_state( new_state )
+int new_state;
+#endif
+%+
+void yyFlexLexer::yy_push_state( int new_state )
+%*
+ {
+ if ( yy_start_stack_ptr >= yy_start_stack_depth )
+ {
+ yy_size_t new_size;
+
+ yy_start_stack_depth += YY_START_STACK_INCR;
+ new_size = yy_start_stack_depth * sizeof( int );
+
+ if ( ! yy_start_stack )
+ yy_start_stack = (int *) yy_flex_alloc( new_size );
+
+ else
+ yy_start_stack = (int *) yy_flex_realloc(
+ (void *) yy_start_stack, new_size );
+
+ if ( ! yy_start_stack )
+ YY_FATAL_ERROR(
+ "out of memory expanding start-condition stack" );
+ }
+
+ yy_start_stack[yy_start_stack_ptr++] = YY_START;
+
+ BEGIN(new_state);
+ }
+#endif
+
+
+#ifndef YY_NO_POP_STATE
+%-
+static void yy_pop_state()
+%+
+void yyFlexLexer::yy_pop_state()
+%*
+ {
+ if ( --yy_start_stack_ptr < 0 )
+ YY_FATAL_ERROR( "start-condition stack underflow" );
+
+ BEGIN(yy_start_stack[yy_start_stack_ptr]);
+ }
+#endif
+
+
+#ifndef YY_NO_TOP_STATE
+%-
+static int yy_top_state()
+%+
+int yyFlexLexer::yy_top_state()
+%*
+ {
+ return yy_start_stack[yy_start_stack_ptr - 1];
+ }
+#endif
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
+#endif
+
+%-
+#ifdef YY_USE_PROTOS
+static void yy_fatal_error( yyconst char msg[] )
+#else
+static void yy_fatal_error( msg )
+char msg[];
+#endif
+ {
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+ }
+
+%+
+
+void yyFlexLexer::LexerError( yyconst char msg[] )
+ {
+// cerr << msg << '\n';
+// exit( YY_EXIT_FAILURE );
+ throw writerfilter::rtftok::RTFParseException("fatal error: %s"/*, msg*/);
+ }
+%*
+
+
+/* Redefine yyless() so it works in section 3 code. */
+
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up yytext. */ \
+ yytext[yyleng] = yy_hold_char; \
+ yy_c_buf_p = yytext + n; \
+ yy_hold_char = *yy_c_buf_p; \
+ *yy_c_buf_p = '\0'; \
+ yyleng = n; \
+ } \
+ while ( 0 )
+
+
+/* Internal utility routines. */
+
+#ifndef yytext_ptr
+#ifdef YY_USE_PROTOS
+static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+#else
+static void yy_flex_strncpy( s1, s2, n )
+char *s1;
+yyconst char *s2;
+int n;
+#endif
+ {
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
+ }
+#endif
+
+#ifdef YY_NEED_STRLEN
+#ifdef YY_USE_PROTOS
+static int yy_flex_strlen( yyconst char *s )
+#else
+static int yy_flex_strlen( s )
+yyconst char *s;
+#endif
+ {
+ register int n;
+ for ( n = 0; s[n]; ++n )
+ ;
+
+ return n;
+ }
+#endif
+
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_alloc( yy_size_t size )
+#else
+static void *yy_flex_alloc( size )
+yy_size_t size;
+#endif
+ {
+ return (void *) rtl_allocateMemory( size );
+ }
+
+#ifdef YY_USE_PROTOS
+static void *yy_flex_realloc( void *ptr, yy_size_t size )
+#else
+static void *yy_flex_realloc( ptr, size )
+void *ptr;
+yy_size_t size;
+#endif
+ {
+ return (void *) rtl_reallocateMemory( (char *) ptr, size );
+ }
+
+#ifdef YY_USE_PROTOS
+static void yy_flex_free( void *ptr )
+#else
+static void yy_flex_free( ptr )
+void *ptr;
+#endif
+ {
+ rtl_freeMemory( ptr );
+ }
+
+#if YY_MAIN
+int main()
+ {
+ yylex();
+ return 0;
+ }
+#endif
+
diff --git a/writerfilter/source/rtftok/makefile.mk b/writerfilter/source/rtftok/makefile.mk
new file mode 100644
index 000000000000..61399f051e15
--- /dev/null
+++ b/writerfilter/source/rtftok/makefile.mk
@@ -0,0 +1,82 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+PRJ=..$/..
+PRJNAME=writerfilter
+TARGET=rtftok
+#LIBTARGET=NO
+ENABLE_EXCEPTIONS=TRUE
+#USE_DEFFILE=TRUE
+EXTERNAL_WARNINGS_NOT_ERRORS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+.INCLUDE : $(PRJ)$/inc$/writerfilter.mk
+
+#CFLAGS+=-DISOLATION_AWARE_ENABLED -DWIN32_LEAN_AND_MEAN -DXML_UNICODE -D_NTSDK -DUNICODE -D_UNICODE -D_WIN32_WINNT=0x0501
+#CFLAGS+=-wd4710 -wd4711 -wd4514 -wd4619 -wd4217 -wd4820
+
+
+# --- Files --------------------------------------------------------
+
+SLOFILES=$(SLO)$/RTFScanner.obj $(SLO)$/RTFParseException.obj
+
+
+SHL1TARGET=$(TARGET)
+
+SHL1STDLIBS=$(SALLIB)\
+ $(CPPULIB)\
+ $(CPPUHELPERLIB)
+SHL1IMPLIB=i$(SHL1TARGET)
+SHL1USE_EXPORTS=name
+
+SHL1OBJS=$(SLOFILES)
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+DEF1NAME=$(SHL1TARGET)
+DEFLIB1NAME=$(TARGET)
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+RTFSCANNERCXX=$(MISC)/RTFScanner.cxx
+
+GENERATEDFILES=$(RTFSCANNERCXX)
+
+$(RTFSCANNERCXX): RTFScanner.lex RTFScanner.skl FlexLexer.h
+ flex -+ -SRTFScanner.skl -o$@ RTFScanner.lex
+
+$(SLO)/RTFScanner.obj: $(RTFSCANNERCXX)
+
+.PHONY: genmake genclean
+
+genmake: $(GENERATEDFILES)
+
+genclean:
+ rm $(GENERATEDFILES)
diff --git a/writerfilter/unocomponent/component.cxx b/writerfilter/unocomponent/component.cxx
new file mode 100644
index 000000000000..06e837ef4cd6
--- /dev/null
+++ b/writerfilter/unocomponent/component.cxx
@@ -0,0 +1,75 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _CPPUHELPTER_FACTORY_
+#include <cppuhelper/factory.hxx>
+#endif
+#include <com/sun/star/lang/XSingleServiceFactory.hpp>
+
+#ifndef _CPPUHELPER_IMPLEMENTATIONENTRY_
+#include <cppuhelper/implementationentry.hxx>
+#endif
+#include <debugservices/doctok/DocTokTestService.hxx>
+#include <debugservices/doctok/DocTokAnalyzeService.hxx>
+#include <debugservices/ooxml/OOXMLTestService.hxx>
+#include <debugservices/ooxml/OOXMLAnalyzeService.hxx>
+
+#include <stdio.h>
+
+using namespace com::sun::star;
+
+
+extern "C"
+{
+/* shared lib exports implemented with helpers */
+static struct ::cppu::ImplementationEntry s_component_entries [] =
+{//uno -l writerfilter.uno.dll -c debugservices.rtftok.ScannerTestService -- a b c
+ DOCTOK_SCANNERTESTSERVICE_COMPONENT_ENTRY, /* debugservices.doctok.ScannerTestService */
+ DOCTOK_ANALYZESERVICE_COMPONENT_ENTRY, /* debugservices.doctok.AnalyzeService */
+ OOXML_SCANNERTESTSERVICE_COMPONENT_ENTRY, /* debugservices.ooxml.ScannerTestService */
+ OOXML_ANALYZESERVICE_COMPONENT_ENTRY, /* debugservices.ooxml.AnalyzeService */
+ { 0, 0, 0, 0, 0, 0 } // terminate with NULL
+};
+
+
+ void SAL_CALL component_getImplementationEnvironment(const sal_Char ** ppEnvTypeName, uno_Environment ** /*ppEnv*/ )
+{
+ *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+}
+
+void * SAL_CALL component_getFactory(sal_Char const * implName, ::com::sun::star::lang::XMultiServiceFactory * xMgr, ::com::sun::star::registry::XRegistryKey * xRegistry )
+{
+ fprintf(stderr, "Loading service: %s: ", implName);
+
+ void * pResult = ::cppu::component_getFactoryHelper(implName, xMgr, xRegistry, s_component_entries );
+
+ fprintf(stderr, "%p\n", pResult);
+
+ return pResult;
+}
+
+}
diff --git a/writerfilter/unocomponent/debugservices/doctok/DocTokAnalyzeService.cxx b/writerfilter/unocomponent/debugservices/doctok/DocTokAnalyzeService.cxx
new file mode 100644
index 000000000000..9ff3253a161d
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/doctok/DocTokAnalyzeService.cxx
@@ -0,0 +1,293 @@
+/*************************************************************************
+ *
+ * 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 "DocTokAnalyzeService.hxx"
+#include <stdio.h>
+#include <wchar.h>
+#include <com/sun/star/io/XStream.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/io/XSeekable.hpp>
+#include <com/sun/star/io/XTruncate.hpp>
+#include <com/sun/star/task/XStatusIndicator.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <ucbhelper/contentbroker.hxx>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <osl/process.h>
+#include <rtl/string.hxx>
+#include <hash_set>
+#include <assert.h>
+#include <cppuhelper/implbase2.hxx>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/embed/XStorage.hpp>
+#include <com/sun/star/util/XCloseable.hpp>
+#include <comphelper/storagehelper.hxx>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <comphelper/seqstream.hxx>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XMultiComponentFactory.hpp>
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/exceptions.hxx>
+#include <doctok/WW8Document.hxx>
+
+#include <ctype.h>
+
+using namespace ::com::sun::star;
+
+namespace writerfilter { namespace doctoktest {
+
+const sal_Char AnalyzeService::SERVICE_NAME[40] = "debugservices.doctok.AnalyzeService";
+const sal_Char AnalyzeService::IMPLEMENTATION_NAME[40] = "debugservices.doctok.AnalyzeService";
+
+class URLLister
+{
+ uno::Reference<io::XInputStream> xInputStream;
+ rtl::OUString mString;
+ rtl::OUString mCRLF;
+ rtl::OUString mLF;
+
+ sal_uInt32 getEOLIndex()
+ {
+ sal_Int32 nIndex = mString.indexOf(mCRLF);
+
+ if (nIndex == -1)
+ {
+ nIndex = mString.indexOf(mLF);
+ }
+
+ return nIndex;
+ }
+
+public:
+ URLLister(uno::Reference<com::sun::star::uno::XComponentContext> xContext,
+ uno::Reference<lang::XMultiComponentFactory> xFactory,
+ rtl::OUString absFileUrl)
+ {
+ uno::Reference<com::sun::star::ucb::XSimpleFileAccess> xFileAccess
+ (xFactory->createInstanceWithContext
+ (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.ucb.SimpleFileAccess")),
+ xContext), uno::UNO_QUERY_THROW);
+ xInputStream = xFileAccess->openFileRead(absFileUrl) ;
+
+ mLF = rtl::OUString::createFromAscii("\n");
+ mCRLF = rtl::OUString::createFromAscii("\r\n");
+ }
+
+ rtl::OUString getURL()
+ {
+ rtl::OUString aResult;
+
+ sal_Int32 nIndex = getEOLIndex();
+
+ while (nIndex == -1)
+ {
+ uno::Sequence<sal_Int8> aSeq;
+ sal_uInt32 nCount = xInputStream->readBytes(aSeq, 1024);
+
+ if (nCount > 0)
+ {
+ rtl_String * pNew = 0;
+ rtl_string_newFromStr_WithLength
+ (&pNew, reinterpret_cast<const sal_Char *>(&aSeq[0]),
+ nCount);
+
+ rtl::OString aTmp(pNew);
+ rtl::OUString aTail(rtl::OStringToOUString
+ (aTmp, RTL_TEXTENCODING_ASCII_US));
+ mString = mString.concat(aTail);
+ }
+
+ nIndex = getEOLIndex();
+
+ if (nCount != 1024)
+ break;
+ }
+
+ if (nIndex > 0)
+ {
+ aResult = mString.copy(0, nIndex);
+
+ if (mString.match(mCRLF, nIndex))
+ mString = mString.copy(nIndex + 2);
+ else
+ mString = mString.copy(nIndex + 1);
+ }
+
+ return aResult;
+ }
+};
+
+AnalyzeService::AnalyzeService(const uno::Reference< uno::XComponentContext > &xContext_) :
+xContext( xContext_ )
+{
+}
+
+sal_Int32 SAL_CALL AnalyzeService::run
+( const uno::Sequence< rtl::OUString >& aArguments )
+ throw (uno::RuntimeException)
+{
+ uno::Sequence<uno::Any> aUcbInitSequence(2);
+ aUcbInitSequence[0] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Local"));
+ aUcbInitSequence[1] <<=
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Office"));
+ uno::Reference<lang::XMultiServiceFactory>
+ xServiceFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW);
+ uno::Reference<lang::XMultiComponentFactory>
+ xFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW );
+
+ if (::ucbhelper::ContentBroker::initialize(xServiceFactory, aUcbInitSequence))
+ {
+ rtl::OUString arg=aArguments[0];
+
+ rtl_uString *dir=NULL;
+ osl_getProcessWorkingDir(&dir);
+
+ rtl::OUString absFileUrlUrls;
+ osl_getAbsoluteFileURL(dir, arg.pData, &absFileUrlUrls.pData);
+
+ URLLister aLister(xContext, xFactory, absFileUrlUrls);
+
+ fprintf(stdout, "<analyze>\n");
+
+ rtl::OUString aURL = aLister.getURL();
+
+ while (aURL.getLength() > 0)
+ {
+ uno::Reference<com::sun::star::ucb::XSimpleFileAccess> xFileAccess
+ (xFactory->createInstanceWithContext
+ (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.ucb.SimpleFileAccess")),
+ xContext), uno::UNO_QUERY_THROW );
+
+ rtl::OString aStr;
+ aURL.convertToString(&aStr, RTL_TEXTENCODING_ASCII_US,
+ OUSTRING_TO_OSTRING_CVTFLAGS);
+
+ fprintf(stdout, "<file><name>%s</name>\n", aStr.getStr());
+ fprintf(stderr, "%s\n", aStr.getStr());
+ fflush(stderr);
+
+ bool bStatus = true;
+ try
+ {
+ try
+ {
+ uno::Reference<io::XInputStream> xInputStream =
+ xFileAccess->openFileRead(aURL);
+ {
+ doctok::WW8Stream::Pointer_t pDocStream =
+ doctok::WW8DocumentFactory::createStream
+ (xContext, xInputStream);
+
+ if (pDocStream.get() != NULL)
+ {
+ doctok::WW8Document::Pointer_t pDocument
+ (doctok::WW8DocumentFactory::createDocument
+ (pDocStream));
+
+ Stream::Pointer_t pAnalyzer =
+ writerfilter::createAnalyzer();
+ pDocument->resolve(*pAnalyzer);
+ }
+ else
+ {
+ fprintf(stdout,
+ "<exception>file open failed</exception>\n");
+ bStatus = false;
+ }
+ fprintf(stderr, "done\n");
+ }
+
+ xInputStream->closeInput();
+ }
+ catch (Exception e)
+ {
+ fprintf(stdout, "<exception>%s</exception>\n",
+ e.getText().c_str());
+ bStatus = false;
+ }
+ }
+ catch (...)
+ {
+ fprintf(stdout, "<exception>unknown</exception>\n");
+ bStatus = false;
+ }
+
+ if (bStatus)
+ fprintf(stdout, "<status>ok</status>\n");
+ else
+ fprintf(stdout, "<status>failed</status>\n");
+
+ aURL = aLister.getURL();
+
+ fprintf(stdout, "</file>\n");
+ fflush(stdout);
+ }
+
+ fprintf(stdout, "</analyze>\n");
+
+ rtl_uString_release(dir);
+ ::ucbhelper::ContentBroker::deinitialize();
+
+
+ }
+ else
+ {
+ fprintf(stdout, "can't initialize UCB");
+ }
+ return 0;
+}
+
+::rtl::OUString AnalyzeService_getImplementationName ()
+{
+ return rtl::OUString::createFromAscii ( AnalyzeService::IMPLEMENTATION_NAME );
+}
+
+sal_Bool SAL_CALL AnalyzeService_supportsService( const ::rtl::OUString& ServiceName )
+{
+ return ServiceName.equals( rtl::OUString::createFromAscii( AnalyzeService::SERVICE_NAME ) );
+}
+uno::Sequence< rtl::OUString > SAL_CALL AnalyzeService_getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ uno::Sequence < rtl::OUString > aRet(1);
+ rtl::OUString* pArray = aRet.getArray();
+ pArray[0] = rtl::OUString::createFromAscii ( AnalyzeService::SERVICE_NAME );
+ return aRet;
+}
+
+uno::Reference< uno::XInterface > SAL_CALL AnalyzeService_createInstance( const uno::Reference< uno::XComponentContext > & xContext) throw( uno::Exception )
+{
+ return (cppu::OWeakObject*) new AnalyzeService( xContext );
+}
+
+} } /* end namespace writerfilter::doctok */
diff --git a/writerfilter/unocomponent/debugservices/doctok/DocTokAnalyzeService.hxx b/writerfilter/unocomponent/debugservices/doctok/DocTokAnalyzeService.hxx
new file mode 100644
index 000000000000..5aac9bfba90b
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/doctok/DocTokAnalyzeService.hxx
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_DOCTOK_ANALYZESERVICE_HXX
+#define INCLUDED_DOCTOK_ANALYZESERVICE_HXX
+
+#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/lang/XMain.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+namespace writerfilter { namespace doctoktest {
+
+class AnalyzeService : public cppu::WeakImplHelper1 < ::com::sun::star::lang::XMain >
+{
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > xContext;
+
+public:
+ AnalyzeService(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &xContext);
+
+ virtual ::sal_Int32 SAL_CALL run( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aArguments ) throw (::com::sun::star::uno::RuntimeException);
+
+public:
+ const static sal_Char SERVICE_NAME[40];
+ const static sal_Char IMPLEMENTATION_NAME[40];
+
+};
+
+::rtl::OUString AnalyzeService_getImplementationName ();
+sal_Bool SAL_CALL AnalyzeService_supportsService( const ::rtl::OUString& ServiceName );
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL AnalyzeService_getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL AnalyzeService_createInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &xContext) throw( ::com::sun::star::uno::Exception );
+
+} } /* end namespace writerfilter::rtftok */
+
+#define DOCTOK_ANALYZESERVICE_COMPONENT_ENTRY \
+{\
+ writerfilter::doctoktest::AnalyzeService_createInstance,\
+ writerfilter::doctoktest::AnalyzeService_getImplementationName,\
+ writerfilter::doctoktest::AnalyzeService_getSupportedServiceNames,\
+ ::cppu::createSingleComponentFactory,\
+ 0, 0\
+}
+
+
+#endif /* INCLUDED_RTFTOK_ANALYZESERVICE_HXX */
diff --git a/writerfilter/unocomponent/debugservices/doctok/DocTokTestService.cxx b/writerfilter/unocomponent/debugservices/doctok/DocTokTestService.cxx
new file mode 100644
index 000000000000..02a7eddd7a33
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/doctok/DocTokTestService.cxx
@@ -0,0 +1,149 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "DocTokTestService.hxx"
+#include <stdio.h>
+#include <wchar.h>
+#include <com/sun/star/io/XStream.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/io/XSeekable.hpp>
+#include <com/sun/star/io/XTruncate.hpp>
+#include <com/sun/star/task/XStatusIndicator.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <ucbhelper/contentbroker.hxx>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <osl/process.h>
+#include <rtl/string.hxx>
+#include <hash_set>
+#include <assert.h>
+#include <cppuhelper/implbase2.hxx>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/embed/XStorage.hpp>
+#include <com/sun/star/util/XCloseable.hpp>
+#include <comphelper/storagehelper.hxx>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <comphelper/seqstream.hxx>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XMultiComponentFactory.hpp>
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <resourcemodel/exceptions.hxx>
+#include <doctok/WW8Document.hxx>
+
+#include <ctype.h>
+
+using namespace ::com::sun::star;
+
+namespace writerfilter { namespace doctoktest {
+
+const sal_Char ScannerTestService::SERVICE_NAME[40] = "debugservices.doctok.ScannerTestService";
+const sal_Char ScannerTestService::IMPLEMENTATION_NAME[40] = "debugservices.doctok.ScannerTestService";
+
+
+
+
+ScannerTestService::ScannerTestService(const uno::Reference< uno::XComponentContext > &xContext_) :
+xContext( xContext_ )
+{
+}
+
+sal_Int32 SAL_CALL ScannerTestService::run( const uno::Sequence< rtl::OUString >& aArguments ) throw (uno::RuntimeException)
+{
+ uno::Sequence<uno::Any> aUcbInitSequence(2);
+ aUcbInitSequence[0] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Local"));
+ aUcbInitSequence[1] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Office"));
+ uno::Reference<lang::XMultiServiceFactory> xServiceFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW);
+ uno::Reference<lang::XMultiComponentFactory> xFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW );
+ if (::ucbhelper::ContentBroker::initialize(xServiceFactory, aUcbInitSequence))
+ {
+ rtl::OUString arg=aArguments[0];
+
+ uno::Reference<com::sun::star::ucb::XSimpleFileAccess> xFileAccess(
+ xFactory->createInstanceWithContext(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.ucb.SimpleFileAccess")),
+ xContext), uno::UNO_QUERY_THROW );
+
+ rtl_uString *dir=NULL;
+ osl_getProcessWorkingDir(&dir);
+ rtl::OUString absFileUrl;
+ osl_getAbsoluteFileURL(dir, arg.pData, &absFileUrl.pData);
+ rtl_uString_release(dir);
+
+ uno::Reference<io::XInputStream> xInputStream = xFileAccess->openFileRead(absFileUrl);
+ doctok::WW8Stream::Pointer_t pDocStream = doctok::WW8DocumentFactory::createStream(xContext, xInputStream);
+
+ doctok::WW8Document::Pointer_t pDocument(doctok::WW8DocumentFactory::createDocument(pDocStream));
+
+#if 0
+ TimeValue t1; osl_getSystemTime(&t1);
+#endif
+
+ Stream::Pointer_t pStream = createStreamHandler();
+ pDocument->resolve(*pStream);
+
+#if 0
+ TimeValue t2; osl_getSystemTime(&t2);
+ printf("time=%is\n", t2.Seconds-t1.Seconds);
+#endif
+
+ ::ucbhelper::ContentBroker::deinitialize();
+ }
+ else
+ {
+ fprintf(stderr, "can't initialize UCB");
+ }
+ return 0;
+}
+
+::rtl::OUString ScannerTestService_getImplementationName ()
+{
+ return rtl::OUString::createFromAscii ( ScannerTestService::IMPLEMENTATION_NAME );
+}
+
+sal_Bool SAL_CALL ScannerTestService_supportsService( const ::rtl::OUString& ServiceName )
+{
+ return ServiceName.equals( rtl::OUString::createFromAscii( ScannerTestService::SERVICE_NAME ) );
+}
+uno::Sequence< rtl::OUString > SAL_CALL ScannerTestService_getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ uno::Sequence < rtl::OUString > aRet(1);
+ rtl::OUString* pArray = aRet.getArray();
+ pArray[0] = rtl::OUString::createFromAscii ( ScannerTestService::SERVICE_NAME );
+ return aRet;
+}
+
+uno::Reference< uno::XInterface > SAL_CALL ScannerTestService_createInstance( const uno::Reference< uno::XComponentContext > & xContext) throw( uno::Exception )
+{
+ return (cppu::OWeakObject*) new ScannerTestService( xContext );
+}
+
+} } /* end namespace writerfilter::doctok */
diff --git a/writerfilter/unocomponent/debugservices/doctok/DocTokTestService.hxx b/writerfilter/unocomponent/debugservices/doctok/DocTokTestService.hxx
new file mode 100644
index 000000000000..4fbcfc5b60b6
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/doctok/DocTokTestService.hxx
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_DOCTOK_SCANNERTESTSERVICE_HXX
+#define INCLUDED_DOCTOK_SCANNERTESTSERVICE_HXX
+
+#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/lang/XMain.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+namespace writerfilter { namespace doctoktest {
+
+class ScannerTestService : public cppu::WeakImplHelper1 < ::com::sun::star::lang::XMain >
+{
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > xContext;
+
+public:
+ ScannerTestService(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &xContext);
+
+ virtual ::sal_Int32 SAL_CALL run( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aArguments ) throw (::com::sun::star::uno::RuntimeException);
+
+public:
+ const static sal_Char SERVICE_NAME[40];
+ const static sal_Char IMPLEMENTATION_NAME[40];
+
+};
+
+::rtl::OUString ScannerTestService_getImplementationName ();
+sal_Bool SAL_CALL ScannerTestService_supportsService( const ::rtl::OUString& ServiceName );
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL ScannerTestService_getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL ScannerTestService_createInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &xContext) throw( ::com::sun::star::uno::Exception );
+
+} } /* end namespace writerfilter::rtftok */
+
+#define DOCTOK_SCANNERTESTSERVICE_COMPONENT_ENTRY \
+{\
+ writerfilter::doctoktest::ScannerTestService_createInstance,\
+ writerfilter::doctoktest::ScannerTestService_getImplementationName,\
+ writerfilter::doctoktest::ScannerTestService_getSupportedServiceNames,\
+ ::cppu::createSingleComponentFactory,\
+ 0, 0\
+}
+
+
+#endif /* INCLUDED_RTFTOK_SCANNERTESTSERVICE_HXX */
diff --git a/writerfilter/unocomponent/debugservices/doctok/makefile.mk b/writerfilter/unocomponent/debugservices/doctok/makefile.mk
new file mode 100644
index 000000000000..989be1baa3de
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/doctok/makefile.mk
@@ -0,0 +1,44 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+PRJ=..$/..$/..
+PRJNAME=writerfilter
+TARGET=debugservices_doctok
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+SLOFILES= \
+ $(SLO)$/DocTokTestService.obj \
+ $(SLO)$/DocTokAnalyzeService.obj
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/writerfilter/unocomponent/debugservices/ooxml/OOXMLAnalyzeService.cxx b/writerfilter/unocomponent/debugservices/ooxml/OOXMLAnalyzeService.cxx
new file mode 100644
index 000000000000..19f7855acb26
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/ooxml/OOXMLAnalyzeService.cxx
@@ -0,0 +1,291 @@
+/*************************************************************************
+ *
+ * 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 <comphelper/processfactory.hxx>
+
+#include "OOXMLAnalyzeService.hxx"
+#include <stdio.h>
+#include <wchar.h>
+#include <com/sun/star/io/XStream.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/io/XSeekable.hpp>
+#include <com/sun/star/io/XTruncate.hpp>
+#include <com/sun/star/task/XStatusIndicator.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <ucbhelper/contentbroker.hxx>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <osl/process.h>
+#include <rtl/string.hxx>
+#include <hash_set>
+#include <assert.h>
+#include <cppuhelper/implbase2.hxx>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/embed/XStorage.hpp>
+#include <com/sun/star/util/XCloseable.hpp>
+#include <comphelper/storagehelper.hxx>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <comphelper/seqstream.hxx>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XMultiComponentFactory.hpp>
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <resourcemodel/WW8ResourceModel.hxx>
+#include <ooxml/OOXMLDocument.hxx>
+
+#include <ctype.h>
+
+using namespace ::com::sun::star;
+
+namespace writerfilter { namespace ooxmltest {
+
+const sal_Char AnalyzeService::SERVICE_NAME[40] = "debugservices.ooxml.AnalyzeService";
+const sal_Char AnalyzeService::IMPLEMENTATION_NAME[40] = "debugservices.ooxml.AnalyzeService";
+
+class URLLister
+{
+ uno::Reference<io::XInputStream> xInputStream;
+ rtl::OUString mString;
+ rtl::OUString mCRLF;
+ rtl::OUString mLF;
+
+ sal_uInt32 getEOLIndex()
+ {
+ sal_Int32 nIndex = mString.indexOf(mCRLF);
+
+ if (nIndex == -1)
+ {
+ nIndex = mString.indexOf(mLF);
+ }
+
+ return nIndex;
+ }
+
+public:
+ URLLister(uno::Reference<com::sun::star::uno::XComponentContext> xContext,
+ uno::Reference<lang::XMultiComponentFactory> xFactory,
+ rtl::OUString absFileUrl)
+ {
+ uno::Reference<com::sun::star::ucb::XSimpleFileAccess> xFileAccess
+ (xFactory->createInstanceWithContext
+ (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.ucb.SimpleFileAccess")),
+ xContext), uno::UNO_QUERY_THROW);
+ xInputStream = xFileAccess->openFileRead(absFileUrl) ;
+
+ mLF = rtl::OUString::createFromAscii("\n");
+ mCRLF = rtl::OUString::createFromAscii("\r\n");
+ }
+
+ rtl::OUString getURL()
+ {
+ rtl::OUString aResult;
+
+ sal_Int32 nIndex = getEOLIndex();
+
+ while (nIndex == -1)
+ {
+ uno::Sequence<sal_Int8> aSeq;
+ sal_uInt32 nCount = xInputStream->readBytes(aSeq, 1024);
+
+ if (nCount > 0)
+ {
+ rtl_String * pNew = 0;
+ rtl_string_newFromStr_WithLength
+ (&pNew, reinterpret_cast<const sal_Char *>(&aSeq[0]),
+ nCount);
+
+ rtl::OString aTmp(pNew);
+ rtl::OUString aTail(rtl::OStringToOUString
+ (aTmp, RTL_TEXTENCODING_ASCII_US));
+ mString = mString.concat(aTail);
+ }
+
+ nIndex = getEOLIndex();
+
+ if (nCount != 1024)
+ break;
+ }
+
+ if (nIndex > 0)
+ {
+ aResult = mString.copy(0, nIndex);
+
+ if (mString.match(mCRLF, nIndex))
+ mString = mString.copy(nIndex + 2);
+ else
+ mString = mString.copy(nIndex + 1);
+ }
+
+ return aResult;
+ }
+};
+
+AnalyzeService::AnalyzeService(const uno::Reference< uno::XComponentContext > &xContext_) :
+xContext( xContext_ )
+{
+}
+
+sal_Int32 SAL_CALL AnalyzeService::run
+( const uno::Sequence< rtl::OUString >& aArguments )
+ throw (uno::RuntimeException)
+{
+ uno::Sequence<uno::Any> aUcbInitSequence(2);
+ aUcbInitSequence[0] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Local"));
+ aUcbInitSequence[1] <<=
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Office"));
+ uno::Reference<lang::XMultiServiceFactory>
+ xServiceFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW);
+ uno::Reference<lang::XMultiComponentFactory>
+ xFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW );
+
+ if (::ucbhelper::ContentBroker::initialize(xServiceFactory, aUcbInitSequence))
+ {
+ ::comphelper::setProcessServiceFactory(xServiceFactory);
+
+ rtl::OUString arg=aArguments[0];
+
+ rtl_uString *dir=NULL;
+ osl_getProcessWorkingDir(&dir);
+
+ rtl::OUString absFileUrlUrls;
+ osl_getAbsoluteFileURL(dir, arg.pData, &absFileUrlUrls.pData);
+
+ URLLister aLister(xContext, xFactory, absFileUrlUrls);
+
+ fprintf(stdout, "<analyze>\n");
+
+ writerfilter::analyzerIds();
+
+ rtl::OUString aURL = aLister.getURL();
+
+ while (aURL.getLength() > 0)
+ {
+ uno::Reference<com::sun::star::ucb::XSimpleFileAccess> xFileAccess
+ (xFactory->createInstanceWithContext
+ (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.ucb.SimpleFileAccess")),
+ xContext), uno::UNO_QUERY_THROW );
+
+ rtl::OString aStr;
+ aURL.convertToString(&aStr, RTL_TEXTENCODING_ASCII_US,
+ OUSTRING_TO_OSTRING_CVTFLAGS);
+
+ fprintf(stdout, "<file><name>%s</name>\n", aStr.getStr());
+ fprintf(stderr, "%s\n", aStr.getStr());
+ fflush(stderr);
+
+ bool bStatus = true;
+ try
+ {
+ uno::Reference<io::XInputStream> xInputStream =
+ xFileAccess->openFileRead(aURL);
+
+ if (xInputStream.is())
+ {
+ ooxml::OOXMLStream::Pointer_t pDocStream =
+ ooxml::OOXMLDocumentFactory::createStream
+ (xContext, xInputStream);
+
+ if (pDocStream.get() != NULL)
+ {
+ ooxml::OOXMLDocument::Pointer_t pDocument
+ (ooxml::OOXMLDocumentFactory::createDocument
+ (pDocStream));
+
+ Stream::Pointer_t pAnalyzer =
+ writerfilter::createAnalyzer();
+ pDocument->resolve(*pAnalyzer);
+ }
+ else
+ {
+ fprintf(stdout,
+ "<exception>file open failed</exception>\n");
+ bStatus = false;
+ }
+ fprintf(stderr, "done\n");
+ }
+
+ xInputStream->closeInput();
+ }
+ catch (...)
+ {
+ fprintf(stdout, "<exception>unknown</exception>\n");
+ bStatus = false;
+ }
+
+ if (bStatus)
+ fprintf(stdout, "<status>ok</status>\n");
+ else
+ fprintf(stdout, "<status>failed</status>\n");
+
+ aURL = aLister.getURL();
+
+ fprintf(stdout, "</file>\n");
+ fflush(stdout);
+ }
+
+ fprintf(stdout, "</analyze>\n");
+
+ rtl_uString_release(dir);
+ ::ucbhelper::ContentBroker::deinitialize();
+
+
+ }
+ else
+ {
+ fprintf(stdout, "can't initialize UCB");
+ }
+ return 0;
+}
+
+::rtl::OUString AnalyzeService_getImplementationName ()
+{
+ return rtl::OUString::createFromAscii ( AnalyzeService::IMPLEMENTATION_NAME );
+}
+
+sal_Bool SAL_CALL AnalyzeService_supportsService( const ::rtl::OUString& ServiceName )
+{
+ return ServiceName.equals( rtl::OUString::createFromAscii( AnalyzeService::SERVICE_NAME ) );
+}
+uno::Sequence< rtl::OUString > SAL_CALL AnalyzeService_getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ uno::Sequence < rtl::OUString > aRet(1);
+ rtl::OUString* pArray = aRet.getArray();
+ pArray[0] = rtl::OUString::createFromAscii ( AnalyzeService::SERVICE_NAME );
+ return aRet;
+}
+
+uno::Reference< uno::XInterface > SAL_CALL AnalyzeService_createInstance( const uno::Reference< uno::XComponentContext > & xContext) throw( uno::Exception )
+{
+ return (cppu::OWeakObject*) new AnalyzeService( xContext );
+}
+
+} } /* end namespace writerfilter::doctok */
diff --git a/writerfilter/unocomponent/debugservices/ooxml/OOXMLAnalyzeService.hxx b/writerfilter/unocomponent/debugservices/ooxml/OOXMLAnalyzeService.hxx
new file mode 100644
index 000000000000..6acacbac871a
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/ooxml/OOXMLAnalyzeService.hxx
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_OOXML_ANALYZE_SERVICE_HXX
+#define INCLUDED_OOXML_ANALYZE_SERVICE_HXX
+
+#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/lang/XMain.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+namespace writerfilter { namespace ooxmltest {
+
+class AnalyzeService : public cppu::WeakImplHelper1 < ::com::sun::star::lang::XMain >
+{
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > xContext;
+
+public:
+ AnalyzeService(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &xContext);
+
+ virtual ::sal_Int32 SAL_CALL run( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aArguments ) throw (::com::sun::star::uno::RuntimeException);
+
+public:
+ const static sal_Char SERVICE_NAME[40];
+ const static sal_Char IMPLEMENTATION_NAME[40];
+
+};
+
+::rtl::OUString AnalyzeService_getImplementationName ();
+sal_Bool SAL_CALL AnalyzeService_supportsService( const ::rtl::OUString& ServiceName );
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL AnalyzeService_getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL AnalyzeService_createInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &xContext) throw( ::com::sun::star::uno::Exception );
+
+} } /* end namespace writerfilter::rtftok */
+
+#define OOXML_ANALYZESERVICE_COMPONENT_ENTRY \
+{\
+ writerfilter::ooxmltest::AnalyzeService_createInstance,\
+ writerfilter::ooxmltest::AnalyzeService_getImplementationName,\
+ writerfilter::ooxmltest::AnalyzeService_getSupportedServiceNames,\
+ ::cppu::createSingleComponentFactory,\
+ 0, 0\
+}
+
+
+#endif /* INCLUDED_OOXML_ANALYZE_SERVICE_HXX */
diff --git a/writerfilter/unocomponent/debugservices/ooxml/OOXMLTestService.cxx b/writerfilter/unocomponent/debugservices/ooxml/OOXMLTestService.cxx
new file mode 100644
index 000000000000..7a3f80ea22d9
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/ooxml/OOXMLTestService.cxx
@@ -0,0 +1,182 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/lang/XMain.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+#include <comphelper/processfactory.hxx>
+
+#include "OOXMLTestService.hxx"
+#include <stdio.h>
+#include <wchar.h>
+#include <com/sun/star/io/XStream.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/io/XSeekable.hpp>
+#include <com/sun/star/io/XTruncate.hpp>
+#include <com/sun/star/task/XStatusIndicator.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <ucbhelper/contentbroker.hxx>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <osl/process.h>
+#include <rtl/string.hxx>
+#include <hash_set>
+#include <assert.h>
+#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/bootstrap.hxx>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/embed/XStorage.hpp>
+#include <com/sun/star/util/XCloseable.hpp>
+#include <comphelper/storagehelper.hxx>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <comphelper/seqstream.hxx>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+#include <com/sun/star/lang/XMultiComponentFactory.hpp>
+#include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <com/sun/star/text/XTextDocument.hpp>
+#include <com/sun/star/drawing/XDrawPageSupplier.hpp>
+#include <ooxml/OOXMLDocument.hxx>
+#include <resourcemodel/TagLogger.hxx>
+
+#include <ctype.h>
+
+using namespace ::com::sun::star;
+
+namespace writerfilter { namespace ooxmltest {
+
+const sal_Char ScannerTestService::SERVICE_NAME[40] = "debugservices.ooxml.ScannerTestService";
+const sal_Char ScannerTestService::IMPLEMENTATION_NAME[40] = "debugservices.ooxml.ScannerTestService";
+
+
+
+
+ScannerTestService::ScannerTestService(const uno::Reference< uno::XComponentContext > &xContext_) :
+xContext( xContext_ )
+{
+}
+
+sal_Int32 SAL_CALL ScannerTestService::run( const uno::Sequence< rtl::OUString >& aArguments ) throw (uno::RuntimeException)
+{
+ uno::Sequence<uno::Any> aUcbInitSequence(2);
+ aUcbInitSequence[0] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Local"));
+ aUcbInitSequence[1] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Office"));
+ uno::Reference<lang::XMultiServiceFactory> xServiceFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW);
+ uno::Reference<lang::XMultiComponentFactory> xFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW );
+ if (::ucbhelper::ContentBroker::initialize(xServiceFactory, aUcbInitSequence))
+ {
+#ifdef DEBUG_ELEMENT
+ writerfilter::TagLogger::Pointer_t debugLogger
+ (writerfilter::TagLogger::getInstance("DEBUG"));
+ debugLogger->startDocument();
+#endif
+
+ rtl::OUString arg=aArguments[0];
+
+ ::comphelper::setProcessServiceFactory(xServiceFactory);
+
+ uno::Reference<com::sun::star::ucb::XSimpleFileAccess> xFileAccess
+ (xFactory->createInstanceWithContext
+ (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.ucb.SimpleFileAccess")),
+ xContext), uno::UNO_QUERY_THROW );
+
+ rtl_uString *dir=NULL;
+ osl_getProcessWorkingDir(&dir);
+ rtl::OUString absFileUrl;
+ osl_getAbsoluteFileURL(dir, arg.pData, &absFileUrl.pData);
+ rtl_uString_release(dir);
+
+ uno::Reference<io::XInputStream> xInputStream =
+ xFileAccess->openFileRead(absFileUrl);
+ ooxml::OOXMLStream::Pointer_t pDocStream =
+ ooxml::OOXMLDocumentFactory::createStream(xContext, xInputStream);
+
+ ooxml::OOXMLDocument::Pointer_t pDocument
+ (ooxml::OOXMLDocumentFactory::createDocument(pDocStream));
+
+#if 0
+ uno::Reference<text::XTextDocument> xDocument
+ (xFactory->createInstanceWithContext
+ (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM
+ ("com.sun.star.text.TextDocument")),
+ xContext), uno::UNO_QUERY_THROW );
+ uno::Reference<frame::XModel> xModel
+ (xDocument, uno::UNO_QUERY_THROW);
+
+ uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier
+ (xDocument, uno::UNO_QUERY_THROW);
+ uno::Reference<drawing::XShapes> xShapes
+ (xDrawPageSupplier->getDrawPage(), uno::UNO_QUERY_THROW);
+
+ pDocument->setModel(xModel);
+ pDocument->setShapes(xShapes);
+#endif
+
+ Stream::Pointer_t pStream = createStreamHandler();
+ pDocument->resolve(*pStream);
+
+#ifdef DEBUG_ELEMENT
+ writerfilter::TagLogger::dump("DEBUG");
+ debugLogger->endDocument();
+#endif
+
+ ::ucbhelper::ContentBroker::deinitialize();
+ }
+ else
+ {
+ fprintf(stderr, "can't initialize UCB");
+ }
+ return 0;
+}
+
+::rtl::OUString ScannerTestService_getImplementationName ()
+{
+ return rtl::OUString::createFromAscii ( ScannerTestService::IMPLEMENTATION_NAME );
+}
+
+sal_Bool SAL_CALL ScannerTestService_supportsService( const ::rtl::OUString& ServiceName )
+{
+ return ServiceName.equals( rtl::OUString::createFromAscii( ScannerTestService::SERVICE_NAME ) );
+}
+uno::Sequence< rtl::OUString > SAL_CALL ScannerTestService_getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ uno::Sequence < rtl::OUString > aRet(1);
+ rtl::OUString* pArray = aRet.getArray();
+ pArray[0] = rtl::OUString::createFromAscii ( ScannerTestService::SERVICE_NAME );
+ return aRet;
+}
+
+uno::Reference< uno::XInterface > SAL_CALL ScannerTestService_createInstance( const uno::Reference< uno::XComponentContext > & xContext) throw( uno::Exception )
+{
+ return (cppu::OWeakObject*) new ScannerTestService( xContext );
+}
+
+} } /* end namespace writerfilter::ooxml */
diff --git a/writerfilter/unocomponent/debugservices/ooxml/OOXMLTestService.hxx b/writerfilter/unocomponent/debugservices/ooxml/OOXMLTestService.hxx
new file mode 100644
index 000000000000..10bbb2a569a4
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/ooxml/OOXMLTestService.hxx
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef INCLUDED_OOXML_SCANNERTESTSERVICE_HXX
+#define INCLUDED_OOXML_SCANNERTESTSERVICE_HXX
+
+#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/lang/XMain.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+namespace writerfilter { namespace ooxmltest {
+
+class ScannerTestService : public cppu::WeakImplHelper1 < ::com::sun::star::lang::XMain >
+{
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > xContext;
+
+public:
+ ScannerTestService(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &xContext);
+
+ virtual ::sal_Int32 SAL_CALL run( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aArguments ) throw (::com::sun::star::uno::RuntimeException);
+
+public:
+ const static sal_Char SERVICE_NAME[40];
+ const static sal_Char IMPLEMENTATION_NAME[40];
+
+};
+
+::rtl::OUString ScannerTestService_getImplementationName ();
+sal_Bool SAL_CALL ScannerTestService_supportsService( const ::rtl::OUString& ServiceName );
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL ScannerTestService_getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL ScannerTestService_createInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &xContext) throw( ::com::sun::star::uno::Exception );
+
+} } /* end namespace writerfilter::ooxml */
+
+#define OOXML_SCANNERTESTSERVICE_COMPONENT_ENTRY \
+{\
+ writerfilter::ooxmltest::ScannerTestService_createInstance,\
+ writerfilter::ooxmltest::ScannerTestService_getImplementationName,\
+ writerfilter::ooxmltest::ScannerTestService_getSupportedServiceNames,\
+ ::cppu::createSingleComponentFactory,\
+ 0, 0\
+}
+
+
+#endif /* INCLUDED_OOXML_SCANNERTESTSERVICE_HXX */
diff --git a/writerfilter/unocomponent/debugservices/ooxml/makefile.mk b/writerfilter/unocomponent/debugservices/ooxml/makefile.mk
new file mode 100644
index 000000000000..25835aede106
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/ooxml/makefile.mk
@@ -0,0 +1,58 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+PRJ=..$/..$/..
+PRJNAME=writerfilter
+TARGET=debugservices_ooxml
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+.IF "$(GUI)"=="UNX" || "$(GUI)"=="MAC"
+RESSOUREMODELLIB=-lresourcemodel
+.ELIF "$(GUI)"=="WNT"
+.IF "$(COM)"=="GCC"
+RESOURCEMODELLIB=-lresourcemodel
+.ELSE
+RESOURCEMODELLIB=$(LB)$/iresourcemodel.lib
+.ENDIF
+.ENDIF
+
+SHL1STDLIBS= \
+ $(COMPHELPERLIB) \
+ $(RESOURCEMODELLIB)
+
+# --- Files --------------------------------------------------------
+
+SLOFILES= \
+ $(SLO)$/OOXMLTestService.obj \
+ $(SLO)$/OOXMLAnalyzeService.obj
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/writerfilter/unocomponent/debugservices/rtftok/ScannerTestService.cxx b/writerfilter/unocomponent/debugservices/rtftok/ScannerTestService.cxx
new file mode 100644
index 000000000000..1b02fab37dd6
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/rtftok/ScannerTestService.cxx
@@ -0,0 +1,455 @@
+/*************************************************************************
+ *
+ * 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 "ScannerTestService.hxx"
+#include <stdio.h>
+#include <string.h>
+#include <wchar.h>
+#include <rtftok/RTFScanner.hxx>
+#include <rtftok/RTFScannerHandler.hxx>
+#include <com/sun/star/io/XStream.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/io/XSeekable.hpp>
+#include <com/sun/star/io/XTruncate.hpp>
+#include <com/sun/star/task/XStatusIndicator.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <ucbhelper/contentbroker.hxx>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <osl/process.h>
+#include <rtl/string.hxx>
+#include <hash_set>
+#include <assert.h>
+#include <cppuhelper/implbase2.hxx>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/embed/XStorage.hpp>
+#include <com/sun/star/util/XCloseable.hpp>
+#include <comphelper/storagehelper.hxx>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <comphelper/seqstream.hxx>
+
+#include <ctype.h>
+
+using namespace ::com::sun::star;
+
+namespace writerfilter { namespace rtftok {
+
+const sal_Char ScannerTestService::SERVICE_NAME[40] = "debugservices.rtftok.ScannerTestService";
+const sal_Char ScannerTestService::IMPLEMENTATION_NAME[40] = "debugservices.rtftok.ScannerTestService";
+
+struct ScannerTestServiceHelper
+{
+ size_t operator()(const rtl::OString &str) const
+ {
+ return str.hashCode();
+ }
+ bool operator()(const rtl::OString &str1, const rtl::OString &str2) const
+ {
+ return str1.compareTo(str2)==0;
+ }
+};
+
+typedef ::std::hash_set< ::rtl::OString, ScannerTestServiceHelper, ScannerTestServiceHelper > ScannerTestServiceTokenMap;
+
+class MyRtfScannerHandler : public writerfilter::rtftok::RTFScannerHandler
+{
+ ScannerTestServiceTokenMap destMap;
+ ScannerTestServiceTokenMap ctrlMap;
+ std::vector<unsigned char> binBuffer;
+ int objDataLevel;
+ int numOfOLEs;
+ unsigned char hb;
+ int numOfOLEChars;
+ uno::Reference<lang::XMultiServiceFactory> xServiceFactory;
+ uno::Reference<com::sun::star::ucb::XSimpleFileAccess> xFileAccess;
+ uno::Reference<embed::XStorage> xStorage;
+
+ void dest(char* token, char* /*value*/)
+ {
+ destMap.insert(rtl::OString(token));
+// printf("{\\*\\%s%s ", token, value);
+ if (strcmp(token, "objdata")==0)
+ {
+ binBuffer.clear();
+ objDataLevel=1;
+ numOfOLEChars=0;
+ }
+ }
+ void ctrl(char*token, char* /*value*/)
+ {
+ ctrlMap.insert(rtl::OString(token));
+// printf("\\%s%s ", token, value);
+ }
+ void lbrace(void)
+ {
+// printf("{");
+ }
+ void rbrace(void)
+ {
+#ifndef LINUX
+ unsigned char * binBufferStr = ((unsigned char*)&(*binBuffer.begin()));
+
+ if (objDataLevel)
+ {
+ int o=0;
+ unsigned int type=((unsigned int)binBuffer[o]) | ((unsigned int)binBuffer[o+1])<<8 | ((unsigned int)binBuffer[o+2])<<16 | ((unsigned int)binBuffer[o+3]<<24); o+=4;
+ unsigned int recType=((unsigned int)binBuffer[o]) | ((unsigned int)binBuffer[o+1])<<8 | ((unsigned int)binBuffer[o+2])<<16 | ((unsigned int)binBuffer[o+3]<<24); o+=4;
+ unsigned int strLen=((unsigned int)binBuffer[o]) | ((unsigned int)binBuffer[o+1])<<8 | ((unsigned int)binBuffer[o+2])<<16 | ((unsigned int)binBuffer[o+3]<<24); o+=4;
+ unsigned char *str=binBufferStr+o;
+ o+=strLen;
+ o+=4; // dummy1
+ o+=4; // dummy2
+ unsigned int binLen=((unsigned int)binBuffer[o]) | ((unsigned int)binBuffer[o+1])<<8 | ((unsigned int)binBuffer[o+2])<<16 | ((unsigned int)binBuffer[o+3]<<24); o+=4;
+ printf("OLE%i \"%s\" type=%i recType=%i binBuffer.size()=%u len=%u\n", numOfOLEs, str, type, recType, (unsigned int)(binBuffer.size()), o+binLen);
+ //assert(binBuffer.size()==o+binLen);
+ char buf[100];
+ sprintf(buf, "ole%02i.ole", numOfOLEs);
+/* if 0{
+ FILE *f=fopen(buf, "w+b");
+ unsigned char *data=binBuffer.begin();
+ fwrite(data+o, 1, binLen, f);
+ fclose(f);
+ }*/
+/*
+ rtl_uString *dir=NULL;
+ osl_getProcessWorkingDir(&dir);
+ rtl::OUString absFileUrl;
+ rtl::OUString fileUrl=rtl::OUString::createFromAscii(buf);
+ osl_getAbsoluteFileURL(dir, fileUrl.pData, &absFileUrl.pData);
+ rtl_uString_release(dir);
+*/
+ comphelper::ByteSequence seq(binLen);
+ unsigned char *data0=binBufferStr;
+ memcpy(seq.getArray(), data0+o, binLen);
+ uno::Reference<io::XInputStream> myStream=new comphelper::SequenceInputStream(seq);
+// uno::Reference<io::XStream> myStream=xFileAccess->openFileReadWrite(absFileUrl);
+// uno::Reference<io::XStream> myStream(new MyStreamImpl(binBuffer, o));
+ uno::Sequence< uno::Any > aArgs0( 1 );
+ aArgs0[0] <<= myStream;
+ uno::Reference< container::XNameContainer > xNameContainer(
+ xServiceFactory->createInstanceWithArguments(
+ ::rtl::OUString::createFromAscii("com.sun.star.embed.OLESimpleStorage" ),
+ aArgs0 ),
+ uno::UNO_QUERY_THROW );
+ try {
+ printf("TRY\n");
+ ::com::sun::star::uno::Sequence< ::rtl::OUString > names=xNameContainer->getElementNames();
+ printf("OK\n");
+
+ for(int i=0;i<names.getLength();i++)
+ {
+ rtl::OUString &name=names[i];
+ wprintf(L"name=%s\n", name.getStr());
+ }
+ {
+ uno::Reference< io::XStream > xContentStream = xStorage->openStreamElement(
+ rtl::OUString::createFromAscii(buf), embed::ElementModes::READWRITE | embed::ElementModes::TRUNCATE );
+ uno::Reference<beans::XPropertySet> xContentStreamPropSet(xContentStream, uno::UNO_QUERY_THROW);
+ xContentStreamPropSet->setPropertyValue(rtl::OUString::createFromAscii("MediaType"), uno::makeAny(rtl::OUString::createFromAscii("application/vnd.sun.star.oleobject")));
+ uno::Reference<io::XOutputStream> myOutStream=xContentStream->getOutputStream();
+ uno::Sequence< ::sal_Int8 > seq1(binLen);
+ unsigned char *data1=binBufferStr;
+ memcpy(seq1.getArray(), data1+o, binLen);
+ myOutStream->writeBytes(seq1);
+ myOutStream->closeOutput();
+ }
+
+ } catch(com::sun::star::uno::RuntimeException &)
+ {
+ printf("NOT OK\n");
+ comphelper::ByteSequence seq2(4+binLen);
+ // memcpy(seq2.getArray(), &binLen, 4); assert(0); //TODO linux
+ seq2[0]= sal::static_int_cast<sal_Int8>(binLen&0xFF);
+ seq2[1]= sal::static_int_cast<sal_Int8>((binLen>>8)&0xFF);
+ seq2[2]= sal::static_int_cast<sal_Int8>((binLen>>16)&0xFF);
+ seq2[3]= sal::static_int_cast<sal_Int8>((binLen>>24)&0xFF);
+ unsigned char *data2=binBufferStr;
+ memcpy(seq2.getArray()+4, data2+o, binLen);
+ uno::Reference<io::XInputStream> myInStream=new comphelper::SequenceInputStream(seq2);
+ printf("SEQ OK\n");
+
+ uno::Reference< io::XStream > xContentStream = xStorage->openStreamElement(
+ rtl::OUString::createFromAscii(buf), embed::ElementModes::READWRITE | embed::ElementModes::TRUNCATE );
+ uno::Reference<beans::XPropertySet> xContentStreamPropSet(xContentStream, uno::UNO_QUERY_THROW);
+ xContentStreamPropSet->setPropertyValue(rtl::OUString::createFromAscii("MediaType"), uno::makeAny(rtl::OUString::createFromAscii("application/vnd.sun.star.oleobject")));
+ printf("CONTENT STREAM OK\n");
+
+ uno::Sequence< uno::Any > aArgs1( 1 );
+ aArgs1[0] <<= xContentStream;
+ uno::Reference< container::XNameContainer > xNameContainer2(
+ xServiceFactory->createInstanceWithArguments(
+ ::rtl::OUString::createFromAscii("com.sun.star.embed.OLESimpleStorage" ),
+ aArgs1 ),
+ uno::UNO_QUERY_THROW );
+ printf("OLE STORAGE OK\n");
+
+ uno::Any anyStream;
+ anyStream <<= myInStream;
+ xNameContainer2->insertByName(rtl::OUString::createFromAscii("\1Ole10Native"), anyStream);
+ printf("INSERT OK\n");
+
+ uno::Reference<embed::XTransactedObject> xTransact(xNameContainer2, uno::UNO_QUERY);
+ xTransact->commit();
+ }
+ objDataLevel--;
+ numOfOLEs++;
+ }
+#endif
+// printf("}");
+ }
+ void addSpaces(int /*count*/)
+ {
+// for(int i=0;i<count;i++)
+// printf(" ");
+
+ }
+ void addBinData(unsigned char /*data*/)
+ {
+// printf("%02Xh", data);
+ }
+ void addChar(char ch)
+ {
+// printf("%c", ch);
+ if (objDataLevel)
+ {
+ if (numOfOLEChars%2==0)
+ {
+ char c=sal::static_int_cast<char>(toupper(ch));
+ assert((c<='F' && c>='A') || (c<='9' && c>='0'));
+ if(c>='A') hb=(unsigned char)(c-'A'+10); else hb=(unsigned char)(c-'0');
+ }
+ else
+ {
+ unsigned char lb;
+ char c=sal::static_int_cast<char>(toupper(ch));
+ assert((c<='F' && c>='A') || (c<='9' && c>='0'));
+ if(c>='A') lb=(unsigned char)(c-'A'+10); else lb=(unsigned char)(c-'0');
+ unsigned char r=(hb<<4)|lb;
+ binBuffer.push_back(r);
+ }
+ numOfOLEChars++;
+ }
+ }
+ void addCharU(sal_Unicode /*ch*/)
+ {
+// printf("\\u%i ", ch);
+ }
+ void addHexChar(char* /*hexch*/)
+ {
+// printf("\'%s ", hexch);
+ }
+
+
+public:
+ MyRtfScannerHandler(uno::Reference<lang::XMultiServiceFactory> &xServiceFactory_, uno::Reference<com::sun::star::ucb::XSimpleFileAccess> &xFileAccess_, uno::Reference<embed::XStorage> &xStorage_) :
+ objDataLevel(0), numOfOLEs(0),
+ xServiceFactory(xServiceFactory_),
+ xFileAccess(xFileAccess_),
+ xStorage(xStorage_)
+ {
+ }
+
+ virtual ~MyRtfScannerHandler() {}
+
+ void dump()
+ {
+ printf("Destinations:\n");
+ for(ScannerTestServiceTokenMap::iterator i=destMap.begin();i!=destMap.end();i++)
+ {
+ printf(" %s\n", i->getStr());
+ }
+ printf("Ctrls:\n");
+ for(ScannerTestServiceTokenMap::iterator i=ctrlMap.begin();i!=ctrlMap.end();i++)
+ {
+ printf(" %s\n", i->getStr());
+ }
+ }
+};
+
+class RtfInputSourceImpl : public rtftok::RTFInputSource
+{
+private:
+ uno::Reference< io::XInputStream > xInputStream;
+ uno::Reference< io::XSeekable > xSeekable;
+ uno::Reference< task::XStatusIndicator > xStatusIndicator;
+ sal_Int64 bytesTotal;
+ sal_Int64 bytesRead;
+public:
+ RtfInputSourceImpl(uno::Reference< io::XInputStream > &xInputStream_, uno::Reference< task::XStatusIndicator > &xStatusIndicator_) :
+ xInputStream(xInputStream_),
+ xStatusIndicator(xStatusIndicator_),
+ bytesRead(0)
+ {
+ xSeekable=uno::Reference< io::XSeekable >(xInputStream, uno::UNO_QUERY);
+ if (xSeekable.is())
+ bytesTotal=xSeekable->getLength();
+ if (xStatusIndicator.is() && xSeekable.is())
+ {
+ xStatusIndicator->start(::rtl::OUString::createFromAscii("Converting"), 100);
+ }
+ }
+
+ virtual ~RtfInputSourceImpl() {}
+
+ int read(void *buf, int maxlen)
+ {
+ uno::Sequence< sal_Int8 > buffer;
+ int len=xInputStream->readSomeBytes(buffer,maxlen);
+ if (len>0)
+ {
+ sal_Int8 *_buffer=buffer.getArray();
+ memcpy(buf, _buffer, len);
+ bytesRead+=len;
+ if (xStatusIndicator.is())
+ {
+ if (xSeekable.is())
+ {
+ xStatusIndicator->setValue((int)(bytesRead*100/bytesTotal));
+ }
+ else
+ {
+ char buf1[100];
+ sprintf(buf1, "Converted %" SAL_PRIdINT64 " KB", bytesRead/1024);
+ xStatusIndicator->start(::rtl::OUString::createFromAscii(buf1), 0);
+ }
+ }
+ return len;
+ }
+ else
+ {
+ if (xStatusIndicator.is())
+ {
+ xStatusIndicator->end();
+ }
+ return 0;
+ }
+ }
+};
+
+ScannerTestService::ScannerTestService(const uno::Reference< uno::XComponentContext > &xContext_) :
+xContext( xContext_ )
+{
+}
+
+sal_Int32 SAL_CALL ScannerTestService::run( const uno::Sequence< rtl::OUString >& aArguments ) throw (uno::RuntimeException)
+{
+
+ printf("TEST\n");
+
+ uno::Sequence<uno::Any> aUcbInitSequence(2);
+ aUcbInitSequence[0] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Local"));
+ aUcbInitSequence[1] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Office"));
+ uno::Reference<lang::XMultiServiceFactory> xServiceFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW);
+ printf("A\n");
+ uno::Reference<lang::XMultiComponentFactory> xFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW );
+ printf("B\n");
+ if (::ucbhelper::ContentBroker::initialize(xServiceFactory, aUcbInitSequence))
+ {
+ printf("C\n");
+ rtl::OUString arg=aArguments[0];
+
+ uno::Reference<com::sun::star::ucb::XSimpleFileAccess> xFileAccess(
+ xFactory->createInstanceWithContext(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.ucb.SimpleFileAccess")),
+ xContext), uno::UNO_QUERY_THROW );
+
+ rtl_uString *dir=NULL;
+ osl_getProcessWorkingDir(&dir);
+ rtl::OUString absFileUrl;
+ osl_getAbsoluteFileURL(dir, arg.pData, &absFileUrl.pData);
+ rtl_uString_release(dir);
+
+ uno::Reference <lang::XSingleServiceFactory> xStorageFactory(
+ xServiceFactory->createInstance (rtl::OUString::createFromAscii("com.sun.star.embed.StorageFactory")), uno::UNO_QUERY_THROW);
+
+ rtl::OUString outFileUrl;
+ {
+ rtl_uString *dir1=NULL;
+ osl_getProcessWorkingDir(&dir1);
+ osl_getAbsoluteFileURL(dir1, aArguments[1].pData, &outFileUrl.pData);
+ rtl_uString_release(dir1);
+ }
+
+ uno::Sequence< uno::Any > aArgs2( 2 );
+ aArgs2[0] <<= outFileUrl;
+ aArgs2[1] <<= embed::ElementModes::READWRITE | embed::ElementModes::TRUNCATE;
+ uno::Reference<embed::XStorage> xStorage(xStorageFactory->createInstanceWithArguments(aArgs2), uno::UNO_QUERY_THROW);
+ uno::Reference<beans::XPropertySet> xPropSet(xStorage, uno::UNO_QUERY_THROW);
+ xPropSet->setPropertyValue(rtl::OUString::createFromAscii("MediaType"), uno::makeAny(rtl::OUString::createFromAscii("application/vnd.oasis.opendocument.text")));
+ uno::Reference<io::XInputStream> xInputStream = xFileAccess->openFileRead(absFileUrl);
+ uno::Reference< task::XStatusIndicator > xStatusIndicator;
+
+ TimeValue t1; osl_getSystemTime(&t1);
+
+ RtfInputSourceImpl rtfInputSource(xInputStream, xStatusIndicator);
+ MyRtfScannerHandler eventHandler(xServiceFactory, xFileAccess, xStorage);
+ writerfilter::rtftok::RTFScanner *rtfScanner=writerfilter::rtftok::RTFScanner::createRTFScanner(rtfInputSource, eventHandler);
+
+ rtfScanner->yylex();
+ delete rtfScanner;
+
+ TimeValue t2; osl_getSystemTime(&t2);
+ printf("time=%" SAL_PRIuUINT32 "s\n", t2.Seconds-t1.Seconds);
+
+// eventHandler.dump();
+ uno::Reference<embed::XTransactedObject> xTransact(xStorage, uno::UNO_QUERY);
+ xTransact->commit();
+
+
+ ::ucbhelper::ContentBroker::deinitialize();
+ }
+ else
+ {
+ fprintf(stderr, "can't initialize UCB");
+ }
+ return 0;
+}
+
+::rtl::OUString ScannerTestService_getImplementationName ()
+{
+ return rtl::OUString::createFromAscii ( ScannerTestService::IMPLEMENTATION_NAME );
+}
+
+sal_Bool SAL_CALL ScannerTestService_supportsService( const ::rtl::OUString& ServiceName )
+{
+ return ServiceName.equals( rtl::OUString::createFromAscii( ScannerTestService::SERVICE_NAME ) );
+}
+uno::Sequence< rtl::OUString > SAL_CALL ScannerTestService_getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ uno::Sequence < rtl::OUString > aRet(1);
+ rtl::OUString* pArray = aRet.getArray();
+ pArray[0] = rtl::OUString::createFromAscii ( ScannerTestService::SERVICE_NAME );
+ return aRet;
+}
+
+uno::Reference< uno::XInterface > SAL_CALL ScannerTestService_createInstance( const uno::Reference< uno::XComponentContext > & xContext) throw( uno::Exception )
+{
+ return (cppu::OWeakObject*) new ScannerTestService( xContext );
+}
+
+} } /* end namespace writerfilter::rtftok */
diff --git a/writerfilter/unocomponent/debugservices/rtftok/ScannerTestService.hxx b/writerfilter/unocomponent/debugservices/rtftok/ScannerTestService.hxx
new file mode 100644
index 000000000000..9577a4c81553
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/rtftok/ScannerTestService.hxx
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *
+ * 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_RTFTOK_SCANNERTESTSERVICE_HXX
+#define INCLUDED_RTFTOK_SCANNERTESTSERVICE_HXX
+
+#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/lang/XMain.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+namespace writerfilter { namespace rtftok {
+
+class ScannerTestService : public cppu::WeakImplHelper1 < ::com::sun::star::lang::XMain >
+{
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > xContext;
+
+public:
+ ScannerTestService(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &xContext);
+
+ virtual ::sal_Int32 SAL_CALL run( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aArguments ) throw (::com::sun::star::uno::RuntimeException);
+
+public:
+ const static sal_Char SERVICE_NAME[40];
+ const static sal_Char IMPLEMENTATION_NAME[40];
+
+};
+
+::rtl::OUString ScannerTestService_getImplementationName ();
+sal_Bool SAL_CALL ScannerTestService_supportsService( const ::rtl::OUString& ServiceName );
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL ScannerTestService_getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL ScannerTestService_createInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &xContext) throw( ::com::sun::star::uno::Exception );
+
+} } /* end namespace writerfilter::rtftok */
+
+#define RTFTOK_SCANNERTESTSERVICE_COMPONENT_ENTRY \
+{\
+ writerfilter::rtftok::ScannerTestService_createInstance,\
+ writerfilter::rtftok::ScannerTestService_getImplementationName,\
+ writerfilter::rtftok::ScannerTestService_getSupportedServiceNames,\
+ ::cppu::createSingleComponentFactory,\
+ 0, 0\
+}
+
+
+#endif /* INCLUDED_RTFTOK_SCANNERTESTSERVICE_HXX */
diff --git a/writerfilter/unocomponent/debugservices/rtftok/XMLScanner.cxx b/writerfilter/unocomponent/debugservices/rtftok/XMLScanner.cxx
new file mode 100644
index 000000000000..a4a845959afe
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/rtftok/XMLScanner.cxx
@@ -0,0 +1,333 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "XMLScanner.hxx"
+#include <stdio.h>
+#include <string.h>
+#include <wchar.h>
+#include <rtftok/RTFScanner.hxx>
+#include <rtftok/RTFScannerHandler.hxx>
+#include <com/sun/star/io/XStream.hpp>
+#include <com/sun/star/io/XInputStream.hpp>
+#include <com/sun/star/io/XSeekable.hpp>
+#include <com/sun/star/io/XTruncate.hpp>
+#include <com/sun/star/task/XStatusIndicator.hpp>
+#include <com/sun/star/container/XNameContainer.hpp>
+#include <ucbhelper/contentbroker.hxx>
+#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
+#include <osl/process.h>
+#include <rtl/string.hxx>
+#include <hash_set>
+#include <assert.h>
+#include <string>
+#include <cppuhelper/implbase2.hxx>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/embed/XStorage.hpp>
+#include <com/sun/star/util/XCloseable.hpp>
+#include <comphelper/storagehelper.hxx>
+#include <com/sun/star/embed/XTransactedObject.hpp>
+#include <com/sun/star/beans/PropertyValue.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <comphelper/seqstream.hxx>
+
+#include <ctype.h>
+#include <iostream>
+
+using namespace ::com::sun::star;
+using namespace ::std;
+
+namespace writerfilter { namespace rtftok {
+
+const sal_Char XMLScanner::SERVICE_NAME[40] = "debugservices.rtftok.XMLScanner";
+const sal_Char XMLScanner::IMPLEMENTATION_NAME[40] = "debugservices.rtftok.XMLScanner";
+
+class XmlRtfScannerHandler : public writerfilter::rtftok::RTFScannerHandler
+{
+ std::vector<unsigned char> binBuffer;
+ int objDataLevel;
+ int numOfOLEs;
+ unsigned char hb;
+ int numOfOLEChars;
+ uno::Reference<lang::XMultiServiceFactory> xServiceFactory;
+ uno::Reference<com::sun::star::ucb::XSimpleFileAccess> xFileAccess;
+ string charBuffer;
+ string ucharBuffer;
+ vector<string> vCloseTags;
+
+ void xmlout(const string & str)
+ {
+ for (size_t n = 0; n < str.length(); ++n)
+ {
+ char c = str[n];
+
+ switch (c)
+ {
+ case '<': cout << "&lt;"; break;
+ case '>': cout << "&gt;"; break;
+ case '&': cout << "&amp;"; break;
+ default:
+ cout << c;
+
+ break;
+ }
+ }
+ }
+
+ void clearBuffers()
+ {
+ if (charBuffer.length() > 0)
+ {
+ cout << "<text>";
+ xmlout(charBuffer);
+ cout << "</text>" << endl;
+ }
+
+ charBuffer = "";
+
+ if (ucharBuffer.length() > 0)
+ {
+ cout << "<utext>";
+ xmlout(ucharBuffer);
+ cout << ucharBuffer << "</utext>" << endl;
+ }
+
+ ucharBuffer = "";
+ }
+
+ void dest(char* token, char* value)
+ {
+ clearBuffers();
+ cout << "<dest name=\"" << token << "\" value=\""<< value << "\">" << endl;
+ vCloseTags.push_back("</dest>");
+ }
+ void ctrl(char*token, char* value)
+ {
+ clearBuffers();
+ cout << "<" << token << ">" << value << "</" << token << ">"
+ << endl;
+ }
+ void lbrace(void)
+ {
+ clearBuffers();
+ cout << "<brace>" << endl;
+ vCloseTags.push_back("</brace>");
+ }
+ void rbrace(void)
+ {
+ clearBuffers();
+ cout << vCloseTags.back() << endl;
+ vCloseTags.pop_back();
+ }
+ void addSpaces(int count)
+ {
+ clearBuffers();
+ cout << "<spaces count=\"" << count << "\"/>" << endl;
+ }
+ void addBinData(unsigned char /*data*/)
+ {
+ clearBuffers();
+ cout << "<bindata/>" << endl;
+ }
+ void addChar(char ch)
+ {
+ charBuffer += ch;
+ }
+ void addCharU(sal_Unicode ch)
+ {
+ ucharBuffer += sal_Char(ch < 128 ? ch : '.');
+ }
+ void addHexChar(char* hexch)
+ {
+ clearBuffers();
+ cout << "<hexchar value=\"" << hexch << "\"/>" << endl;
+ }
+
+public:
+ XmlRtfScannerHandler(uno::Reference<lang::XMultiServiceFactory> &xServiceFactory_, uno::Reference<com::sun::star::ucb::XSimpleFileAccess> &xFileAccess_) :
+ objDataLevel(0), numOfOLEs(0),
+ xServiceFactory(xServiceFactory_),
+ xFileAccess(xFileAccess_)
+ {
+ }
+
+ virtual ~XmlRtfScannerHandler() {}
+
+ void dump()
+ {
+ }
+};
+
+class RtfInputSourceImpl : public rtftok::RTFInputSource
+{
+private:
+ uno::Reference< io::XInputStream > xInputStream;
+ uno::Reference< io::XSeekable > xSeekable;
+ uno::Reference< task::XStatusIndicator > xStatusIndicator;
+ sal_Int64 bytesTotal;
+ sal_Int64 bytesRead;
+public:
+ RtfInputSourceImpl(uno::Reference< io::XInputStream > &xInputStream_, uno::Reference< task::XStatusIndicator > &xStatusIndicator_) :
+ xInputStream(xInputStream_),
+ xStatusIndicator(xStatusIndicator_),
+ bytesRead(0)
+ {
+ xSeekable=uno::Reference< io::XSeekable >(xInputStream, uno::UNO_QUERY);
+ if (xSeekable.is())
+ bytesTotal=xSeekable->getLength();
+ if (xStatusIndicator.is() && xSeekable.is())
+ {
+ xStatusIndicator->start(::rtl::OUString::createFromAscii("Converting"), 100);
+ }
+ }
+
+ virtual ~RtfInputSourceImpl() {}
+
+ int read(void *buf, int maxlen)
+ {
+ uno::Sequence< sal_Int8 > buffer;
+ int len=xInputStream->readSomeBytes(buffer,maxlen);
+ if (len>0)
+ {
+ sal_Int8 *_buffer=buffer.getArray();
+ memcpy(buf, _buffer, len);
+ bytesRead+=len;
+ if (xStatusIndicator.is())
+ {
+ if (xSeekable.is())
+ {
+ xStatusIndicator->setValue((int)(bytesRead*100/bytesTotal));
+ }
+ else
+ {
+ char buf1[100];
+ sprintf(buf1, "Converted %" SAL_PRIdINT64 " KB", bytesRead/1024);
+ xStatusIndicator->start(::rtl::OUString::createFromAscii(buf1), 0);
+ }
+ }
+ return len;
+ }
+ else
+ {
+ if (xStatusIndicator.is())
+ {
+ xStatusIndicator->end();
+ }
+ return 0;
+ }
+ }
+};
+
+XMLScanner::XMLScanner(const uno::Reference< uno::XComponentContext > &xContext_) :
+xContext( xContext_ )
+{
+}
+
+sal_Int32 SAL_CALL XMLScanner::run( const uno::Sequence< rtl::OUString >& aArguments ) throw (uno::RuntimeException)
+{
+ uno::Sequence<uno::Any> aUcbInitSequence(2);
+ aUcbInitSequence[0] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Local"));
+ aUcbInitSequence[1] <<= rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Office"));
+ uno::Reference<lang::XMultiServiceFactory> xServiceFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW);
+ uno::Reference<lang::XMultiComponentFactory> xFactory(xContext->getServiceManager(), uno::UNO_QUERY_THROW );
+ if (::ucbhelper::ContentBroker::initialize(xServiceFactory, aUcbInitSequence))
+ {
+ rtl::OUString arg=aArguments[0];
+
+ uno::Reference<com::sun::star::ucb::XSimpleFileAccess> xFileAccess(
+ xFactory->createInstanceWithContext(
+ ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.ucb.SimpleFileAccess")),
+ xContext), uno::UNO_QUERY_THROW );
+
+ rtl_uString *dir=NULL;
+ osl_getProcessWorkingDir(&dir);
+ rtl::OUString absFileUrl;
+ osl_getAbsoluteFileURL(dir, arg.pData, &absFileUrl.pData);
+ rtl_uString_release(dir);
+
+ uno::Reference <lang::XSingleServiceFactory> xStorageFactory(
+ xServiceFactory->createInstance (rtl::OUString::createFromAscii("com.sun.star.embed.StorageFactory")), uno::UNO_QUERY_THROW);
+
+#if 0
+ rtl::OUString outFileUrl;
+ {
+ rtl_uString *dir1=NULL;
+ osl_getProcessWorkingDir(&dir1);
+ osl_getAbsoluteFileURL(dir1, aArguments[1].pData, &outFileUrl.pData);
+ rtl_uString_release(dir1);
+ }
+
+ uno::Sequence< uno::Any > aArgs( 2 );
+ aArgs[0] <<= outFileUrl;
+ aArgs[1] <<= embed::ElementModes::READWRITE | embed::ElementModes::TRUNCATE;
+ uno::Reference<embed::XStorage> xStorage(xStorageFactory->createInstanceWithArguments(aArgs), uno::UNO_QUERY_THROW);
+ uno::Reference<beans::XPropertySet> xPropSet(xStorage, uno::UNO_QUERY_THROW);
+ xPropSet->setPropertyValue(rtl::OUString::createFromAscii("MediaType"), uno::makeAny(rtl::OUString::createFromAscii("application/vnd.oasis.opendocument.text")));
+#endif
+ uno::Reference<io::XInputStream> xInputStream = xFileAccess->openFileRead(absFileUrl);
+ uno::Reference< task::XStatusIndicator > xStatusIndicator;
+
+ RtfInputSourceImpl rtfInputSource(xInputStream, xStatusIndicator);
+ XmlRtfScannerHandler eventHandler(xServiceFactory, xFileAccess);
+ writerfilter::rtftok::RTFScanner *rtfScanner=writerfilter::rtftok::RTFScanner::createRTFScanner(rtfInputSource, eventHandler);
+
+ cout << "<out>" << endl;
+ rtfScanner->yylex();
+ cout << "</out>" << endl;
+ delete rtfScanner;
+
+ ::ucbhelper::ContentBroker::deinitialize();
+ }
+ else
+ {
+ fprintf(stderr, "can't initialize UCB");
+ }
+ return 0;
+}
+
+::rtl::OUString XMLScanner_getImplementationName ()
+{
+ return rtl::OUString::createFromAscii ( XMLScanner::IMPLEMENTATION_NAME );
+}
+
+sal_Bool SAL_CALL XMLScanner_supportsService( const ::rtl::OUString& ServiceName )
+{
+ return ServiceName.equals( rtl::OUString::createFromAscii( XMLScanner::SERVICE_NAME ) );
+}
+uno::Sequence< rtl::OUString > SAL_CALL XMLScanner_getSupportedServiceNames( ) throw (uno::RuntimeException)
+{
+ uno::Sequence < rtl::OUString > aRet(1);
+ rtl::OUString* pArray = aRet.getArray();
+ pArray[0] = rtl::OUString::createFromAscii ( XMLScanner::SERVICE_NAME );
+ return aRet;
+}
+
+uno::Reference< uno::XInterface > SAL_CALL XMLScanner_createInstance( const uno::Reference< uno::XComponentContext > & xContext) throw( uno::Exception )
+{
+ return (cppu::OWeakObject*) new XMLScanner( xContext );
+}
+
+} } /* end namespace writerfilter::rtftok */
diff --git a/writerfilter/unocomponent/debugservices/rtftok/XMLScanner.hxx b/writerfilter/unocomponent/debugservices/rtftok/XMLScanner.hxx
new file mode 100644
index 000000000000..d489b7400f2d
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/rtftok/XMLScanner.hxx
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *
+ * 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_RTFTOK_XMLSCANNER_HXX
+#define INCLUDED_RTFTOK_XMLSCANNER_HXX
+
+#include <cppuhelper/implbase1.hxx>
+#include <com/sun/star/lang/XMain.hpp>
+#include <com/sun/star/uno/XComponentContext.hpp>
+
+namespace writerfilter { namespace rtftok {
+
+class XMLScanner : public cppu::WeakImplHelper1 < ::com::sun::star::lang::XMain >
+{
+private:
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > xContext;
+
+public:
+ XMLScanner(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &xContext);
+
+ virtual ::sal_Int32 SAL_CALL run( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aArguments ) throw (::com::sun::star::uno::RuntimeException);
+
+public:
+ const static sal_Char SERVICE_NAME[40];
+ const static sal_Char IMPLEMENTATION_NAME[40];
+
+};
+
+::rtl::OUString XMLScanner_getImplementationName ();
+sal_Bool SAL_CALL XMLScanner_supportsService( const ::rtl::OUString& ServiceName );
+::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL XMLScanner_getSupportedServiceNames( ) throw (::com::sun::star::uno::RuntimeException);
+::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL XMLScanner_createInstance( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext > &xContext) throw( ::com::sun::star::uno::Exception );
+
+} } /* end namespace writerfilter::rtftok */
+
+#define RTFTOK_XMLSCANNER_COMPONENT_ENTRY \
+{\
+ writerfilter::rtftok::XMLScanner_createInstance,\
+ writerfilter::rtftok::XMLScanner_getImplementationName,\
+ writerfilter::rtftok::XMLScanner_getSupportedServiceNames,\
+ ::cppu::createSingleComponentFactory,\
+ 0, 0\
+}
+
+
+#endif /* INCLUDED_RTFTOK_SCANNERTESTSERVICE_HXX */
diff --git a/writerfilter/unocomponent/debugservices/rtftok/makefile.mk b/writerfilter/unocomponent/debugservices/rtftok/makefile.mk
new file mode 100644
index 000000000000..66c54a8707cd
--- /dev/null
+++ b/writerfilter/unocomponent/debugservices/rtftok/makefile.mk
@@ -0,0 +1,45 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+PRJ=..$/..$/..
+PRJNAME=writerfilter
+TARGET=debugservices_rtftok
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+# --- Files --------------------------------------------------------
+
+SLOFILES=\
+ $(SLO)$/ScannerTestService.obj \
+ $(SLO)$/XMLScanner.obj
+#$(SLO)$/TestService.obj $(SLO)$/ResolverTestService.obj $(SLO)$/XmlParserTestService.obj $(SLO)$/RngService.obj
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
diff --git a/writerfilter/unocomponent/exports.dxp b/writerfilter/unocomponent/exports.dxp
new file mode 100644
index 000000000000..f0e1c69934bc
--- /dev/null
+++ b/writerfilter/unocomponent/exports.dxp
@@ -0,0 +1,2 @@
+component_getImplementationEnvironment
+component_getFactory
diff --git a/writerfilter/unocomponent/makefile.mk b/writerfilter/unocomponent/makefile.mk
new file mode 100644
index 000000000000..a01d391e88fb
--- /dev/null
+++ b/writerfilter/unocomponent/makefile.mk
@@ -0,0 +1,90 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+PRJ=..
+PRJNAME=writerfilter
+TARGET=writerfilter.uno
+LIBTARGET=NO
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+CDEFS+=-DWRITERFILTER_DLLIMPLEMENTATION
+
+# --- Files --------------------------------------------------------
+
+SLOFILES=$(SLO)$/component.obj
+
+SHL1TARGET=$(TARGET)
+
+.IF "$(GUI)"=="UNX" || "$(GUI)"=="MAC"
+DOCTOKLIB=-ldoctok
+OOXMLLIB=-looxml
+RESOURCEMODELLIB=-lresourcemodel
+.ELIF "$(GUI)"=="OS2"
+DOCTOKLIB=$(LB)$/idoctok.lib
+OOXMLLIB=$(LB)$/iooxml.lib
+RESOURCEMODELLIB=$(LB)$/iresourcemodel.lib
+.ELIF "$(GUI)"=="WNT"
+.IF "$(COM)"=="GCC"
+DOCTOKLIB=-ldoctok
+OOXMLLIB=-looxml
+RESOURCEMODELLIB=-lresourcemodel
+.ELSE
+DOCTOKLIB=$(LB)$/idoctok.lib
+OOXMLLIB=$(LB)$/iooxml.lib
+RESOURCEMODELLIB=$(LB)$/iresourcemodel.lib
+.ENDIF
+.ENDIF
+
+SHL1STDLIBS=$(SALLIB)\
+ $(CPPULIB)\
+ $(COMPHELPERLIB)\
+ $(CPPUHELPERLIB)\
+ $(UCBHELPERLIB)\
+ $(DOCTOKLIB) \
+ $(OOXMLLIB) \
+ $(RESOURCEMODELLIB)
+
+SHL1LIBS=\
+ $(SLB)$/debugservices_doctok.lib \
+ $(SLB)$/debugservices_ooxml.lib
+
+SHL1IMPLIB=i$(SHL1TARGET)
+
+SHL1OBJS = $(SLO)$/component.obj
+
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+
+DEF1NAME=$(SHL1TARGET)
+DEF1EXPORTFILE=exports.dxp
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
diff --git a/writerfilter/util/makefile.mk b/writerfilter/util/makefile.mk
new file mode 100644
index 000000000000..c2f5c9ee37e1
--- /dev/null
+++ b/writerfilter/util/makefile.mk
@@ -0,0 +1,84 @@
+#************************************************************************
+#
+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+#
+# Copyright 2000, 2010 Oracle and/or its affiliates.
+#
+# OpenOffice.org - a multi-platform office productivity suite
+#
+# This file is part of OpenOffice.org.
+#
+# OpenOffice.org is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License version 3
+# only, as published by the Free Software Foundation.
+#
+# OpenOffice.org is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License version 3 for more details
+# (a copy is included in the LICENSE file that accompanied this code).
+#
+# You should have received a copy of the GNU Lesser General Public License
+# version 3 along with OpenOffice.org. If not, see
+# <http://www.openoffice.org/license.html>
+# for a copy of the LGPLv3 License.
+#
+# ***********************************************************************/
+
+PRJ=..
+PRJNAME=writerfilter
+TARGET=writerfilter
+ENABLE_EXCEPTIONS=TRUE
+
+# --- Settings -----------------------------------------------------
+
+.INCLUDE : settings.mk
+
+CDEFS+=-DWRITERFILTER_DLLIMPLEMENTATION
+
+# --- Files --------------------------------------------------------
+
+LIB1TARGET=$(SLB)$/$(TARGET).lib
+LIB1FILES= \
+ $(SLB)$/ooxml.lib \
+ $(SLB)$/doctok.lib \
+ $(SLB)$/resourcemodel.lib \
+ $(SLB)$/dmapper.lib \
+ $(SLB)$/filter.lib
+
+SHL1LIBS=$(SLB)$/$(TARGET).lib
+
+
+SHL1TARGET=$(TARGET)$(DLLPOSTFIX)
+SHL1STDLIBS=\
+ $(I18NISOLANGLIB) \
+ $(I18NPAPERLIB) \
+ $(SOTLIB) \
+ $(TOOLSLIB) \
+ $(UNOTOOLSLIB) \
+ $(CPPUHELPERLIB) \
+ $(COMPHELPERLIB) \
+ $(CPPULIB) \
+ $(SALLIB) \
+ $(OOXLIB)
+
+
+SHL1DEPN=
+SHL1IMPLIB= i$(SHL1TARGET)
+SHL1DEF= $(MISC)$/$(SHL1TARGET).def
+SHL1VERSIONMAP=$(SOLARENV)/src/component.map
+
+DEF1NAME=$(SHL1TARGET)
+
+
+# --- Targets ------------------------------------------------------
+
+.INCLUDE : target.mk
+
+ALLTAR : $(MISC)/writerfilter.component
+
+$(MISC)/writerfilter.component .ERRREMOVE : \
+ $(SOLARENV)/bin/createcomponent.xslt writerfilter.component
+ $(XSLTPROC) --nonet --stringparam uri \
+ '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \
+ $(SOLARENV)/bin/createcomponent.xslt writerfilter.component
diff --git a/writerfilter/util/writerfilter.component b/writerfilter/util/writerfilter.component
new file mode 100644
index 000000000000..7a81b6cc3a2b
--- /dev/null
+++ b/writerfilter/util/writerfilter.component
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--**********************************************************************
+*
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2000, 2010 Oracle and/or its affiliates.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General Public License
+* version 3 along with OpenOffice.org. If not, see
+* <http://www.openoffice.org/license.html>
+* for a copy of the LGPLv3 License.
+*
+**********************************************************************-->
+
+<component loader="com.sun.star.loader.SharedLibrary"
+ xmlns="http://openoffice.org/2010/uno-components">
+ <implementation name="com.sun.star.comp.Writer.WriterFilter">
+ <service name="com.sun.star.document.ExportFilter"/>
+ <service name="com.sun.star.document.ImportFilter"/>
+ </implementation>
+ <implementation name="com.sun.star.comp.Writer.WriterFilterDetector">
+ <service name="com.sun.star.document.ExtendedTypeDetection"/>
+ </implementation>
+ <implementation name="com.sun.star.comp.Writer.RtfFilter">
+ <service name="com.sun.star.document.ImportFilter"/>
+ <service name="com.sun.star.document.ExportFilter"/>
+ </implementation>
+</component>