summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--automation/source/testtool/objtest.cxx2
-rwxr-xr-x[-rw-r--r--]basic/source/classes/sb.cxx30
-rw-r--r--basic/source/classes/sbunoobj.cxx38
-rw-r--r--basic/source/runtime/makefile.mk3
-rw-r--r--bridges/prj/build.lst21
-rw-r--r--bridges/source/cpp_uno/gcc3_freebsd_intel/makefile.mk3
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_alpha/cpp2uno.cxx676
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_alpha/except.cxx287
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_alpha/makefile.mk (renamed from fondu/makefile.mk)54
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_alpha/share.hxx98
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_alpha/uno2cpp.cxx532
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_hppa/cpp2uno.cxx6
-rw-r--r--bridges/source/cpp_uno/gcc3_linux_intel/makefile.mk3
-rw-r--r--bridges/source/cpp_uno/gcc3_macosx_intel/makefile.mk3
-rw-r--r--bridges/source/cpp_uno/mingw_intel/makefile.mk3
-rw-r--r--bridges/source/remote/urp/urp_job.hxx10
-rw-r--r--chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx8
-rw-r--r--chart2/source/controller/main/ChartController_Window.cxx10
-rw-r--r--chart2/source/controller/main/ShapeToolbarController.cxx2
-rw-r--r--chart2/source/controller/main/UndoManager.cxx6
-rw-r--r--chart2/source/model/main/ChartModel.cxx6
-rw-r--r--chart2/source/model/main/ChartModel_Persistence.cxx13
-rw-r--r--chart2/source/model/main/DataSeries.cxx14
-rw-r--r--chart2/source/model/template/ChartTypeTemplate.cxx4
-rw-r--r--chart2/source/tools/LifeTime.cxx6
-rw-r--r--chart2/source/tools/RangeHighlighter.cxx6
-rw-r--r--chart2/source/view/axes/VCartesianAxis.cxx6
-rw-r--r--chart2/source/view/main/ChartView.cxx6
-rw-r--r--chart2/source/view/main/VLegend.cxx11
-rw-r--r--configmgr/inc/configmgr/update.hxx7
-rw-r--r--configmgr/source/README1
-rw-r--r--configmgr/source/components.cxx65
-rw-r--r--configmgr/source/components.hxx18
-rw-r--r--configmgr/source/makefile.mk1
-rw-r--r--configmgr/source/partial.cxx137
-rw-r--r--configmgr/source/partial.hxx71
-rw-r--r--configmgr/source/update.cxx19
-rw-r--r--configmgr/source/valueparser.cxx22
-rw-r--r--configmgr/source/valueparser.hxx4
-rw-r--r--configmgr/source/writemodfile.cxx70
-rw-r--r--configmgr/source/xcdparser.cxx4
-rw-r--r--configmgr/source/xcdparser.hxx4
-rw-r--r--configmgr/source/xcsparser.cxx93
-rw-r--r--configmgr/source/xcsparser.hxx4
-rw-r--r--configmgr/source/xcuparser.cxx305
-rw-r--r--configmgr/source/xcuparser.hxx27
-rw-r--r--configure.in98
-rwxr-xr-xcrashrep/prj/d.lst3
-rwxr-xr-xcrashrep/source/unx/makefile.mk4
-rw-r--r--cui/source/dialogs/hldoctp.cxx14
-rw-r--r--cui/source/options/treeopt.cxx29
-rw-r--r--cui/source/tabpages/chardlg.cxx15
-rw-r--r--dbaccess/source/core/api/KeySet.cxx14
-rw-r--r--default_images/framework/res/folder_32.pngbin1012 -> 4205 bytes
-rw-r--r--default_images/framework/res/folder_32_hc.pngbin0 -> 3700 bytes
-rw-r--r--default_images/framework/res/templates_32.pngbin0 -> 4394 bytes
-rw-r--r--default_images/framework/res/templates_32_hc.pngbin0 -> 3838 bytes
-rw-r--r--default_images/res/odb_32_hc.pngbin0 -> 3867 bytes
-rw-r--r--default_images/res/odf_32_hc.pngbin0 -> 3880 bytes
-rw-r--r--default_images/res/odg_32_hc.pngbin0 -> 3955 bytes
-rw-r--r--default_images/res/odp_32_hc.pngbin0 -> 3805 bytes
-rw-r--r--default_images/res/ods_32_hc.pngbin0 -> 3778 bytes
-rw-r--r--default_images/res/odt_32_hc.pngbin0 -> 3831 bytes
-rw-r--r--desktop/scripts/soffice.sh4
-rw-r--r--desktop/scripts/unopkg.sh4
-rw-r--r--desktop/source/app/appfirststart.cxx4
-rw-r--r--desktop/source/app/makefile.mk1
-rw-r--r--desktop/source/deployment/manager/dp_manager.cxx18
-rw-r--r--desktop/source/deployment/misc/dp_platform.cxx9
-rw-r--r--desktop/source/deployment/registry/dp_registry.cxx18
-rw-r--r--desktop/source/deployment/registry/package/dp_package.cxx41
-rw-r--r--desktop/source/migration/migration.cxx213
-rw-r--r--desktop/source/migration/migration_impl.hxx5
-rw-r--r--desktop/source/splash/makefile.mk1
-rw-r--r--editeng/inc/editeng/svxacorr.hxx4
-rw-r--r--editeng/source/accessibility/AccessibleEditableTextPara.cxx20
-rw-r--r--editeng/source/editeng/editeng.cxx5
-rw-r--r--editeng/source/misc/svxacorr.cxx47
-rw-r--r--extensions/source/activex/main/so_activex.cpp4
-rw-r--r--extensions/source/nsplugin/source/nsplugin.rc2
-rw-r--r--extensions/source/nsplugin/source/so_env.cxx132
-rw-r--r--extensions/source/nsplugin/source/so_main.cxx2
-rw-r--r--extensions/source/ole/oleobjw.cxx40
-rw-r--r--extensions/source/ole/oleobjw.hxx1
-rw-r--r--extras/source/autotext/lang/ga-IE/acor_ga-IE.datbin0 -> 13750 bytes
-rw-r--r--extras/source/autotext/lang/sh-ME/acor_sh-ME.datbin0 -> 1631 bytes
-rw-r--r--extras/source/autotext/lang/sh-RS/acor_sh-RS.datbin0 -> 1631 bytes
-rw-r--r--extras/source/autotext/lang/sh-YU/acor_sh-YU.datbin0 -> 1631 bytes
-rw-r--r--extras/source/autotext/lang/sk/acor_sk-SK.datbin52356 -> 5641 bytes
-rw-r--r--extras/source/autotext/lang/sr-ME/acor_sr-ME.datbin0 -> 1683 bytes
-rw-r--r--extras/source/autotext/lang/sr-RS/acor_sr-RS.datbin0 -> 1683 bytes
-rw-r--r--extras/source/autotext/lang/sr-YU/acor_sr-YU.datbin0 -> 1683 bytes
-rwxr-xr-xextras/source/palettes/lang/eu/modern_eu.sog54
-rwxr-xr-xfetch_tarballs.sh69
-rw-r--r--filter/source/pdf/impdialog.cxx21
-rw-r--r--filter/source/pdf/impdialog.hrc2
-rw-r--r--filter/source/pdf/impdialog.hxx3
-rw-r--r--filter/source/pdf/impdialog.src11
-rw-r--r--filter/source/pdf/pdfexport.cxx4
-rw-r--r--filter/source/xslt/odf2xhtml/export/xhtml/body.xsl4819
-rw-r--r--fondu/prj/build.lst2
-rw-r--r--fondu/prj/d.lst2
-rw-r--r--framework/inc/classes/xmlnamespaces.hxx65
-rw-r--r--framework/inc/framework.hrc25
-rw-r--r--framework/inc/xml/toolboxlayoutdocumenthandler.hxx59
-rw-r--r--framework/source/services/backingwindow.cxx38
-rw-r--r--framework/source/services/backingwindow.hxx1
-rw-r--r--framework/source/services/fwk_services.src92
-rw-r--r--framework/source/uielement/rootitemcontainer.cxx1
-rw-r--r--framework/source/xml/makefile.mk1
-rw-r--r--framework/source/xml/toolboxconfiguration.cxx1
-rw-r--r--framework/source/xml/toolboxlayoutdocumenthandler.cxx58
-rw-r--r--framework/util/makefile.mk1
-rw-r--r--i18npool/source/isolang/isolang.cxx3
-rw-r--r--idlc/source/preproc/cpp.h3
-rw-r--r--instsetoo_native/inc_broffice/windows/msi_templates/Binary/Banner.bmpbin0 -> 7112 bytes
-rw-r--r--instsetoo_native/inc_broffice/windows/msi_templates/Binary/Image.bmpbin0 -> 51772 bytes
-rw-r--r--instsetoo_native/macosx/application/PostInstall.applescript290
-rw-r--r--instsetoo_native/macosx/application/main.applescript363
-rwxr-xr-xinstsetoo_native/macosx/make_versioned.sh61
-rw-r--r--instsetoo_native/macosx/makefile.mk85
-rw-r--r--instsetoo_native/prj/build.lst5
-rw-r--r--instsetoo_native/res/osxdndinstall.pngbin14383 -> 0 bytes
-rw-r--r--instsetoo_native/util/makefile.mk15
-rw-r--r--instsetoo_native/util/openoffice.lst22
-rwxr-xr-xjavainstaller2/src/Helpfiles/makefile.mk11
-rwxr-xr-xjavainstaller2/src/JavaSetup/org/openoffice/setup/InstallerHelper/SolarisHelper.java4
-rwxr-xr-xjavainstaller2/src/Localization/makefile.mk2
-rw-r--r--jvmfwk/plugins/sunmajor/pluginlib/vendorbase.hxx6
-rw-r--r--lpsolve/lp_solve_5.5.patch5
-rw-r--r--moz/makefile.mk3
-rw-r--r--moz/patches/link_fontconfig.patch11
-rw-r--r--mysqlc/images/sun_extension.pngbin5483 -> 0 bytes
-rw-r--r--mysqlc/images/sun_extension_hc.pngbin3176 -> 0 bytes
-rwxr-xr-x[-rw-r--r--]mysqlc/source/description.xml4
-rwxr-xr-x[-rw-r--r--]mysqlc/source/description/description_en-US.txt2
-rwxr-xr-x[-rw-r--r--]mysqlc/source/makefile.mk8
-rw-r--r--offapi/com/sun/star/accessibility/AccessibleRole.idl27
-rw-r--r--offapi/com/sun/star/rdf/XDocumentRepository.idl28
-rwxr-xr-xoffapi/com/sun/star/text/InContentMetadata.idl10
-rw-r--r--offapi/com/sun/star/text/TextMarkupType.idl6
-rw-r--r--offapi/com/sun/star/text/TextRangeContentProperties.idl133
-rw-r--r--offapi/com/sun/star/text/makefile.mk1
-rwxr-xr-xoffapi/com/sun/star/text/textfield/MetadataField.idl11
-rw-r--r--officecfg/registry/component-update.dtd5
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Common.xcu2
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/ChartWindowState.xcu84
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu24
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/DrawWindowState.xcu18
-rw-r--r--officecfg/registry/data/org/openoffice/Office/UI/ImpressWindowState.xcu18
-rw-r--r--officecfg/registry/data/org/openoffice/Office/Writer.xcu2
-rw-r--r--officecfg/registry/data/org/openoffice/Office/makefile.mk1
-rwxr-xr-xofficecfg/registry/data/org/openoffice/Setup.xcu124
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Calc.xcs4
-rw-r--r--officecfg/registry/schema/org/openoffice/Office/Common.xcs7
-rw-r--r--officecfg/registry/schema/org/openoffice/Setup.xcs5
-rw-r--r--officecfg/util/alllang.xsl6
-rwxr-xr-xooo_custom_images/broffice/introabout/about.pngbin14722 -> 7923 bytes
-rwxr-xr-xooo_custom_images/broffice/introabout/intro.pngbin42384 -> 14012 bytes
-rw-r--r--ooo_custom_images/classic/classic_images.tar.gzbin1643403 -> 1723339 bytes
-rwxr-xr-xooo_custom_images/dev_broffice/introabout/intro.pngbin49847 -> 16596 bytes
-rwxr-xr-xooo_custom_images/dev_nologo/introabout/intro.pngbin29323 -> 26740 bytes
-rwxr-xr-xooo_custom_images/dev_nologo_broffice/introabout/intro.pngbin47367 -> 14999 bytes
-rwxr-xr-xooo_custom_images/nologo/introabout/intro.pngbin27123 -> 24288 bytes
-rw-r--r--ooo_custom_images/nologo_broffice/delzip (renamed from instsetoo_native/macosx/delzip)0
-rw-r--r--ooo_custom_images/nologo_broffice/framework/res/backing.pngbin0 -> 12535 bytes
-rw-r--r--ooo_custom_images/nologo_broffice/framework/res/backing_hc.pngbin0 -> 6315 bytes
-rw-r--r--ooo_custom_images/nologo_broffice/framework/res/backing_right.pngbin0 -> 9942 bytes
-rw-r--r--ooo_custom_images/nologo_broffice/framework/res/backing_right_hc.pngbin0 -> 4658 bytes
-rwxr-xr-xooo_custom_images/nologo_broffice/introabout/intro.pngbin40062 -> 11692 bytes
-rwxr-xr-xooo_custom_images/nologo_broffice/makefile.mk20
-rw-r--r--ooo_custom_images/prj/build.lst4
-rw-r--r--ooo_custom_images/prj/d.lst2
-rw-r--r--ooo_custom_images/settings.pmk13
-rw-r--r--ooo_custom_images/target.pmk16
-rw-r--r--oovbaapi/genconstidl/makefile.mk5
-rw-r--r--oovbaapi/ooo/vba/constants/makefile.mk6
-rw-r--r--oovbaapi/ooo/vba/excel/makefile.mk5
-rw-r--r--oovbaapi/ooo/vba/makefile.mk6
-rw-r--r--oovbaapi/ooo/vba/msforms/makefile.mk5
-rw-r--r--oovbaapi/util/makefile.mk5
-rw-r--r--oox/inc/oox/drawingml/shape.hxx6
-rw-r--r--oox/source/drawingml/shape.cxx3
-rw-r--r--oox/source/ppt/pptshape.cxx2
-rw-r--r--oox/source/xls/pivottablebuffer.cxx2
-rw-r--r--packimages/pack/image-sort.lst6
-rw-r--r--padmin/source/padialog.cxx5
-rw-r--r--postprocess/checkdeliver/checkdeliver.pl2
-rw-r--r--postprocess/packregistry/makefile.mk1
-rw-r--r--postprocess/prj/build.lst2
-rwxr-xr-xpyuno/zipcore/makefile.mk2
-rw-r--r--redland/README6
-rw-r--r--redland/redland/makefile.mk4
-rw-r--r--redland/redland/redland-1.0.8.patch.free_null174
-rw-r--r--redland/redland/redland-1.0.8.patch.storage_hashes_context_serialize_get_statement35
-rw-r--r--redland/redland/redland-1.0.8.patch.storage_hashes_list_duplicates170
-rw-r--r--reportbuilder/images/em47.pngbin5483 -> 0 bytes
-rw-r--r--reportbuilder/images/em47_hc.pngbin3176 -> 0 bytes
-rwxr-xr-x[-rw-r--r--]reportbuilder/util/component.txt2
-rwxr-xr-x[-rw-r--r--]reportbuilder/util/description.xml7
-rwxr-xr-x[-rw-r--r--]reportbuilder/util/makefile.mk10
-rwxr-xr-x[-rw-r--r--]reportbuilder/util/makefile.pmk0
-rw-r--r--rsc/inc/rsctools.hxx1
-rw-r--r--rsc/source/tools/rscchar.cxx133
-rw-r--r--sal/osl/unx/signal.c91
-rw-r--r--sal/rtl/source/macro.hxx2
-rw-r--r--sal/typesconfig/typesconfig.c2
-rw-r--r--sc/inc/column.hxx2
-rw-r--r--sc/inc/dbcolect.hxx1
-rw-r--r--sc/inc/document.hxx4
-rw-r--r--sc/inc/global.hxx1
-rw-r--r--sc/inc/segdefs_.hxx4985
-rw-r--r--sc/inc/servuno.hxx3
-rw-r--r--sc/inc/sheetdata.hxx5
-rw-r--r--sc/inc/table.hxx4
-rw-r--r--sc/source/core/data/cell2.cxx2
-rw-r--r--sc/source/core/data/column3.cxx17
-rw-r--r--sc/source/core/data/documen3.cxx11
-rw-r--r--sc/source/core/data/dpcachetable.cxx30
-rwxr-xr-xsc/source/core/data/dptablecache.cxx34
-rw-r--r--sc/source/core/data/global2.cxx51
-rw-r--r--sc/source/core/data/table3.cxx61
-rw-r--r--sc/source/core/inc/interpre.hxx1
-rw-r--r--sc/source/core/tool/dbcolect.cxx4
-rw-r--r--sc/source/core/tool/interpr1.cxx7
-rw-r--r--sc/source/core/tool/interpr4.cxx33
-rw-r--r--sc/source/filter/excel/excimp8.cxx11
-rw-r--r--sc/source/filter/html/htmlpars.cxx3
-rw-r--r--sc/source/filter/xml/sheetdata.cxx13
-rw-r--r--sc/source/filter/xml/xmlwrap.cxx32
-rw-r--r--sc/source/ui/app/inputhdl.cxx8
-rw-r--r--sc/source/ui/dbgui/filtdlg.cxx10
-rw-r--r--sc/source/ui/dbgui/makefile.mk1
-rw-r--r--sc/source/ui/dbgui/pfiltdlg.cxx3
-rw-r--r--sc/source/ui/dbgui/pvfundlg.cxx2
-rw-r--r--sc/source/ui/dbgui/validate.cxx2
-rw-r--r--sc/source/ui/docshell/docsh.cxx22
-rw-r--r--sc/source/ui/docshell/docsh2.cxx2
-rw-r--r--sc/source/ui/docshell/docsh5.cxx3
-rw-r--r--sc/source/ui/inc/filtdlg.hxx1
-rw-r--r--sc/source/ui/inc/gridwin.hxx2
-rw-r--r--sc/source/ui/src/scfuncs.src22
-rw-r--r--sc/source/ui/unoobj/cellsuno.cxx9
-rwxr-xr-xsc/source/ui/unoobj/dapiuno.cxx7
-rw-r--r--sc/source/ui/unoobj/docuno.cxx16
-rw-r--r--sc/source/ui/unoobj/servuno.cxx25
-rw-r--r--sc/source/ui/view/gridwin.cxx13
-rw-r--r--sc/util/makefile.mk1
-rw-r--r--scp2/source/crashrep/file_crashrep.scp18
-rw-r--r--scp2/source/ooo/common_brand.scp5
-rw-r--r--scp2/source/ooo/file_library_ooo.scp36
-rwxr-xr-xscp2/source/ooo/file_ooo.scp57
-rw-r--r--scp2/source/ooo/module_hidden_ooo.scp11
-rw-r--r--scp2/source/xsltfilter/file_xsltfilter.scp2
-rwxr-xr-x[-rw-r--r--]scripting/prj/build.lst2
-rw-r--r--scripting/source/dlgprov/dlgevtatt.cxx40
-rw-r--r--scripting/source/dlgprov/dlgevtatt.hxx5
-rw-r--r--scripting/source/dlgprov/makefile.mk1
-rw-r--r--[-rwxr-xr-x]scripting/source/vbaevents/eventhelper.cxx13
-rw-r--r--sd/inc/segdefs_.hxx1400
-rw-r--r--sd/inc/stlpool.hxx2
-rw-r--r--sd/source/core/stlpool.cxx14
-rw-r--r--sd/source/ui/animations/CustomAnimation.src2
-rw-r--r--sd/source/ui/func/fupage.cxx47
-rw-r--r--sd/source/ui/func/fupoor.cxx1
-rw-r--r--sd/source/ui/slideshow/slideshowimpl.cxx37
-rw-r--r--sd/source/ui/unoidl/unoobj.cxx40
-rwxr-xr-x[-rw-r--r--]sdext/source/minimizer/description.xml4
-rw-r--r--sdext/source/minimizer/images/em47.pngbin5483 -> 0 bytes
-rw-r--r--sdext/source/minimizer/images/em47_hc.pngbin3176 -> 0 bytes
-rwxr-xr-x[-rw-r--r--]sdext/source/minimizer/makefile.mk6
-rwxr-xr-x[-rw-r--r--]sdext/source/pdfimport/config/description.xml4
-rw-r--r--sdext/source/pdfimport/images/pdfiext.pngbin5483 -> 0 bytes
-rw-r--r--sdext/source/pdfimport/images/pdfiext_hc.pngbin3176 -> 0 bytes
-rwxr-xr-x[-rw-r--r--]sdext/source/pdfimport/makefile.mk6
-rw-r--r--sdext/source/presenter/bitmaps/em47.pngbin5483 -> 0 bytes
-rw-r--r--sdext/source/presenter/bitmaps/em47_hc.pngbin3176 -> 0 bytes
-rwxr-xr-x[-rw-r--r--]sdext/source/presenter/description.xml4
-rwxr-xr-x[-rw-r--r--]sdext/source/presenter/makefile.mk13
-rw-r--r--set_soenv.in6
-rw-r--r--setup_native/prj/d.lst8
-rw-r--r--setup_native/source/java/brofficeorg_setup.gifbin0 -> 3115 bytes
-rwxr-xr-xsetup_native/source/java/javaversion.dat26
-rw-r--r--setup_native/source/java/javaversion2.dat26
-rw-r--r--setup_native/source/mac/broffice/DS_Storebin0 -> 12292 bytes
-rw-r--r--setup_native/source/mac/broffice/osxdndinstall.pngbin0 -> 15942 bytes
-rw-r--r--setup_native/source/mac/ooo/DS_Store (renamed from instsetoo_native/res/DS_Store)bin12292 -> 12292 bytes
-rw-r--r--setup_native/source/mac/ooo/DS_Store_Langpack (renamed from instsetoo_native/res/DS_Store_Langpack)bin12292 -> 12292 bytes
-rw-r--r--setup_native/source/mac/ooo/osxdndinstall.pngbin0 -> 14278 bytes
-rw-r--r--setup_native/source/packinfo/linuxcopyrightfile2
-rwxr-xr-xsetup_native/source/packinfo/packinfo_office.txt16
-rw-r--r--setup_native/source/packinfo/spellchecker_selection.txt1
-rw-r--r--setup_native/source/win32/msi-encodinglist.txt2
-rw-r--r--setup_native/source/win32/nsis/brobanner.bmpbin9328 -> 8964 bytes
-rw-r--r--setup_native/source/win32/nsis/brobitmap.bmpbin52576 -> 52100 bytes
-rw-r--r--sfx2/inc/sfx2/Metadatable.hxx4
-rw-r--r--sfx2/inc/sfx2/app.hxx4
-rw-r--r--sfx2/inc/sfx2/objsh.hxx6
-rw-r--r--sfx2/qa/complex/DocumentMetadataAccessTest.java125
-rw-r--r--sfx2/source/dialog/about.cxx76
-rw-r--r--sfx2/source/doc/Metadatable.cxx68
-rw-r--r--sfx2/source/doc/guisaveas.cxx90
-rwxr-xr-x[-rw-r--r--]sfx2/source/doc/objmisc.cxx10
-rw-r--r--shell/source/backends/gconfbe/gconfaccess.cxx1
-rw-r--r--shell/source/win32/shlxthandler/makefile.mk7
-rw-r--r--smoketestoo_native/makefile.mk10
-rw-r--r--solenv/bin/cws.pl7
-rw-r--r--solenv/bin/make_installer.pl27
-rw-r--r--solenv/bin/mhids.pl6
-rw-r--r--solenv/bin/modules/CreatePDBRelocators.pm2
-rw-r--r--solenv/bin/modules/installer/archivefiles.pm24
-rw-r--r--solenv/bin/modules/installer/download.pm8
-rw-r--r--solenv/bin/modules/installer/epmfile.pm19
-rw-r--r--solenv/bin/modules/installer/globals.pm1
-rw-r--r--solenv/bin/modules/installer/scriptitems.pm20
-rw-r--r--solenv/bin/modules/installer/setupscript.pm6
-rw-r--r--solenv/bin/modules/installer/simplepackage.pm9
-rw-r--r--solenv/bin/modules/installer/windows/idtglobal.pm8
-rw-r--r--solenv/bin/modules/installer/windows/property.pm18
-rw-r--r--solenv/bin/modules/installer/worker.pm9
-rw-r--r--solenv/bin/modules/installer/ziplist.pm8
-rw-r--r--solenv/bin/packregistry.xslt21
-rw-r--r--solenv/config/sdev300.ini4
-rw-r--r--solenv/inc/installationtest.mk6
-rw-r--r--solenv/inc/libs.mk2
-rw-r--r--solenv/inc/minor.mk6
-rw-r--r--solenv/inc/settings.mk2
-rw-r--r--solenv/inc/tg_config.mk3
-rw-r--r--solenv/inc/unx.mk4
-rw-r--r--[-rwxr-xr-x]solenv/inc/unxlngaxp.mk (renamed from crashrep/source/unx/crash_report.sh)28
-rw-r--r--soltools/cpp/cpp.h3
-rw-r--r--splitbuild/extern.lst2
-rw-r--r--stoc/source/corereflection/criface.cxx3
-rw-r--r--svl/source/items/style.cxx22
-rw-r--r--svl/source/misc/inettype.cxx17
-rw-r--r--svl/source/misc/urihelper.cxx3
-rw-r--r--svl/source/numbers/zformat.cxx2
-rw-r--r--svtools/source/filter.vcl/wmf/winmtf.cxx12
-rw-r--r--svtools/source/filter.vcl/wmf/winmtf.hxx3
-rw-r--r--svx/source/form/datanavi.cxx7
-rw-r--r--svx/source/form/fmundo.cxx47
-rw-r--r--svx/source/svdraw/svdoashp.cxx5
-rw-r--r--sw/inc/AnnotationWin.hxx83
-rw-r--r--sw/inc/PostItMgr.hxx129
-rw-r--r--sw/inc/SidebarWin.hxx272
-rw-r--r--sw/inc/SidebarWindowsTypes.hxx (renamed from sc/inc/segdefs.hxx)32
-rw-r--r--sw/inc/access.hrc33
-rw-r--r--sw/inc/accmap.hxx107
-rw-r--r--sw/inc/cmdid.h1
-rw-r--r--sw/inc/doc.hxx9
-rw-r--r--sw/inc/editsh.hxx11
-rw-r--r--sw/inc/fesh.hxx2
-rw-r--r--sw/inc/index.hxx2
-rw-r--r--sw/inc/ndarr.hxx26
-rw-r--r--sw/inc/ndtxt.hxx32
-rw-r--r--sw/inc/node.hxx38
-rw-r--r--sw/inc/postit.hxx413
-rw-r--r--sw/inc/postithelper.hxx95
-rw-r--r--sw/inc/rcid.hrc7
-rw-r--r--sw/inc/rolbck.hxx23
-rw-r--r--sw/inc/section.hxx255
-rw-r--r--sw/inc/sw_primitivetypes2d.hxx6
-rw-r--r--sw/inc/swabstdlg.hxx4
-rw-r--r--sw/inc/undobj.hxx142
-rw-r--r--sw/inc/unocrsrhelper.hxx7
-rw-r--r--sw/inc/unoidx.hxx12
-rw-r--r--sw/inc/unoprnms.hxx5
-rw-r--r--sw/inc/unosection.hxx12
-rw-r--r--sw/inc/unotextmarkup.hxx1
-rwxr-xr-xsw/inc/viewsh.hxx14
-rwxr-xr-xsw/qa/complex/writer/TextPortionEnumerationTest.java409
-rw-r--r--sw/qa/complex/writer/testdocuments/TESTXMLID.odtbin0 -> 10879 bytes
-rw-r--r--sw/source/core/SwNumberTree/SwNodeNum.cxx2
-rw-r--r--sw/source/core/access/acccell.cxx30
-rw-r--r--sw/source/core/access/acccell.hxx4
-rw-r--r--sw/source/core/access/acccontext.cxx304
-rw-r--r--sw/source/core/access/acccontext.hxx33
-rw-r--r--sw/source/core/access/accdoc.cxx4
-rw-r--r--sw/source/core/access/accfootnote.hxx10
-rw-r--r--sw/source/core/access/accframe.cxx266
-rw-r--r--sw/source/core/access/accframe.hxx122
-rw-r--r--sw/source/core/access/accframebase.hxx10
-rw-r--r--sw/source/core/access/accfrmobj.cxx401
-rw-r--r--sw/source/core/access/accfrmobj.hxx214
-rw-r--r--sw/source/core/access/accfrmobjmap.cxx154
-rw-r--r--sw/source/core/access/accfrmobjmap.hxx92
-rw-r--r--sw/source/core/access/accfrmobjslist.cxx129
-rw-r--r--sw/source/core/access/accfrmobjslist.hxx189
-rw-r--r--sw/source/core/access/accmap.cxx526
-rw-r--r--sw/source/core/access/accpara.cxx452
-rw-r--r--sw/source/core/access/accpara.hxx39
-rw-r--r--sw/source/core/access/accselectionhelper.cxx77
-rw-r--r--sw/source/core/access/acctable.cxx195
-rw-r--r--sw/source/core/access/acctable.hxx16
-rw-r--r--sw/source/core/access/makefile.mk6
-rw-r--r--sw/source/core/access/parachangetrackinginfo.cxx231
-rw-r--r--sw/source/core/access/parachangetrackinginfo.hxx59
-rw-r--r--sw/source/core/access/textmarkuphelper.cxx55
-rw-r--r--sw/source/core/access/textmarkuphelper.hxx29
-rw-r--r--sw/source/core/bastyp/index.cxx2
-rw-r--r--sw/source/core/crsr/crstrvl.cxx38
-rw-r--r--sw/source/core/crsr/findtxt.cxx5
-rw-r--r--sw/source/core/crsr/trvlfnfl.cxx8
-rw-r--r--sw/source/core/crsr/trvlreg.cxx2
-rw-r--r--sw/source/core/doc/dbgoutsw.cxx1
-rwxr-xr-xsw/source/core/doc/doc.cxx9
-rw-r--r--sw/source/core/doc/docbm.cxx5
-rw-r--r--sw/source/core/doc/doccomp.cxx2
-rw-r--r--sw/source/core/doc/docdde.cxx4
-rw-r--r--sw/source/core/doc/docfmt.cxx14
-rw-r--r--sw/source/core/doc/docglbl.cxx36
-rw-r--r--sw/source/core/doc/doclay.cxx2
-rw-r--r--sw/source/core/doc/docnew.cxx4
-rw-r--r--sw/source/core/doc/doctxm.cxx77
-rw-r--r--sw/source/core/docnode/ndsect.cxx263
-rw-r--r--sw/source/core/docnode/node2lay.cxx4
-rw-r--r--sw/source/core/docnode/section.cxx499
-rw-r--r--sw/source/core/draw/dview.cxx5
-rw-r--r--sw/source/core/edit/edattr.cxx8
-rw-r--r--sw/source/core/edit/edglbldc.cxx2
-rw-r--r--sw/source/core/edit/edsect.cxx16
-rw-r--r--sw/source/core/edit/edtox.cxx7
-rw-r--r--sw/source/core/fields/postithelper.cxx72
-rw-r--r--sw/source/core/frmedt/fecopy.cxx13
-rw-r--r--sw/source/core/frmedt/fefly1.cxx6
-rw-r--r--sw/source/core/frmedt/feshview.cxx7
-rw-r--r--sw/source/core/inc/cellfrm.hxx4
-rw-r--r--sw/source/core/inc/doctxm.hxx2
-rw-r--r--sw/source/core/inc/pagefrm.hxx6
-rwxr-xr-xsw/source/core/inc/unometa.hxx17
-rw-r--r--sw/source/core/inc/viewimp.hxx15
-rw-r--r--sw/source/core/inc/wrong.hxx8
-rw-r--r--sw/source/core/layout/layact.cxx24
-rw-r--r--sw/source/core/layout/pagechg.cxx14
-rw-r--r--sw/source/core/layout/paintfrm.cxx2
-rw-r--r--sw/source/core/layout/tabfrm.cxx50
-rw-r--r--sw/source/core/layout/wsfrm.cxx22
-rw-r--r--sw/source/core/text/EnhancedPDFExportHelper.cxx11
-rw-r--r--sw/source/core/text/inftxt.cxx6
-rw-r--r--sw/source/core/text/txtfly.cxx78
-rw-r--r--sw/source/core/text/txtfrm.cxx7
-rw-r--r--sw/source/core/txtnode/ndtxt.cxx123
-rw-r--r--sw/source/core/undo/rolbck.cxx5
-rw-r--r--sw/source/core/undo/unattr.cxx4
-rw-r--r--sw/source/core/undo/undel.cxx9
-rw-r--r--sw/source/core/undo/unsect.cxx302
-rw-r--r--sw/source/core/unocore/unocoll.cxx7
-rw-r--r--sw/source/core/unocore/unocrsrhelper.cxx85
-rw-r--r--sw/source/core/unocore/unoidx.cxx209
-rw-r--r--sw/source/core/unocore/unomap.cxx3
-rw-r--r--sw/source/core/unocore/unoobj2.cxx4
-rw-r--r--sw/source/core/unocore/unoprnms.cxx1
-rw-r--r--sw/source/core/unocore/unorefmk.cxx86
-rw-r--r--sw/source/core/unocore/unosect.cxx244
-rw-r--r--sw/source/core/view/viewimp.cxx4
-rwxr-xr-xsw/source/core/view/viewsh.cxx46
-rw-r--r--sw/source/filter/html/htmlsect.cxx26
-rw-r--r--sw/source/filter/html/wrthtml.cxx5
-rw-r--r--sw/source/filter/inc/fltshell.hxx7
-rw-r--r--sw/source/filter/rtf/rtffly.cxx4
-rw-r--r--sw/source/filter/rtf/swparrtf.cxx5
-rw-r--r--sw/source/filter/ww1/fltshell.cxx37
-rw-r--r--sw/source/filter/ww1/w1filter.cxx4
-rw-r--r--sw/source/filter/ww8/WW8Sttbf.cxx1
-rw-r--r--sw/source/filter/ww8/wrtw8nds.cxx6
-rw-r--r--sw/source/filter/ww8/wrtww8gr.cxx5
-rw-r--r--sw/source/filter/ww8/ww8par.cxx2
-rw-r--r--sw/source/filter/ww8/ww8par.hxx2
-rw-r--r--sw/source/filter/ww8/ww8par5.cxx8
-rw-r--r--sw/source/filter/ww8/ww8par6.cxx13
-rw-r--r--sw/source/filter/xml/xmltbli.cxx6
-rw-r--r--sw/source/ui/app/applab.cxx9
-rw-r--r--sw/source/ui/app/docsh.cxx17
-rw-r--r--sw/source/ui/dialog/regionsw.cxx14
-rw-r--r--sw/source/ui/dialog/swdlgfact.cxx5
-rw-r--r--sw/source/ui/dialog/swdlgfact.hxx2
-rw-r--r--sw/source/ui/dialog/uiregionsw.cxx314
-rw-r--r--sw/source/ui/dochdl/swdtflvr.cxx9
-rw-r--r--sw/source/ui/docvw/AnchorOverlayObject.cxx467
-rw-r--r--sw/source/ui/docvw/AnchorOverlayObject.hxx143
-rw-r--r--sw/source/ui/docvw/AnnotationMenuButton.cxx222
-rw-r--r--sw/source/ui/docvw/AnnotationMenuButton.hxx63
-rw-r--r--sw/source/ui/docvw/AnnotationWin.cxx292
-rw-r--r--sw/source/ui/docvw/PostItMgr.cxx583
-rw-r--r--sw/source/ui/docvw/ShadowOverlayObject.cxx268
-rw-r--r--sw/source/ui/docvw/ShadowOverlayObject.hxx80
-rw-r--r--sw/source/ui/docvw/SidebarTxtControl.cxx422
-rw-r--r--sw/source/ui/docvw/SidebarTxtControl.hxx87
-rw-r--r--sw/source/ui/docvw/SidebarTxtControlAcc.cxx317
-rw-r--r--sw/source/ui/docvw/SidebarTxtControlAcc.hxx56
-rw-r--r--sw/source/ui/docvw/SidebarWin.cxx1373
-rw-r--r--sw/source/ui/docvw/SidebarWinAcc.cxx162
-rw-r--r--sw/source/ui/docvw/SidebarWinAcc.hxx67
-rw-r--r--sw/source/ui/docvw/access.src16
-rw-r--r--sw/source/ui/docvw/annotation.hrc54
-rw-r--r--sw/source/ui/docvw/annotation.src (renamed from sd/inc/segdefs.hxx)43
-rw-r--r--sw/source/ui/docvw/docvw.hrc11
-rw-r--r--sw/source/ui/docvw/docvw.src35
-rw-r--r--sw/source/ui/docvw/edtwin.cxx25
-rw-r--r--sw/source/ui/docvw/edtwin2.cxx1
-rw-r--r--sw/source/ui/docvw/frmsidebarwincontainer.cxx216
-rw-r--r--sw/source/ui/docvw/frmsidebarwincontainer.hxx73
-rw-r--r--sw/source/ui/docvw/makefile.mk15
-rw-r--r--sw/source/ui/docvw/postit.cxx2482
-rw-r--r--sw/source/ui/frmdlg/column.cxx3
-rw-r--r--sw/source/ui/inc/SidebarWindowsConsts.hxx (renamed from xmloff/source/core/xmlkywd.cxx)19
-rw-r--r--sw/source/ui/inc/regionsw.hxx89
-rw-r--r--sw/source/ui/inc/wrtsh.hxx4
-rw-r--r--sw/source/ui/makefile.mk4
-rwxr-xr-xsw/source/ui/shells/annotsh.cxx112
-rw-r--r--sw/source/ui/shells/textdrw.cxx1
-rw-r--r--sw/source/ui/shells/textfld.cxx19
-rw-r--r--sw/source/ui/uiview/pview.cxx2
-rw-r--r--sw/source/ui/uiview/view.cxx7
-rw-r--r--sw/source/ui/uiview/view2.cxx14
-rw-r--r--sw/source/ui/uiview/viewmdi.cxx19
-rw-r--r--sw/source/ui/uiview/viewsrch.cxx2
-rw-r--r--sw/source/ui/uiview/viewtab.cxx7
-rw-r--r--sw/source/ui/utlui/attrdesc.cxx6
-rw-r--r--sw/source/ui/utlui/attrdesc.hrc6
-rw-r--r--sw/source/ui/utlui/attrdesc.src6
-rw-r--r--sw/source/ui/utlui/content.cxx12
-rw-r--r--sw/source/ui/utlui/glbltree.cxx36
-rw-r--r--sw/source/ui/vba/vbafind.cxx4
-rw-r--r--sw/source/ui/vba/vbafind.hxx2
-rw-r--r--sw/source/ui/vba/vbaheaderfooterhelper.cxx3
-rw-r--r--sw/source/ui/vba/vbaheaderfooterhelper.hxx2
-rw-r--r--sw/source/ui/vba/vbarange.cxx4
-rw-r--r--sw/source/ui/vba/vbarange.hxx2
-rw-r--r--sw/source/ui/vba/vbasystem.cxx5
-rw-r--r--sw/source/ui/vba/vbasystem.hxx1
-rw-r--r--sw/source/ui/vba/vbawindow.cxx5
-rw-r--r--sw/source/ui/vba/vbawindow.hxx1
-rw-r--r--sw/source/ui/vba/vbawrapformat.cxx5
-rw-r--r--sw/source/ui/vba/vbawrapformat.hxx1
-rw-r--r--sw/source/ui/wrtsh/wrtsh1.cxx4
-rw-r--r--sw/source/ui/wrtsh/wrtsh2.cxx10
-rw-r--r--sw/util/makefile.mk10
-rw-r--r--sysui/desktop/freedesktop/freedesktop-menus.spec2
-rw-r--r--sysui/desktop/macosx/Info.plist4
-rw-r--r--sysui/desktop/macosx/makefile.mk8
-rw-r--r--sysui/desktop/mandriva/mandriva-menus.spec2
-rw-r--r--sysui/desktop/mimetypes/extension.desktop2
-rw-r--r--sysui/desktop/redhat/redhat-menus.spec2
-rw-r--r--sysui/desktop/suse/suse-menus.spec2
-rwxr-xr-xtestautomation/dbaccess/optional/includes/frm_FormFilter.inc6
-rwxr-xr-xtestautomation/framework/optional/f_basic_vba-compat.bas7
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/CJK_CollationDialogue_1.inc16
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/CJK_RubyDialogueProposal_1.inc2
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/basic_issues.inc106
-rw-r--r--testautomation/framework/optional/includes/basic_vba-compat_security_check.inc105
-rwxr-xr-x[-rw-r--r--]testautomation/framework/optional/includes/configuration.inc13
-rw-r--r--testautomation/framework/optional/input/vba-compat/Book1.xlsbin0 -> 18432 bytes
-rwxr-xr-x[-rw-r--r--]testautomation/framework/required/includes/printer_administration.inc42
-rwxr-xr-x[-rw-r--r--]testautomation/framework/tools/includes/CJK_tools.inc17
-rwxr-xr-xtestautomation/framework/tools/input/i18ndata.txt2
-rwxr-xr-xtestautomation/global/input/macros.txt45
-rwxr-xr-x[-rw-r--r--]testautomation/global/input/officeinfo.txt1
-rwxr-xr-xtestautomation/global/system/includes/iniinfo.inc24
-rwxr-xr-xtestautomation/global/system/includes/master.inc29
-rwxr-xr-x[-rw-r--r--]testautomation/global/system/includes/status.inc3
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/optional/t_locale_strings1.inc28
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/optional/t_toolbar_tools1.inc17
-rwxr-xr-x[-rw-r--r--]testautomation/global/tools/includes/required/t_doc2.inc22
-rwxr-xr-xtestautomation/global/win/edia_d_h.win6
-rwxr-xr-xtestautomation/global/win/spadmin.win1
-rwxr-xr-x[-rw-r--r--]testautomation/graphics/optional/includes/global/g_autocorrection.inc4
-rwxr-xr-x[-rw-r--r--]testautomation/graphics/optional/includes/global/g_find_replace.inc3
-rwxr-xr-x[-rw-r--r--]testautomation/graphics/optional/includes/global/g_ole.inc4
-rwxr-xr-x[-rw-r--r--]testautomation/graphics/optional/includes/global/g_stylist.inc24
-rwxr-xr-x[-rw-r--r--]testautomation/graphics/optional/includes/global/gallery.inc5
-rwxr-xr-x[-rw-r--r--]testautomation/graphics/optional/includes/global/id_005.inc6
-rwxr-xr-x[-rw-r--r--]testautomation/graphics/optional/includes/impress/i_slideshow.inc6
-rwxr-xr-x[-rw-r--r--]testautomation/graphics/optional/includes/impress/i_us_present.inc176
-rwxr-xr-x[-rw-r--r--]testautomation/graphics/required/includes/global/id_005.inc6
-rwxr-xr-xtestautomation/spreadsheet/required/includes/c_upd_filemenu.inc6
-rwxr-xr-x[-rw-r--r--]testautomation/spreadsheet/required/includes/c_upd_viewmenu.inc15
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion1.inc38
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/hangulhanjaonversion/hhConversion2.inc50
-rwxr-xr-xtestautomation/writer/optional/includes/regexp/search.inc7
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/stylist/w_stylist.inc510
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/undo/w_undo_history_1.inc2
-rwxr-xr-x[-rw-r--r--]testautomation/writer/optional/includes/undo/w_undo_history_2.inc4
-rwxr-xr-x[-rw-r--r--]testautomation/writer/required/includes/w_002_.inc28
-rwxr-xr-x[-rw-r--r--]testautomation/writer/required/includes/w_011_.inc8
-rwxr-xr-x[-rw-r--r--]testautomation/writer/tools/includes/w_locale_strings2.inc27
-rwxr-xr-x[-rw-r--r--]testautomation/writer/tools/includes/w_tool1.inc14
-rw-r--r--toolkit/source/layout/core/box-base.cxx5
-rw-r--r--toolkit/source/layout/core/box-base.hxx2
-rw-r--r--toolkit/src2xml/include.lst1
-rw-r--r--tools/inc/tools/solar.h2
-rw-r--r--tools/inc/tools/urlobj.hxx31
-rw-r--r--tools/source/fsys/urlobj.cxx64
-rw-r--r--tools/workben/urltest.cxx14
-rw-r--r--ucb/source/core/ucb.cxx414
-rw-r--r--ucb/source/core/ucb.hxx39
-rw-r--r--ucbhelper/inc/ucbhelper/configureucb.hxx201
-rw-r--r--ucbhelper/inc/ucbhelper/contentbroker.hxx2
-rw-r--r--ucbhelper/inc/ucbhelper/registerucb.hxx129
-rw-r--r--ucbhelper/prj/d.lst2
-rw-r--r--ucbhelper/source/client/contentbroker.cxx16
-rw-r--r--ucbhelper/source/provider/makefile.mk2
-rw-r--r--ucbhelper/source/provider/registerucb.cxx40
-rw-r--r--ucbhelper/source/provider/registerucb.hxx96
-rw-r--r--unoxml/qa/complex/RDFRepositoryTest.java22
-rw-r--r--unoxml/source/rdf/librdf_repository.cxx402
-rw-r--r--vbahelper/inc/vbahelper/vbaaccesshelper.hxx79
-rw-r--r--vbahelper/inc/vbahelper/vbahelper.hxx12
-rw-r--r--vbahelper/prj/d.lst1
-rw-r--r--vbahelper/source/msforms/makefile.mk5
-rw-r--r--vbahelper/source/msforms/vbacontrol.cxx4
-rw-r--r--vbahelper/source/msforms/vbacontrol.hxx1
-rw-r--r--vbahelper/source/vbahelper/makefile.mk5
-rw-r--r--vbahelper/source/vbahelper/vbahelper.cxx16
-rw-r--r--vbahelper/util/makefile.mk4
-rw-r--r--vcl/aqua/inc/salframe.h2
-rw-r--r--vcl/aqua/inc/salinst.h2
-rw-r--r--vcl/aqua/source/a11y/aqua11yfactory.mm3
-rw-r--r--vcl/aqua/source/a11y/aqua11ytablewrapper.h10
-rw-r--r--vcl/aqua/source/a11y/aqua11ytablewrapper.mm182
-rw-r--r--vcl/aqua/source/a11y/aqua11ywrapper.mm31
-rw-r--r--vcl/aqua/source/app/salinst.cxx15
-rw-r--r--vcl/aqua/source/gdi/salgdi.cxx7
-rw-r--r--vcl/aqua/source/window/salframe.cxx17
-rwxr-xr-xvcl/aqua/source/window/salframeview.mm78
-rw-r--r--vcl/inc/vcl/button.hxx2
-rw-r--r--vcl/inc/vcl/cmdevt.hxx8
-rw-r--r--vcl/inc/vcl/glyphcache.hxx5
-rw-r--r--vcl/inc/vcl/outfont.hxx6
-rw-r--r--vcl/inc/vcl/salwtype.hxx5
-rw-r--r--vcl/os2/source/window/salframe.cxx7
-rwxr-xr-x[-rw-r--r--]vcl/source/app/settings.cxx2
-rw-r--r--vcl/source/control/button.cxx25
-rw-r--r--vcl/source/control/tabctrl.cxx2
-rw-r--r--vcl/source/fontsubset/cff.cxx60
-rw-r--r--vcl/source/gdi/bitmap.cxx18
-rw-r--r--vcl/source/gdi/outdev3.cxx12
-rw-r--r--vcl/source/gdi/pdfwriter_impl.cxx2
-rwxr-xr-xvcl/source/gdi/sallayout.cxx4
-rw-r--r--vcl/source/glyphs/glyphcache.cxx6
-rw-r--r--vcl/source/src/print.src2
-rw-r--r--vcl/source/window/printdlg.cxx2
-rw-r--r--vcl/source/window/winproc.cxx3
-rw-r--r--vcl/unx/gtk/a11y/atkbridge.cxx3
-rw-r--r--vcl/unx/gtk/a11y/atktext.cxx136
-rw-r--r--vcl/unx/gtk/a11y/atktextattributes.cxx63
-rw-r--r--vcl/unx/gtk/a11y/atktextattributes.hxx5
-rw-r--r--vcl/unx/gtk/a11y/atkwindow.cxx26
-rw-r--r--vcl/unx/gtk/a11y/atkwrapper.cxx4
-rw-r--r--vcl/unx/gtk/app/gtkdata.cxx21
-rw-r--r--vcl/unx/gtk/window/gtkframe.cxx49
-rw-r--r--vcl/unx/inc/saldata.hxx4
-rw-r--r--vcl/unx/inc/wmadaptor.hxx24
-rw-r--r--vcl/unx/source/app/saldata.cxx1
-rw-r--r--vcl/unx/source/app/saldisp.cxx6
-rw-r--r--vcl/unx/source/app/wmadaptor.cxx89
-rw-r--r--vcl/unx/source/gdi/salgdi3.cxx38
-rw-r--r--vcl/unx/source/plugadapt/salplug.cxx8
-rw-r--r--vcl/unx/source/window/salframe.cxx142
-rw-r--r--vcl/win/source/gdi/salgdi3.cxx313
-rw-r--r--vcl/win/source/gdi/salnativewidgets-luna.cxx29
-rw-r--r--writerfilter/source/ooxml/OOXMLFastContextHandler.cxx2
-rw-r--r--writerperfect/source/wpdimp/WordPerfectImportFilter.cxx3
-rw-r--r--xmloff/inc/RDFaExportHelper.hxx2
-rw-r--r--xmloff/inc/RDFaImportHelper.hxx24
-rw-r--r--xmloff/inc/xmlkywd.hxx1998
-rw-r--r--xmloff/inc/xmloff/txtimp.hxx388
-rw-r--r--xmloff/inc/xmloff/xmlimp.hxx7
-rw-r--r--xmloff/prj/d.lst1
-rw-r--r--xmloff/source/chart/SchXMLExport.cxx8
-rw-r--r--xmloff/source/chart/SchXMLPlotAreaContext.cxx4
-rw-r--r--xmloff/source/chart/SchXMLSeries2Context.cxx225
-rw-r--r--xmloff/source/chart/SchXMLTableContext.cxx12
-rw-r--r--xmloff/source/chart/SchXMLTools.cxx70
-rw-r--r--xmloff/source/chart/SchXMLTools.hxx5
-rw-r--r--xmloff/source/core/RDFaExportHelper.cxx61
-rw-r--r--xmloff/source/core/RDFaImportHelper.cxx98
-rw-r--r--xmloff/source/core/makefile.mk7
-rw-r--r--xmloff/source/core/xmlimp.cxx23
-rw-r--r--xmloff/source/draw/XMLReplacementImageContext.cxx1
-rw-r--r--xmloff/source/draw/sdpropls.cxx3
-rw-r--r--xmloff/source/draw/shapeexport.cxx40
-rw-r--r--xmloff/source/draw/ximpshap.cxx53
-rw-r--r--xmloff/source/style/WordWrapPropertyHdl.cxx1
-rw-r--r--xmloff/source/style/XMLClipPropertyHandler.cxx3
-rw-r--r--xmloff/source/style/XMLRectangleMembersHandler.cxx5
-rw-r--r--xmloff/source/style/adjushdl.cxx4
-rw-r--r--xmloff/source/style/backhdl.cxx4
-rw-r--r--xmloff/source/style/bordrhdl.cxx4
-rw-r--r--xmloff/source/style/breakhdl.cxx4
-rw-r--r--xmloff/source/style/cdouthdl.cxx6
-rw-r--r--xmloff/source/style/chrhghdl.cxx4
-rw-r--r--xmloff/source/style/chrlohdl.cxx4
-rw-r--r--xmloff/source/style/csmaphdl.cxx6
-rw-r--r--xmloff/source/style/escphdl.cxx4
-rw-r--r--xmloff/source/style/fonthdl.cxx3
-rw-r--r--xmloff/source/style/lspachdl.cxx4
-rw-r--r--xmloff/source/style/postuhdl.cxx4
-rw-r--r--xmloff/source/style/styleexp.cxx1
-rw-r--r--xmloff/source/style/undlihdl.cxx6
-rw-r--r--xmloff/source/style/xmlimppr.cxx1
-rw-r--r--xmloff/source/style/xmlnumfi.cxx2
-rw-r--r--xmloff/source/text/XMLIndexTOCContext.cxx38
-rw-r--r--xmloff/source/text/XMLIndexTOCContext.hxx3
-rw-r--r--xmloff/source/text/XMLPropertyBackpatcher.cxx61
-rw-r--r--xmloff/source/text/XMLSectionExport.cxx190
-rw-r--r--xmloff/source/text/XMLSectionImportContext.cxx6
-rw-r--r--xmloff/source/text/XMLTextFrameContext.cxx30
-rw-r--r--xmloff/source/text/XMLTextListBlockContext.cxx10
-rw-r--r--xmloff/source/text/XMLTextListItemContext.cxx4
-rw-r--r--xmloff/source/text/XMLTextMarkImportContext.cxx55
-rw-r--r--xmloff/source/text/txtfldi.cxx81
-rw-r--r--xmloff/source/text/txtimp.cxx1223
-rw-r--r--xmloff/source/text/txtlists.cxx5
-rw-r--r--xmloff/source/text/txtparae.cxx1
-rw-r--r--xmloff/source/text/txtparai.cxx2
-rw-r--r--xmloff/util/makefile.mk26
717 files changed, 22195 insertions, 23103 deletions
diff --git a/automation/source/testtool/objtest.cxx b/automation/source/testtool/objtest.cxx
index 461dff80b13d..2361361f277f 100644
--- a/automation/source/testtool/objtest.cxx
+++ b/automation/source/testtool/objtest.cxx
@@ -518,6 +518,8 @@ void TestToolObj::LoadIniFile() // Laden der IniEinstellungen, die d
abGP.Append( "21" ); // Linux S390
#elif defined LINUX && defined HPPA
abGP.Append( "22" ); // Linux PA-RISC
+#elif defined LINUX && defined AXP
+ abGP.Append( "23" ); // Linux ALPHA
#else
#error ("unknown platform. please request an ID for your platform on qa/dev")
#endif
diff --git a/basic/source/classes/sb.cxx b/basic/source/classes/sb.cxx
index 86850d9991c6..3373442e5eb2 100644..100755
--- a/basic/source/classes/sb.cxx
+++ b/basic/source/classes/sb.cxx
@@ -54,6 +54,7 @@
#include "sb.hrc"
#include <basrid.hxx>
#include <vos/mutex.hxx>
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
// #pragma SW_SEGMENT_CLASS( SBASIC, SBASIC_CODE )
@@ -63,18 +64,43 @@ TYPEINIT1(StarBASIC,SbxObject)
#define RTLNAME "@SBRTL"
// i#i68894#
+using com::sun::star::uno::Reference;
+using com::sun::star::uno::Any;
+using com::sun::star::uno::UNO_QUERY;
+using com::sun::star::lang::XMultiServiceFactory;
+
+const static String aThisComponent( RTL_CONSTASCII_USTRINGPARAM("ThisComponent") );
+const static String aVBAHook( RTL_CONSTASCII_USTRINGPARAM( "VBAGlobals" ) );
SbxObject* StarBASIC::getVBAGlobals( )
{
if ( !pVBAGlobals )
- pVBAGlobals = (SbUnoObject*)Find( String(RTL_CONSTASCII_USTRINGPARAM("VBAGlobals")), SbxCLASS_DONTCARE );
+ {
+ Any aThisDoc;
+ if ( GetUNOConstant("ThisComponent", aThisDoc) )
+ {
+ Reference< XMultiServiceFactory > xDocFac( aThisDoc, UNO_QUERY );
+ if ( xDocFac.is() )
+ {
+ try
+ {
+ xDocFac->createInstance( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "ooo.vba.VBAGlobals" ) ) );
+ }
+ catch( Exception& )
+ {
+ // Ignore
+ }
+ }
+ }
+ pVBAGlobals = (SbUnoObject*)Find( aVBAHook , SbxCLASS_DONTCARE );
+ }
return pVBAGlobals;
}
// i#i68894#
SbxVariable* StarBASIC::VBAFind( const String& rName, SbxClassType t )
{
- if( rName.EqualsAscii("ThisComponent") )
+ if( rName == aThisComponent )
return NULL;
// rename to init globals
if ( getVBAGlobals( ) )
diff --git a/basic/source/classes/sbunoobj.cxx b/basic/source/classes/sbunoobj.cxx
index 0e8928bc6c1a..1c95b4f30de6 100644
--- a/basic/source/classes/sbunoobj.cxx
+++ b/basic/source/classes/sbunoobj.cxx
@@ -139,16 +139,19 @@ bool SbUnoObject::getDefaultPropName( SbUnoObject* pUnoObj, String& sDfltProp )
SbxVariable* getDefaultProp( SbxVariable* pRef )
{
SbxVariable* pDefaultProp = NULL;
- SbxObject* pObj = PTR_CAST(SbxObject,(SbxVariable*) pRef);
- if ( !pObj )
+ if ( pRef->GetType() == SbxOBJECT )
{
- SbxBase* pObjVarObj = pRef->GetObject();
- pObj = PTR_CAST(SbxObject,pObjVarObj);
- }
- if ( pObj && pObj->ISA(SbUnoObject) )
- {
- SbUnoObject* pUnoObj = PTR_CAST(SbUnoObject,(SbxObject*)pObj);
- pDefaultProp = pUnoObj->GetDfltProperty();
+ SbxObject* pObj = PTR_CAST(SbxObject,(SbxVariable*) pRef);
+ if ( !pObj )
+ {
+ SbxBase* pObjVarObj = pRef->GetObject();
+ pObj = PTR_CAST(SbxObject,pObjVarObj);
+ }
+ if ( pObj && pObj->ISA(SbUnoObject) )
+ {
+ SbUnoObject* pUnoObj = PTR_CAST(SbUnoObject,(SbxObject*)pObj);
+ pDefaultProp = pUnoObj->GetDfltProperty();
+ }
}
return pDefaultProp;
}
@@ -1601,6 +1604,23 @@ bool checkUnoObjectType( SbUnoObject* pUnoObj,
break;
}
::rtl::OUString sClassName = xClass->getName();
+ if ( sClassName.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.bridge.oleautomation.XAutomationObject" ) ) ) )
+ {
+ // there is a hack in the extensions/source/ole/oleobj.cxx to return the typename of the automation object, lets check if it
+ // matches
+ Reference< XInvocation > xInv( aToInspectObj, UNO_QUERY );
+ if ( xInv.is() )
+ {
+ rtl::OUString sTypeName;
+ xInv->getValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("$GetTypeName") ) ) >>= sTypeName;
+ if ( sTypeName.getLength() == 0 || sTypeName.equals( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("IDispatch") ) ) )
+ // can't check type, leave it pass
+ result = true;
+ else
+ result = sTypeName.equals( aClass );
+ }
+ break; // finished checking automation object
+ }
OSL_TRACE("Checking if object implements %s",
OUStringToOString( defaultNameSpace + aClass,
RTL_TEXTENCODING_UTF8 ).getStr() );
diff --git a/basic/source/runtime/makefile.mk b/basic/source/runtime/makefile.mk
index c0b4bd3bdc10..9bd197975ee6 100644
--- a/basic/source/runtime/makefile.mk
+++ b/basic/source/runtime/makefile.mk
@@ -82,8 +82,5 @@ EXCEPTIONSFILES=$(SLO)$/step0.obj \
$(SLO)$/%.obj: %.s
#kendy: Cut'n'paste from bridges/source/cpp_uno/mingw_intel/makefile.mk
-#cmc: Ideally --noexecstack would be in operations, but with #i51385# pyuno
-#remote bridgeing breaks
-# $(CC) -Wa,--noexecstack -c -o $(SLO)$/$(@:b).o $<
$(CC) -c -o $(SLO)$/$(@:b).obj $<
touch $@
diff --git a/bridges/prj/build.lst b/bridges/prj/build.lst
index c6e342520672..0e7979742562 100644
--- a/bridges/prj/build.lst
+++ b/bridges/prj/build.lst
@@ -12,16 +12,17 @@ br bridges\source\cpp_uno\gcc3_os2_intel nmake - p br_gcc3os br_cppuno_shared br
br bridges\source\cpp_uno\gcc3_freebsd_intel nmake - u br_gcc3fi br_cppuno_shared br_unotypes br_inc NULL
br bridges\source\cpp_uno\gcc3_linux_x86-64 nmake - u br_gcc3lx br_cppuno_shared br_unotypes br_inc NULL
br bridges\source\cpp_uno\gcc3_freebsd_x86-64 nmake - u br_gcc3fx br_cppuno_shared br_unotypes br_inc NULL
-br bridges\source\cpp_uno\gcc3_linux_powerpc nmake - u br_gcclp3 br_cppuno_shared br_unotypes br_inc NULL
-br bridges\source\cpp_uno\gcc3_linux_powerpc64 nmake - u br_gcclp3_64 br_cppuno_shared br_unotypes br_inc NULL
-br bridges\source\cpp_uno\gcc3_linux_mips nmake - u br_gcc3mips br_cppuno_shared br_unotypes br_inc NULL
-br bridges\source\cpp_uno\gcc3_linux_m68k nmake - u br_gcc3m68k br_cppuno_shared br_unotypes br_inc NULL
-br bridges\source\cpp_uno\gcc3_linux_s390 nmake - u br_gccl33 br_unotypes br_inc NULL
-br bridges\source\cpp_uno\gcc3_linux_s390x nmake - u br_gccl3x br_unotypes br_inc NULL
-br bridges\source\cpp_uno\gcc3_linux_sparc nmake - u br_gccl3s br_unotypes br_cppuno_shared br_inc NULL
-br bridges\source\cpp_uno\gcc3_linux_arm nmake - u br_gccl3r br_unotypes NULL
-br bridges\source\cpp_uno\gcc3_linux_ia64 nmake - u br_gccl3a br_unotypes NULL
-br bridges\source\cpp_uno\gcc3_linux_hppa nmake - u br_gccl3h br_unotypes NULL
+br bridges\source\cpp_uno\gcc3_linux_powerpc nmake - u br_gcc3lp br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_powerpc64 nmake - u br_gcc3lp_64 br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_mips nmake - u br_gcc3lmips br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_m68k nmake - u br_gcc3lm68k br_cppuno_shared br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_s390 nmake - u br_gcc3l3 br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_s390x nmake - u br_gcc3l3_64 br_unotypes br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_sparc nmake - u br_gcc3ls br_unotypes br_cppuno_shared br_inc NULL
+br bridges\source\cpp_uno\gcc3_linux_arm nmake - u br_gcc3lr br_unotypes NULL
+br bridges\source\cpp_uno\gcc3_linux_ia64 nmake - u br_gcc3la br_unotypes NULL
+br bridges\source\cpp_uno\gcc3_linux_hppa nmake - u br_gcc3lh br_unotypes NULL
+br bridges\source\cpp_uno\gcc3_linux_alpha nmake - u br_gcc3ll br_unotypes NULL
br bridges\source\cpp_uno\gcc3_macosx_intel nmake - u br_gcc3macoxi br_cppuno_shared br_unotypes br_inc NULL
br bridges\source\cpp_uno\gcc3_macosx_powerpc nmake - u br_gcc3macoxp br_cppuno_shared br_unotypes br_inc NULL
br bridges\source\cpp_uno\cc50_solaris_sparc nmake - u br_cc50sols br_unotypes br_cppuno_shared br_inc NULL
diff --git a/bridges/source/cpp_uno/gcc3_freebsd_intel/makefile.mk b/bridges/source/cpp_uno/gcc3_freebsd_intel/makefile.mk
index 1e00634bd6a3..87ff690dd653 100644
--- a/bridges/source/cpp_uno/gcc3_freebsd_intel/makefile.mk
+++ b/bridges/source/cpp_uno/gcc3_freebsd_intel/makefile.mk
@@ -77,8 +77,5 @@ SHL1STDLIBS= \
.INCLUDE : target.mk
$(SLO)$/%.obj: %.s
-#cmc: Ideally --noexecstack would be in operations, but with #i51385# pyuno
-#remote bridgeing breaks
-# $(CC) -Wa,--noexecstack -c -o $(SLO)$/$(@:b).o $<
$(CC) -c -o $(SLO)$/$(@:b).o $<
touch $@
diff --git a/bridges/source/cpp_uno/gcc3_linux_alpha/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_alpha/cpp2uno.cxx
new file mode 100644
index 000000000000..abc5ce67e4b4
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_alpha/cpp2uno.cxx
@@ -0,0 +1,676 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+#include <typelib/typedescription.hxx>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/cppinterfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/vtablefactory.hxx"
+
+#include "share.hxx"
+#include <stdio.h>
+
+//Calling Standards:
+// "Calling Standard for Alpha Systems"
+// (Tru64 UNIX Version 5.1 or higher, August 2000)
+//http://www.tru64unix.compaq.com/docs/base_doc/DOCUMENTATION/V51_HTML/ARH9MBTE/TITLE.HTM
+
+using namespace ::com::sun::star::uno;
+
+namespace
+{
+static typelib_TypeClass cpp2uno_call(
+ bridges::cpp_uno::shared::CppInterfaceProxy * pThis,
+ const typelib_TypeDescription * pMemberTypeDescr,
+ typelib_TypeDescriptionReference * pReturnTypeRef, // 0 indicates void return
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void ** gpreg, void ** fpreg, void ** ovrflw,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+#ifdef CMC_DEBUG
+ fprintf(stderr, "as far as cpp2uno_call\n");
+#endif
+ int nregs = 0; //number of words passed in registers
+
+ // gpreg: [ret *], this, [gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ if (pReturnTypeRef)
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+
+ void * pUnoReturn = 0;
+ void * pCppReturn = 0; // complex return ptr: if != 0 && != pUnoReturn, reconversion need
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pUnoReturn = pRegisterReturn; // direct way for simple types
+ }
+ else // complex return via ptr (pCppReturn)
+ {
+ pCppReturn = *(void **)gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+
+ pUnoReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pCppReturn); // direct way
+ }
+ }
+ // pop this
+ gpreg++;
+ fpreg++;
+ nregs++;
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int64), "### unexpected size!" );
+ // parameters
+ void ** pUnoArgs = (void **)alloca( 4 * sizeof(void *) * nParams );
+ void ** pCppArgs = pUnoArgs + nParams;
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pUnoArgs + (2 * nParams));
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pUnoArgs + (3 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "arg %d of %d\n", nPos, nParams);
+#endif
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr )) // value
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "simple type is %d\n", pParamTypeDescr->eTypeClass);
+#endif
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_FLOAT:
+ case typelib_TypeClass_DOUBLE:
+ if (nregs < axp::MAX_WORDS_IN_REGS)
+ {
+ if (pParamTypeDescr->eTypeClass == typelib_TypeClass_FLOAT)
+ {
+ float tmp = (float) (*((double *)fpreg));
+ (*((float *) fpreg)) = tmp;
+ }
+
+ pCppArgs[nPos] = pUnoArgs[nPos] = fpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ ovrflw++;
+ }
+ break;
+ case typelib_TypeClass_BYTE:
+ case typelib_TypeClass_BOOLEAN:
+ if (nregs < axp::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ ovrflw++;
+ }
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ if (nregs < axp::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ ovrflw++;
+ }
+ break;
+ case typelib_TypeClass_ENUM:
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ if (nregs < axp::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ ovrflw++;
+ }
+ break;
+ default:
+ if (nregs < axp::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos] = ovrflw;
+ ovrflw++;
+ }
+ break;
+ }
+
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+#ifdef CMC_DEBUG
+ fprintf(stderr, "complex, nregs is %d\n", nregs);
+#endif
+
+ void *pCppStack; //temporary stack pointer
+
+ if (nregs < axp::MAX_WORDS_IN_REGS)
+ {
+ pCppArgs[nPos] = pCppStack = *gpreg;
+ gpreg++;
+ fpreg++;
+ nregs++;
+ }
+ else
+ {
+ pCppArgs[nPos] = pCppStack = *ovrflw;
+ ovrflw++;
+ }
+
+ if (! rParam.bIn) // is pure out
+ {
+ // uno out is unconstructed mem!
+ pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize );
+ pTempIndizes[nTempIndizes] = nPos;
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pUnoArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pCppStack, pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pUnoArgs[nPos] = pCppStack;
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ }
+ }
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "end of params\n");
+#endif
+
+ // ExceptionHolder
+ uno_Any aUnoExc; // Any will be constructed by callee
+ uno_Any * pUnoExc = &aUnoExc;
+
+ // invoke uno dispatch call
+ (*pThis->getUnoI()->pDispatcher)( pThis->getUnoI(), pMemberTypeDescr, pUnoReturn, pUnoArgs, &pUnoExc );
+
+ // in case an exception occured...
+ if (pUnoExc)
+ {
+ // destruct temporary in/inout params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+
+ if (pParams[nIndex].bIn) // is in/inout => was constructed
+ uno_destructData( pUnoArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], 0 );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+
+ CPPU_CURRENT_NAMESPACE::raiseException( &aUnoExc, pThis->getBridge()->getUno2Cpp() ); // has to destruct the any
+ // is here for dummy
+ return typelib_TypeClass_VOID;
+ }
+ else // else no exception occured...
+ {
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bOut) // inout/out
+ {
+ // convert and assign
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+ uno_copyAndConvertData( pCppArgs[nIndex], pUnoArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ }
+ // destroy temp uno param
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return
+ if (pCppReturn) // has complex return
+ {
+ if (pUnoReturn != pCppReturn) // needs reconversion
+ {
+ uno_copyAndConvertData( pCppReturn, pUnoReturn, pReturnTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+ // destroy temp uno return
+ uno_destructData( pUnoReturn, pReturnTypeDescr, 0 );
+ }
+ // complex return ptr is set to return reg
+ *(void **)pRegisterReturn = pCppReturn;
+ }
+ if (pReturnTypeDescr)
+ {
+ typelib_TypeClass eRet = (typelib_TypeClass)pReturnTypeDescr->eTypeClass;
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ return eRet;
+ }
+ else
+ return typelib_TypeClass_VOID;
+ }
+}
+
+
+//============================================================================
+static typelib_TypeClass cpp_mediate(
+ sal_uInt64 nOffsetAndIndex,
+ void ** gpreg, void ** fpreg, void ** ovrflw,
+ sal_Int64 * pRegisterReturn /* space for register return */ )
+{
+ OSL_ENSURE( sizeof(sal_Int64)==sizeof(void *), "### unexpected!" );
+
+ sal_Int32 nVtableOffset = (nOffsetAndIndex >> 32);
+ sal_Int32 nFunctionIndex = (nOffsetAndIndex & 0xFFFFFFFF);
+
+#ifdef CMC_DEBUG
+ fprintf(stderr, "nVTableOffset, nFunctionIndex are %x %x\n", nVtableOffset, nFunctionIndex);
+#endif
+
+#ifdef CMC_DEBUG
+ // Let's figure out what is really going on here
+ {
+ fprintf( stderr, "= cpp_mediate () =\nGPR's (%d): ", 6 );
+ for ( unsigned int i = 0; i < 6; ++i )
+ fprintf( stderr, "0x%lx, ", gpreg[i] );
+ fprintf( stderr, "\n");
+ fprintf( stderr, "\nFPR's (%d): ", 6 );
+ for ( unsigned int i = 0; i < 6; ++i )
+ fprintf( stderr, "0x%lx (%f), ", fpreg[i], fpreg[i] );
+ fprintf( stderr, "\n");
+ }
+#endif
+
+
+ // gpreg: [ret *], this, [other gpr params]
+ // fpreg: [fpr params]
+ // ovrflw: [gpr or fpr params (properly aligned)]
+
+ // _this_ ptr is patched cppu_XInterfaceProxy object
+ void * pThis;
+ if( nFunctionIndex & 0x80000000 )
+ {
+ nFunctionIndex &= 0x7fffffff;
+ pThis = gpreg[1];
+ }
+ else
+ {
+ pThis = gpreg[0];
+ }
+
+ pThis = static_cast< char * >(pThis) - nVtableOffset;
+
+ bridges::cpp_uno::shared::CppInterfaceProxy * pCppI
+ = bridges::cpp_uno::shared::CppInterfaceProxy::castInterfaceToProxy(
+ pThis);
+
+ typelib_InterfaceTypeDescription * pTypeDescr = pCppI->getTypeDescr();
+
+
+ OSL_ENSURE( nFunctionIndex < pTypeDescr->nMapFunctionIndexToMemberIndex, "### illegal vtable index!" );
+ if (nFunctionIndex >= pTypeDescr->nMapFunctionIndexToMemberIndex)
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("illegal vtable index!"),
+ (XInterface *)pCppI );
+ }
+
+ // determine called method
+ OSL_ENSURE( nVtableCall < pTypeDescr->nMapFunctionIndexToMemberIndex, "### illegal vtable index!" );
+ sal_Int32 nMemberPos = pTypeDescr->pMapFunctionIndexToMemberIndex[nFunctionIndex];
+ OSL_ENSURE( nMemberPos < pTypeDescr->nAllMembers, "### illegal member index!" );
+
+ TypeDescription aMemberDescr( pTypeDescr->ppAllMembers[nMemberPos] );
+
+ typelib_TypeClass eRet;
+ switch (aMemberDescr.get()->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+ if (pTypeDescr->pMapMemberIndexToFunctionIndex[nMemberPos] == nFunctionIndex)
+ {
+ // is GET method
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef,
+ 0, 0, // no params
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ else
+ {
+ // is SET method
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)aMemberDescr.get())->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ 0, // indicates void return
+ 1, &aParam,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+ // is METHOD
+ switch (nFunctionIndex)
+ {
+ case 1: // acquire()
+ pCppI->acquireProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 2: // release()
+ pCppI->releaseProxy(); // non virtual call!
+ eRet = typelib_TypeClass_VOID;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( gpreg[2] )->getTypeLibType() );
+ if (pTD)
+ {
+ XInterface * pInterface = 0;
+ (*pCppI->getBridge()->getCppEnv()->getRegisteredInterface)(
+ pCppI->getBridge()->getCppEnv(),
+ (void **)&pInterface, pCppI->getOid().pData,
+ (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( gpreg[0] ),
+ &pInterface, pTD, cpp_acquire );
+ pInterface->release();
+ TYPELIB_DANGER_RELEASE( pTD );
+ *(void **)pRegisterReturn = gpreg[0];
+ eRet = typelib_TypeClass_ANY;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ eRet = cpp2uno_call(
+ pCppI, aMemberDescr.get(),
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)aMemberDescr.get())->pParams,
+ gpreg, fpreg, ovrflw, pRegisterReturn );
+ }
+ break;
+ }
+ default:
+ {
+ throw RuntimeException(
+ rtl::OUString::createFromAscii("no member description found!"),
+ (XInterface *)pCppI );
+ // is here for dummy
+ eRet = typelib_TypeClass_VOID;
+ }
+ }
+
+ return eRet;
+}
+
+long cpp_vtable_call(long r16, long r17, long r18, long r19, long r20, long r21, long firstonstack)
+{
+ register long r1 asm("$1");
+ sal_uInt64 nOffsetAndIndex = r1;
+
+ long sp = (long)&firstonstack;
+
+ sal_uInt64 gpreg[axp::MAX_GPR_REGS];
+ gpreg[0] = r16;
+ gpreg[1] = r17;
+ gpreg[2] = r18;
+ gpreg[3] = r19;
+ gpreg[4] = r20;
+ gpreg[5] = r21;
+
+ double fpreg[axp::MAX_SSE_REGS];
+ register double f16 asm("$f16"); fpreg[0] = f16;
+ register double f17 asm("$f17"); fpreg[1] = f17;
+ register double f18 asm("$f18"); fpreg[2] = f18;
+ register double f19 asm("$f19"); fpreg[3] = f19;
+ register double f20 asm("$f20"); fpreg[4] = f20;
+ register double f21 asm("$f21"); fpreg[5] = f21;
+
+ volatile long nRegReturn[1];
+#ifdef CMC_DEBUG
+ fprintf(stderr, "before mediate with %lx\n",nOffsetAndIndex);
+ fprintf(stderr, "non-doubles are %x %x %x %x %x %x\n", gpreg[0], gpreg[1], gpreg[2], gpreg[3], gpreg[4], gpreg[5]);
+ fprintf(stderr, "doubles are %f %f %f %f %f %f\n", fpreg[0], fpreg[1], fpreg[2], fpreg[3], fpreg[4], fpreg[5]);
+#endif
+ typelib_TypeClass aType =
+ cpp_mediate( nOffsetAndIndex, (void**)gpreg, (void**)fpreg, (void**)sp,
+ (sal_Int64*)nRegReturn );
+#ifdef CMC_DEBUG
+ fprintf(stderr, "after mediate ret is %lx %ld\n", nRegReturn[0], nRegReturn[0]);
+#endif
+
+ switch( aType )
+ {
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ nRegReturn[0] = (unsigned long)(*(unsigned char *)nRegReturn);
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ case typelib_TypeClass_SHORT:
+ nRegReturn[0] = (unsigned long)(*(unsigned short *)nRegReturn);
+ break;
+ case typelib_TypeClass_ENUM:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_LONG:
+ nRegReturn[0] = (unsigned long)(*(unsigned int *)nRegReturn);
+ break;
+ case typelib_TypeClass_VOID:
+ default:
+ break;
+ case typelib_TypeClass_FLOAT:
+ {
+ double tmp = (double) (*((float *)nRegReturn));
+ (*((double *) nRegReturn)) = tmp;
+ }
+ //deliberate fall through
+ case typelib_TypeClass_DOUBLE:
+ __asm__ ( "ldt $f0,%0\n\t"
+ : : "m" (*((double*)nRegReturn)) : "$f0");
+ break;
+ }
+ return nRegReturn[0];
+}
+
+const int codeSnippetSize = 32;
+
+unsigned char *codeSnippet( unsigned char * code, sal_Int32 nFunctionIndex, sal_Int32 nVtableOffset, bool simple_ret_type )
+{
+ if (! simple_ret_type)
+ nFunctionIndex |= 0x80000000;
+
+ unsigned char * p = code;
+ *(unsigned int*)&p[0] = 0x47fb0401; /* mov $27,$1 */
+ *(unsigned int*)&p[4] = 0xa43b0010; /* ldq $1,16($27) */
+ *(unsigned int*)&p[8] = 0xa77b0018; /* ldq $27,24($27) */
+ *(unsigned int*)&p[12] = 0x6bfb0000; /* jmp $31,($27),0 */
+ *(unsigned int*)&p[16] = nFunctionIndex;
+ *(unsigned int*)&p[20] = nVtableOffset;
+ *(unsigned long*)&p[24] = (unsigned long)cpp_vtable_call;
+ return (code + codeSnippetSize);
+}
+}
+
+void bridges::cpp_uno::shared::VtableFactory::flushCode(unsigned char const *, unsigned char const *)
+{
+ //http://www.gnu.org/software/lightning/manual/html_node/Standard-functions.html
+ __asm__ __volatile__("call_pal 0x86");
+}
+
+struct bridges::cpp_uno::shared::VtableFactory::Slot { void * fn; };
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::mapBlockToVtable(void * block)
+{
+ return static_cast< Slot * >(block) + 2;
+}
+
+sal_Size bridges::cpp_uno::shared::VtableFactory::getBlockSize(
+ sal_Int32 slotCount)
+{
+ return (slotCount + 2) * sizeof (Slot) + slotCount * codeSnippetSize;
+}
+
+bridges::cpp_uno::shared::VtableFactory::Slot *
+bridges::cpp_uno::shared::VtableFactory::initializeBlock(
+ void * block, sal_Int32 slotCount)
+{
+ Slot * slots = mapBlockToVtable(block);
+ slots[-2].fn = 0;
+ slots[-1].fn = 0;
+ return slots + slotCount;
+}
+
+unsigned char * bridges::cpp_uno::shared::VtableFactory::addLocalFunctions(
+ Slot ** slots, unsigned char * code, sal_PtrDiff writetoexecdiff,
+ typelib_InterfaceTypeDescription const * type, sal_Int32 functionOffset,
+ sal_Int32 functionCount, sal_Int32 vtableOffset)
+{
+ (*slots) -= functionCount;
+ Slot * s = *slots;
+#ifdef CMC_DEBUG
+ fprintf(stderr, "in addLocalFunctions functionOffset is %x\n",functionOffset);
+ fprintf(stderr, "in addLocalFunctions vtableOffset is %x\n",vtableOffset);
+#endif
+
+ for (sal_Int32 i = 0; i < type->nMembers; ++i) {
+ typelib_TypeDescription * member = 0;
+ TYPELIB_DANGER_GET(&member, type->ppMembers[i]);
+ OSL_ASSERT(member != 0);
+ switch (member->eTypeClass) {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ // Getter:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->pAttributeTypeRef));
+
+ // Setter:
+ if (!reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription * >(
+ member)->bReadOnly)
+ {
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(code, functionOffset++, vtableOffset, true);
+ }
+ break;
+
+ case typelib_TypeClass_INTERFACE_METHOD:
+ (s++)->fn = code + writetoexecdiff;
+ code = codeSnippet(
+ code, functionOffset++, vtableOffset,
+ bridges::cpp_uno::shared::isSimpleType(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription * >(
+ member)->pReturnTypeRef));
+ break;
+
+ default:
+ OSL_ASSERT(false);
+ break;
+ }
+ TYPELIB_DANGER_RELEASE(member);
+ }
+ return code;
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_alpha/except.cxx b/bridges/source/cpp_uno/gcc3_linux_alpha/except.cxx
new file mode 100644
index 000000000000..3e666a11cdd0
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_alpha/except.cxx
@@ -0,0 +1,287 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <stdio.h>
+#include <string.h>
+#include <dlfcn.h>
+#include <cxxabi.h>
+#include <hash_map>
+
+#include <rtl/strbuf.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <osl/diagnose.h>
+#include <osl/mutex.hxx>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <typelib/typedescription.hxx>
+#include <uno/any2.h>
+
+#include "share.hxx"
+
+
+using namespace ::std;
+using namespace ::osl;
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+using namespace ::__cxxabiv1;
+
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+void dummy_can_throw_anything( char const * )
+{
+}
+
+//==================================================================================================
+static OUString toUNOname( char const * p ) SAL_THROW( () )
+{
+#if OSL_DEBUG_LEVEL > 1
+ char const * start = p;
+#endif
+
+ // example: N3com3sun4star4lang24IllegalArgumentExceptionE
+
+ OUStringBuffer buf( 64 );
+ OSL_ASSERT( 'N' == *p );
+ ++p; // skip N
+
+ while ('E' != *p)
+ {
+ // read chars count
+ long n = (*p++ - '0');
+ while ('0' <= *p && '9' >= *p)
+ {
+ n *= 10;
+ n += (*p++ - '0');
+ }
+ buf.appendAscii( p, n );
+ p += n;
+ if ('E' != *p)
+ buf.append( (sal_Unicode)'.' );
+ }
+
+#if OSL_DEBUG_LEVEL > 1
+ OUString ret( buf.makeStringAndClear() );
+ OString c_ret( OUStringToOString( ret, RTL_TEXTENCODING_ASCII_US ) );
+ fprintf( stderr, "> toUNOname(): %s => %s\n", start, c_ret.getStr() );
+ return ret;
+#else
+ return buf.makeStringAndClear();
+#endif
+}
+
+//==================================================================================================
+class RTTI
+{
+ typedef hash_map< OUString, type_info *, OUStringHash > t_rtti_map;
+
+ Mutex m_mutex;
+ t_rtti_map m_rttis;
+ t_rtti_map m_generatedRttis;
+
+ void * m_hApp;
+
+public:
+ RTTI() SAL_THROW( () );
+ ~RTTI() SAL_THROW( () );
+
+ type_info * getRTTI( typelib_CompoundTypeDescription * ) SAL_THROW( () );
+};
+//__________________________________________________________________________________________________
+RTTI::RTTI() SAL_THROW( () )
+ : m_hApp( dlopen( 0, RTLD_LAZY ) )
+{
+}
+//__________________________________________________________________________________________________
+RTTI::~RTTI() SAL_THROW( () )
+{
+ dlclose( m_hApp );
+}
+
+//__________________________________________________________________________________________________
+type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) SAL_THROW( () )
+{
+ type_info * rtti;
+
+ OUString const & unoName = *(OUString const *)&pTypeDescr->aBase.pTypeName;
+
+ MutexGuard guard( m_mutex );
+ t_rtti_map::const_iterator iRttiFind( m_rttis.find( unoName ) );
+ if (iRttiFind == m_rttis.end())
+ {
+ // RTTI symbol
+ OStringBuffer buf( 64 );
+ buf.append( RTL_CONSTASCII_STRINGPARAM("_ZTIN") );
+ sal_Int32 index = 0;
+ do
+ {
+ OUString token( unoName.getToken( 0, '.', index ) );
+ buf.append( token.getLength() );
+ OString c_token( OUStringToOString( token, RTL_TEXTENCODING_ASCII_US ) );
+ buf.append( c_token );
+ }
+ while (index >= 0);
+ buf.append( 'E' );
+
+ OString symName( buf.makeStringAndClear() );
+ rtti = (type_info *)dlsym( m_hApp, symName.getStr() );
+
+ if (rtti)
+ {
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_rttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new rtti failed?!" );
+ }
+ else
+ {
+ // try to lookup the symbol in the generated rtti map
+ t_rtti_map::const_iterator iFind( m_generatedRttis.find( unoName ) );
+ if (iFind == m_generatedRttis.end())
+ {
+ // we must generate it !
+ // symbol and rtti-name is nearly identical,
+ // the symbol is prefixed with _ZTI
+ char const * rttiName = symName.getStr() +4;
+#if OSL_DEBUG_LEVEL > 1
+ fprintf( stderr,"generated rtti for %s\n", rttiName );
+#endif
+ if (pTypeDescr->pBaseTypeDescription)
+ {
+ // ensure availability of base
+ type_info * base_rtti = getRTTI(
+ (typelib_CompoundTypeDescription *)pTypeDescr->pBaseTypeDescription );
+ rtti = new __si_class_type_info(
+ strdup( rttiName ), (__class_type_info *)base_rtti );
+ }
+ else
+ {
+ // this class has no base class
+ rtti = new __class_type_info( strdup( rttiName ) );
+ }
+
+ pair< t_rtti_map::iterator, bool > insertion(
+ m_generatedRttis.insert( t_rtti_map::value_type( unoName, rtti ) ) );
+ OSL_ENSURE( insertion.second, "### inserting new generated rtti failed?!" );
+ }
+ else // taking already generated rtti
+ {
+ rtti = iFind->second;
+ }
+ }
+ }
+ else
+ {
+ rtti = iRttiFind->second;
+ }
+
+ return rtti;
+}
+
+//--------------------------------------------------------------------------------------------------
+static void deleteException( void * pExc )
+{
+ __cxa_exception const * header = ((__cxa_exception const *)pExc - 1);
+ typelib_TypeDescription * pTD = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pTD, unoName.pData );
+ OSL_ENSURE( pTD, "### unknown exception type! leaving out destruction => leaking!!!" );
+ if (pTD)
+ {
+ ::uno_destructData( pExc, pTD, cpp_release );
+ ::typelib_typedescription_release( pTD );
+ }
+}
+
+//==================================================================================================
+void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp )
+{
+ void * pCppExc;
+ type_info * rtti;
+
+ {
+ // construct cpp exception object
+ typelib_TypeDescription * pTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pTypeDescr, pUnoExc->pType );
+ OSL_ASSERT( pTypeDescr );
+ if (! pTypeDescr)
+ terminate();
+
+ pCppExc = __cxa_allocate_exception( pTypeDescr->nSize );
+ ::uno_copyAndConvertData( pCppExc, pUnoExc->pData, pTypeDescr, pUno2Cpp );
+
+ // destruct uno exception
+ ::uno_any_destruct( pUnoExc, 0 );
+ // avoiding locked counts
+ static RTTI * s_rtti = 0;
+ if (! s_rtti)
+ {
+ MutexGuard guard( Mutex::getGlobalMutex() );
+ if (! s_rtti)
+ {
+#ifdef LEAK_STATIC_DATA
+ s_rtti = new RTTI();
+#else
+ static RTTI rtti_data;
+ s_rtti = &rtti_data;
+#endif
+ }
+ }
+ rtti = (type_info *)s_rtti->getRTTI( (typelib_CompoundTypeDescription *) pTypeDescr );
+ TYPELIB_DANGER_RELEASE( pTypeDescr );
+ OSL_ENSURE( rtti, "### no rtti for throwing exception!" );
+ if (! rtti)
+ terminate();
+ }
+
+ __cxa_throw( pCppExc, rtti, deleteException );
+}
+
+//==================================================================================================
+void fillUnoException( __cxa_exception * header, uno_Any * pExc, uno_Mapping * pCpp2Uno )
+{
+ OSL_ENSURE( header, "### no exception header!!!" );
+ if (! header)
+ terminate();
+
+ typelib_TypeDescription * pExcTypeDescr = 0;
+ OUString unoName( toUNOname( header->exceptionType->name() ) );
+ ::typelib_typedescription_getByName( &pExcTypeDescr, unoName.pData );
+ OSL_ENSURE( pExcTypeDescr, "### can not get type description for exception!!!" );
+ if (! pExcTypeDescr)
+ terminate();
+
+ // construct uno exception any
+ ::uno_any_constructAndConvert( pExc, header->adjustedPtr, pExcTypeDescr, pCpp2Uno );
+ ::typelib_typedescription_release( pExcTypeDescr );
+}
+
+}
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/fondu/makefile.mk b/bridges/source/cpp_uno/gcc3_linux_alpha/makefile.mk
index b684461e0e34..2650c4376933 100644
--- a/fondu/makefile.mk
+++ b/bridges/source/cpp_uno/gcc3_linux_alpha/makefile.mk
@@ -25,45 +25,53 @@
#
#*************************************************************************
-PRJ=.
+PRJ=..$/..$/..
-PRJNAME=fondu
-TARGET=fondu
+PRJNAME=bridges
+TARGET=gcc3_uno
+LIBTARGET=no
+ENABLE_EXCEPTIONS=TRUE
# --- Settings -----------------------------------------------------
-.INCLUDE : settings.mk
+.INCLUDE : settings.mk
# --- Files --------------------------------------------------------
-TARFILE_NAME=fondu_src-051010
+.IF "$(COM)$(OS)$(CPU)" == "GCCLINUXL"
-.IF "$(OS)"!="MACOSX" || "$(GUIBASE)"=="aqua"
-dummy:
- @echo "Nothing to build for OS $(OS)"
-.ENDIF # "$(OS)"!="MACOSX" || "$(GUIBASE)"=="aqua"
+.IF "$(cppu_no_leak)" == ""
+CFLAGS += -DLEAK_STATIC_DATA
+.ENDIF
-CONFIGURE_DIR=.
+# In case someone enabled the non-standard -fomit-frame-pointer which does not
+# work with the .cxx sources in this directory:
+CFLAGSCXX += -fno-omit-frame-pointer
-#relative to CONFIGURE_DIR
-CONFIGURE_ACTION=configure
+CFLAGSNOOPT=-O0
-CONFIGURE_FLAGS=
+SLOFILES= \
+ $(SLO)$/except.obj \
+ $(SLO)$/cpp2uno.obj \
+ $(SLO)$/uno2cpp.obj
-BUILD_DIR=$(CONFIGURE_DIR)
+SHL1TARGET= $(TARGET)
-BUILD_ACTION=$(GNUMAKE) fondu
+SHL1DEF=$(MISC)$/$(SHL1TARGET).def
+SHL1IMPLIB=i$(TARGET)
+SHL1VERSIONMAP=..$/..$/bridge_exports.map
+SHL1RPATH=URELIB
-OUT2BIN=$(BUILD_DIR)$/fondu
+SHL1OBJS = $(SLOFILES)
+SHL1LIBS = $(SLB)$/cpp_uno_shared.lib
-# --- Targets ------------------------------------------------------
-
-# contains some necessary variables.
+SHL1STDLIBS= \
+ $(CPPULIB) \
+ $(SALLIB)
-.INCLUDE : set_ext.mk
+.ENDIF
-.INCLUDE : target.mk
+# --- Targets ------------------------------------------------------
-# contains the "magic" to create targets out of the set variables.
+.INCLUDE : target.mk
-.INCLUDE : tg_ext.mk
diff --git a/bridges/source/cpp_uno/gcc3_linux_alpha/share.hxx b/bridges/source/cpp_uno/gcc3_linux_alpha/share.hxx
new file mode 100644
index 000000000000..c2f0189a2065
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_alpha/share.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.
+ *
+ ************************************************************************/
+
+#include "uno/mapping.h"
+
+#include <typeinfo>
+#include <exception>
+#include <cstddef>
+
+namespace CPPU_CURRENT_NAMESPACE
+{
+
+ void dummy_can_throw_anything( char const * );
+
+
+// ----- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h
+
+struct _Unwind_Exception
+{
+ unsigned exception_class __attribute__((__mode__(__DI__)));
+ void * exception_cleanup;
+ unsigned private_1 __attribute__((__mode__(__word__)));
+ unsigned private_2 __attribute__((__mode__(__word__)));
+} __attribute__((__aligned__));
+
+struct __cxa_exception
+{
+ ::std::type_info *exceptionType;
+ void (*exceptionDestructor)(void *);
+
+ ::std::unexpected_handler unexpectedHandler;
+ ::std::terminate_handler terminateHandler;
+
+ __cxa_exception *nextException;
+
+ int handlerCount;
+
+ int handlerSwitchValue;
+ const unsigned char *actionRecord;
+ const unsigned char *languageSpecificData;
+ void *catchTemp;
+ void *adjustedPtr;
+
+ _Unwind_Exception unwindHeader;
+};
+
+extern "C" void *__cxa_allocate_exception(
+ std::size_t thrown_size ) throw();
+extern "C" void __cxa_throw (
+ void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) ) __attribute__((noreturn));
+
+struct __cxa_eh_globals
+{
+ __cxa_exception *caughtExceptions;
+ unsigned int uncaughtExceptions;
+};
+extern "C" __cxa_eh_globals *__cxa_get_globals () throw();
+
+// -----
+
+//==================================================================================================
+void raiseException(
+ uno_Any * pUnoExc, uno_Mapping * pUno2Cpp );
+//==================================================================================================
+void fillUnoException(
+ __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno );
+}
+
+namespace axp
+{
+ enum axplimits { MAX_WORDS_IN_REGS = 6, MAX_GPR_REGS = 6, MAX_SSE_REGS = 6 };
+}
+
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_alpha/uno2cpp.cxx b/bridges/source/cpp_uno/gcc3_linux_alpha/uno2cpp.cxx
new file mode 100644
index 000000000000..7f51d425806c
--- /dev/null
+++ b/bridges/source/cpp_uno/gcc3_linux_alpha/uno2cpp.cxx
@@ -0,0 +1,532 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+// MARKER(update_precomp.py): autogen include statement, do not remove
+#include "precompiled_bridges.hxx"
+
+#include <malloc.h>
+
+#include <com/sun/star/uno/genfunc.hxx>
+#include <uno/data.h>
+
+#include "bridges/cpp_uno/shared/bridge.hxx"
+#include "bridges/cpp_uno/shared/types.hxx"
+#include "bridges/cpp_uno/shared/unointerfaceproxy.hxx"
+#include "bridges/cpp_uno/shared/vtables.hxx"
+
+#include "share.hxx"
+
+#include <stdio.h>
+#include <string.h>
+
+
+using namespace ::rtl;
+using namespace ::com::sun::star::uno;
+
+void MapReturn(long r0, typelib_TypeClass eTypeClass, sal_uInt64* pRegisterReturn)
+{
+ register float fret asm("$f0");
+ register double dret asm("$f0");
+
+#ifdef CMC_DEBUG
+ fprintf(stderr,"Mapping Return with %lx %ld %f\n", r0, r0, dret);
+#endif
+ switch (eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ *pRegisterReturn = r0;
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ *(unsigned int*)pRegisterReturn = (unsigned int)r0;
+ break;
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ *(unsigned short*)pRegisterReturn = (unsigned short)r0;
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ *(unsigned char*)pRegisterReturn = (unsigned char)r0;
+ break;
+ case typelib_TypeClass_FLOAT:
+ *reinterpret_cast<float *>( pRegisterReturn ) = fret;
+ break;
+ case typelib_TypeClass_DOUBLE:
+ *reinterpret_cast<double *>( pRegisterReturn ) = dret;
+ break;
+ default:
+ break;
+ }
+#ifdef CMC_DEBUG
+ fprintf(stderr, "end of MapReturn with %x\n", pRegisterReturn ? *pRegisterReturn : 0);
+#endif
+}
+
+#define INSERT_FLOAT( pSV, nr, pFPR, pDS ) \
+ { \
+ if ( nr < axp::MAX_WORDS_IN_REGS ) \
+ { \
+ pFPR[nr++] = *reinterpret_cast<float *>( pSV ); \
+ } \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV ); \
+ }
+
+#define INSERT_DOUBLE( pSV, nr, pFPR, pDS ) \
+ if ( nr < axp::MAX_WORDS_IN_REGS ) \
+ pFPR[nr++] = *reinterpret_cast<double *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV ); // verbatim!
+
+#define INSERT_INT64( pSV, nr, pGPR, pDS ) \
+ if ( nr < axp::MAX_WORDS_IN_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt64 *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt64 *>( pSV );
+
+#define INSERT_INT32( pSV, nr, pGPR, pDS ) \
+ if ( nr < axp::MAX_WORDS_IN_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt32 *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt32 *>( pSV );
+
+#define INSERT_INT16( pSV, nr, pGPR, pDS ) \
+ if ( nr < axp::MAX_WORDS_IN_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt16 *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt16 *>( pSV );
+
+#define INSERT_INT8( pSV, nr, pGPR, pDS ) \
+ if ( nr < axp::MAX_WORDS_IN_REGS ) \
+ pGPR[nr++] = *reinterpret_cast<sal_uInt8 *>( pSV ); \
+ else \
+ *pDS++ = *reinterpret_cast<sal_uInt8 *>( pSV );
+
+namespace
+{
+//==================================================================================================
+void callVirtualMethod(
+ void * pThis, sal_Int32 nVtableIndex,
+ void * pRegisterReturn, typelib_TypeDescription * pReturnTypeDescr,
+ sal_uInt64 *pStack, sal_uInt32 nStack,
+ sal_uInt64 *pGPR, sal_uInt32 nGPR,
+ double *pFPR, sal_uInt32 nFPR)
+{
+ // Should not happen, but...
+ if ( nFPR > axp::MAX_SSE_REGS )
+ nFPR = axp::MAX_SSE_REGS;
+ if ( nGPR > axp::MAX_GPR_REGS )
+ nGPR = axp::MAX_GPR_REGS;
+
+#ifdef CMC_DEBUG
+ // Let's figure out what is really going on here
+ {
+ fprintf( stderr, "= nStack is %d\n", nStack );
+ fprintf( stderr, "= callVirtualMethod() =\nGPR's (%d): ", nGPR );
+ for ( unsigned int i = 0; i < nGPR; ++i )
+ fprintf( stderr, "0x%lx, ", pGPR[i] );
+ fprintf( stderr, "\nFPR's (%d): ", nFPR );
+ for ( unsigned int i = 0; i < nFPR; ++i )
+ fprintf( stderr, "0x%lx (%f), ", pFPR[i], pFPR[i] );
+ fprintf( stderr, "\nStack (%d): ", nStack );
+ for ( unsigned int i = 0; i < nStack; ++i )
+ fprintf( stderr, "0x%lx, ", pStack[i] );
+ fprintf( stderr, "\n" );
+ fprintf( stderr, "pRegisterReturn is %p\n", pRegisterReturn);
+ }
+#endif
+
+ // Load parameters to stack, if necessary
+ // Stack, if used, must be 8-bytes aligned
+ sal_uInt64 *stack = (sal_uInt64 *) __builtin_alloca( nStack * 8 );
+ memcpy( stack, pStack, nStack * 8 );
+
+ // To get pointer to method
+ // a) get the address of the vtable
+ sal_uInt64 pMethod = *((sal_uInt64 *)pThis);
+ // b) get the address from the vtable entry at offset
+ pMethod += 8 * nVtableIndex;
+ pMethod = *((sal_uInt64 *)pMethod);
+
+ typedef void (* FunctionCall )( sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64, sal_uInt64 );
+ FunctionCall pFunc = (FunctionCall)pMethod;
+
+ switch (nFPR) //deliberate fall through
+ {
+ case 6:
+ asm volatile("ldt $f16,%0" :: "m"(pFPR[5]) : "$f16");
+ case 5:
+ asm volatile("ldt $f17,%0" :: "m"(pFPR[4]) : "$f17");
+ case 4:
+ asm volatile("ldt $f18,%0" :: "m"(pFPR[3]) : "$f18");
+ case 3:
+ asm volatile("ldt $f19,%0" :: "m"(pFPR[2]) : "$f19");
+ case 2:
+ asm volatile("ldt $f20,%0" :: "m"(pFPR[1]) : "$f20");
+ case 1:
+ asm volatile("ldt $f21,%0" :: "m"(pFPR[0]) : "$f21");
+ default:
+ break;
+ }
+
+ (*pFunc)(pGPR[0], pGPR[1], pGPR[2], pGPR[3], pGPR[4], pGPR[5]);
+ register sal_uInt64 r0 __asm__("$0");
+ MapReturn(r0, pReturnTypeDescr->eTypeClass, (sal_uInt64*)pRegisterReturn);
+}
+
+
+//============================================================================
+static void cpp_call(
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis,
+ bridges::cpp_uno::shared::VtableSlot aVtableSlot,
+ typelib_TypeDescriptionReference * pReturnTypeRef,
+ sal_Int32 nParams, typelib_MethodParameter * pParams,
+ void * pUnoReturn, void * pUnoArgs[], uno_Any ** ppUnoExc )
+{
+ // max space for: [complex ret ptr], values|ptr ...
+ sal_uInt64 * pStack = (sal_uInt64 *)alloca( (nParams+3) * sizeof(sal_Int64) );
+ sal_uInt64 * pStackStart = pStack;
+
+ sal_uInt64 pGPR[axp::MAX_GPR_REGS];
+ double pFPR[axp::MAX_SSE_REGS];
+ sal_uInt32 nRegs = 0;
+
+ // return
+ typelib_TypeDescription * pReturnTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pReturnTypeDescr, pReturnTypeRef );
+ OSL_ENSURE( pReturnTypeDescr, "### expected return type description!" );
+
+ void * pCppReturn = 0; // if != 0 && != pUnoReturn, needs reconversion
+
+ if (pReturnTypeDescr)
+ {
+ if (bridges::cpp_uno::shared::isSimpleType( pReturnTypeDescr ))
+ {
+ pCppReturn = pUnoReturn; // direct way for simple types
+ }
+ else
+ {
+ // complex return via ptr
+ pCppReturn = (bridges::cpp_uno::shared::relatesToInterfaceType( pReturnTypeDescr )
+ ? alloca( pReturnTypeDescr->nSize )
+ : pUnoReturn); // direct way
+ INSERT_INT64( &pCppReturn, nRegs, pGPR, pStack );
+ }
+ }
+ // push "this" pointer
+ void * pAdjustedThisPtr = reinterpret_cast< void ** >( pThis->getCppI() ) + aVtableSlot.offset;
+
+ INSERT_INT64( &pAdjustedThisPtr, nRegs, pGPR, pStack );
+
+ // stack space
+ OSL_ENSURE( sizeof(void *) == sizeof(sal_Int64), "### unexpected size!" );
+ // args
+ void ** pCppArgs = (void **)alloca( 3 * sizeof(void *) * nParams );
+ // indizes of values this have to be converted (interface conversion cpp<=>uno)
+ sal_Int32 * pTempIndizes = (sal_Int32 *)(pCppArgs + nParams);
+ // type descriptions for reconversions
+ typelib_TypeDescription ** ppTempParamTypeDescr = (typelib_TypeDescription **)(pCppArgs + (2 * nParams));
+
+ sal_Int32 nTempIndizes = 0;
+
+ for ( sal_Int32 nPos = 0; nPos < nParams; ++nPos )
+ {
+ const typelib_MethodParameter & rParam = pParams[nPos];
+ typelib_TypeDescription * pParamTypeDescr = 0;
+ TYPELIB_DANGER_GET( &pParamTypeDescr, rParam.pTypeRef );
+
+ if (!rParam.bOut && bridges::cpp_uno::shared::isSimpleType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData( pCppArgs[nPos] = alloca( 8 ), pUnoArgs[nPos], pParamTypeDescr,
+ pThis->getBridge()->getUno2Cpp() );
+
+ switch (pParamTypeDescr->eTypeClass)
+ {
+ case typelib_TypeClass_HYPER:
+ case typelib_TypeClass_UNSIGNED_HYPER:
+ INSERT_INT64( pCppArgs[nPos], nRegs, pGPR, pStack );
+ break;
+ case typelib_TypeClass_LONG:
+ case typelib_TypeClass_UNSIGNED_LONG:
+ case typelib_TypeClass_ENUM:
+ INSERT_INT32( pCppArgs[nPos], nRegs, pGPR, pStack );
+ break;
+ case typelib_TypeClass_SHORT:
+ case typelib_TypeClass_CHAR:
+ case typelib_TypeClass_UNSIGNED_SHORT:
+ INSERT_INT16( pCppArgs[nPos], nRegs, pGPR, pStack );
+ break;
+ case typelib_TypeClass_BOOLEAN:
+ case typelib_TypeClass_BYTE:
+ INSERT_INT8( pCppArgs[nPos], nRegs, pGPR, pStack );
+ break;
+ case typelib_TypeClass_FLOAT:
+ INSERT_FLOAT( pCppArgs[nPos], nRegs, pFPR, pStack );
+ break;
+ case typelib_TypeClass_DOUBLE:
+ INSERT_DOUBLE( pCppArgs[nPos], nRegs, pFPR, pStack );
+ break;
+ default:
+ break;
+ }
+
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ else // ptr to complex value | ref
+ {
+ if (! rParam.bIn) // is pure out
+ {
+ // cpp out is constructed mem, uno out is not!
+ uno_constructData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pParamTypeDescr );
+ pTempIndizes[nTempIndizes] = nPos; // default constructed for cpp call
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ // is in/inout
+ else if (bridges::cpp_uno::shared::relatesToInterfaceType( pParamTypeDescr ))
+ {
+ uno_copyAndConvertData(
+ pCppArgs[nPos] = alloca( pParamTypeDescr->nSize ),
+ pUnoArgs[nPos], pParamTypeDescr, pThis->getBridge()->getUno2Cpp() );
+
+ pTempIndizes[nTempIndizes] = nPos; // has to be reconverted
+ // will be released at reconversion
+ ppTempParamTypeDescr[nTempIndizes++] = pParamTypeDescr;
+ }
+ else // direct way
+ {
+ pCppArgs[nPos] = pUnoArgs[nPos];
+ // no longer needed
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ INSERT_INT64( &(pCppArgs[nPos]), nRegs, pGPR, pStack );
+ }
+ }
+
+ try
+ {
+ callVirtualMethod(
+ pAdjustedThisPtr, aVtableSlot.index,
+ pCppReturn, pReturnTypeDescr,
+ pStackStart, (pStack - pStackStart),
+ pGPR, nRegs,
+ pFPR, nRegs );
+ // NO exception occured...
+ *ppUnoExc = 0;
+
+ // reconvert temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ typelib_TypeDescription * pParamTypeDescr = ppTempParamTypeDescr[nTempIndizes];
+
+ if (pParams[nIndex].bIn)
+ {
+ if (pParams[nIndex].bOut) // inout
+ {
+ uno_destructData( pUnoArgs[nIndex], pParamTypeDescr, 0 ); // destroy uno value
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ }
+ else // pure out
+ {
+ uno_copyAndConvertData( pUnoArgs[nIndex], pCppArgs[nIndex], pParamTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ }
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], pParamTypeDescr, cpp_release );
+
+ TYPELIB_DANGER_RELEASE( pParamTypeDescr );
+ }
+ // return value
+ if (pCppReturn && pUnoReturn != pCppReturn)
+ {
+ uno_copyAndConvertData( pUnoReturn, pCppReturn, pReturnTypeDescr,
+ pThis->getBridge()->getCpp2Uno() );
+ uno_destructData( pCppReturn, pReturnTypeDescr, cpp_release );
+ }
+ }
+ catch (...)
+ {
+ // fill uno exception
+ fillUnoException( CPPU_CURRENT_NAMESPACE::__cxa_get_globals()->caughtExceptions,
+ *ppUnoExc, pThis->getBridge()->getCpp2Uno() );
+
+
+ // temporary params
+ for ( ; nTempIndizes--; )
+ {
+ sal_Int32 nIndex = pTempIndizes[nTempIndizes];
+ // destroy temp cpp param => cpp: every param was constructed
+ uno_destructData( pCppArgs[nIndex], ppTempParamTypeDescr[nTempIndizes], cpp_release );
+ TYPELIB_DANGER_RELEASE( ppTempParamTypeDescr[nTempIndizes] );
+ }
+ // return type
+ if (pReturnTypeDescr)
+ TYPELIB_DANGER_RELEASE( pReturnTypeDescr );
+ }
+}
+}
+
+namespace bridges { namespace cpp_uno { namespace shared {
+
+void unoInterfaceProxyDispatch(
+ uno_Interface * pUnoI, const typelib_TypeDescription * pMemberDescr,
+ void * pReturn, void * pArgs[], uno_Any ** ppException )
+{
+#ifdef CMC_DEBUG
+ fprintf(stderr, "unoInterfaceProxyDispatch\n");
+#endif
+
+
+ // is my surrogate
+ bridges::cpp_uno::shared::UnoInterfaceProxy * pThis
+ = static_cast< bridges::cpp_uno::shared::UnoInterfaceProxy *> (pUnoI);
+
+ switch (pMemberDescr->eTypeClass)
+ {
+ case typelib_TypeClass_INTERFACE_ATTRIBUTE:
+ {
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceAttributeTypeDescription const * >(
+ pMemberDescr)));
+
+ if (pReturn)
+ {
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef,
+ 0, 0, // no params
+ pReturn, pArgs, ppException );
+ }
+ else
+ {
+ // is SET
+ typelib_MethodParameter aParam;
+ aParam.pTypeRef =
+ ((typelib_InterfaceAttributeTypeDescription *)pMemberDescr)->pAttributeTypeRef;
+ aParam.bIn = sal_True;
+ aParam.bOut = sal_False;
+
+ typelib_TypeDescriptionReference * pReturnTypeRef = 0;
+ OUString aVoidName( RTL_CONSTASCII_USTRINGPARAM("void") );
+ typelib_typedescriptionreference_new(
+ &pReturnTypeRef, typelib_TypeClass_VOID, aVoidName.pData );
+
+ // dependent dispatch
+ aVtableSlot.index += 1; //get then set method
+ cpp_call(
+ pThis, aVtableSlot,
+ pReturnTypeRef,
+ 1, &aParam,
+ pReturn, pArgs, ppException );
+
+ typelib_typedescriptionreference_release( pReturnTypeRef );
+ }
+
+ break;
+ }
+ case typelib_TypeClass_INTERFACE_METHOD:
+ {
+
+ VtableSlot aVtableSlot(
+ getVtableSlot(
+ reinterpret_cast<
+ typelib_InterfaceMethodTypeDescription const * >(
+ pMemberDescr)));
+ switch (aVtableSlot.index)
+ {
+ // standard calls
+ case 1: // acquire uno interface
+ (*pUnoI->acquire)( pUnoI );
+ *ppException = 0;
+ break;
+ case 2: // release uno interface
+ (*pUnoI->release)( pUnoI );
+ *ppException = 0;
+ break;
+ case 0: // queryInterface() opt
+ {
+ typelib_TypeDescription * pTD = 0;
+ TYPELIB_DANGER_GET( &pTD, reinterpret_cast< Type * >( pArgs[0] )->getTypeLibType() );
+ if (pTD)
+ {
+ uno_Interface * pInterface = 0;
+ (*pThis->pBridge->getUnoEnv()->getRegisteredInterface)(
+ pThis->pBridge->getUnoEnv(),
+ (void **)&pInterface, pThis->oid.pData, (typelib_InterfaceTypeDescription *)pTD );
+
+ if (pInterface)
+ {
+ ::uno_any_construct(
+ reinterpret_cast< uno_Any * >( pReturn ),
+ &pInterface, pTD, 0 );
+ (*pInterface->release)( pInterface );
+ TYPELIB_DANGER_RELEASE( pTD );
+ *ppException = 0;
+ break;
+ }
+ TYPELIB_DANGER_RELEASE( pTD );
+ }
+ } // else perform queryInterface()
+ default:
+ // dependent dispatch
+ cpp_call(
+ pThis, aVtableSlot,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pReturnTypeRef,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->nParams,
+ ((typelib_InterfaceMethodTypeDescription *)pMemberDescr)->pParams,
+ pReturn, pArgs, ppException );
+ }
+ break;
+ }
+ default:
+ {
+ ::com::sun::star::uno::RuntimeException aExc(
+ OUString( RTL_CONSTASCII_USTRINGPARAM("illegal member type description!") ),
+ ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >() );
+
+ Type const & rExcType = ::getCppuType( &aExc );
+ // binary identical null reference
+ ::uno_type_any_construct( *ppException, &aExc, rExcType.getTypeLibType(), 0 );
+ }
+ }
+}
+
+} } }
+/* vi:set tabstop=4 shiftwidth=4 expandtab: */
diff --git a/bridges/source/cpp_uno/gcc3_linux_hppa/cpp2uno.cxx b/bridges/source/cpp_uno/gcc3_linux_hppa/cpp2uno.cxx
index 8b37b633f59e..959452b4d985 100644
--- a/bridges/source/cpp_uno/gcc3_linux_hppa/cpp2uno.cxx
+++ b/bridges/source/cpp_uno/gcc3_linux_hppa/cpp2uno.cxx
@@ -61,7 +61,7 @@ namespace
long r8, void ** gpreg, double *fpreg, void ** ovrflw,
sal_Int64 * pRegisterReturn /* space for register return */ )
{
- void ** startovrflw;
+ void ** startovrflw = ovrflw;
int nregs = 0; //number of words passed in registers
#ifdef CMC_DEBUG
@@ -143,7 +143,7 @@ namespace
}
else
{
- if ((startovrflw-ovrflw) & 4)
+ if ((startovrflw-ovrflw) & 1)
ovrflw--;
pCppArgs[nPos] = pUnoArgs[nPos] = ((char*)ovrflw - 4);
bOverFlowUsed = true;
@@ -182,7 +182,7 @@ namespace
}
else
{
- if ((startovrflw-ovrflw) & 4)
+ if ((startovrflw-ovrflw) & 1)
ovrflw--;
pCppArgs[nPos] = pUnoArgs[nPos] = ((char*)ovrflw - 4);
bOverFlowUsed = true;
diff --git a/bridges/source/cpp_uno/gcc3_linux_intel/makefile.mk b/bridges/source/cpp_uno/gcc3_linux_intel/makefile.mk
index 50cf80654a94..d5eb2dd6e1d9 100644
--- a/bridges/source/cpp_uno/gcc3_linux_intel/makefile.mk
+++ b/bridges/source/cpp_uno/gcc3_linux_intel/makefile.mk
@@ -77,8 +77,5 @@ SHL1STDLIBS= \
.INCLUDE : target.mk
$(SLO)$/%.obj: %.s
-#cmc: Ideally --noexecstack would be in operations, but with #i51385# pyuno
-#remote bridgeing breaks
-# $(CC) -Wa,--noexecstack -c -o $(SLO)$/$(@:b).o $<
$(CC) -c -o $(SLO)$/$(@:b).o $<
touch $@
diff --git a/bridges/source/cpp_uno/gcc3_macosx_intel/makefile.mk b/bridges/source/cpp_uno/gcc3_macosx_intel/makefile.mk
index 92d575a14dfb..7bca40bbaf97 100644
--- a/bridges/source/cpp_uno/gcc3_macosx_intel/makefile.mk
+++ b/bridges/source/cpp_uno/gcc3_macosx_intel/makefile.mk
@@ -72,8 +72,5 @@ SHL1STDLIBS= \
.INCLUDE : target.mk
$(SLO)$/%.obj: %.s
-#cmc: Ideally --noexecstack would be in operations, but with #i51385# pyuno
-#remote bridgeing breaks
-# $(CC) -Wa,--noexecstack -c -o $(SLO)$/$(@:b).o $<
$(CC) -c -o $(SLO)$/$(@:b).o $<
touch $@
diff --git a/bridges/source/cpp_uno/mingw_intel/makefile.mk b/bridges/source/cpp_uno/mingw_intel/makefile.mk
index a23288f9f677..2c7a8da48527 100644
--- a/bridges/source/cpp_uno/mingw_intel/makefile.mk
+++ b/bridges/source/cpp_uno/mingw_intel/makefile.mk
@@ -87,8 +87,5 @@ DEF1NAME= $(SHL1TARGET)
.INCLUDE : target.mk
$(SLO)$/%.obj: %.s
-#cmc: Ideally --noexecstack would be in operations, but with #i51385# pyuno
-#remote bridgeing breaks
-# $(CC) -Wa,--noexecstack -c -o $(SLO)$/$(@:b).o $<
$(CC) -c -o $(SLO)$/$(@:b).obj $<
touch $@
diff --git a/bridges/source/remote/urp/urp_job.hxx b/bridges/source/remote/urp/urp_job.hxx
index f0e338e4728c..ce58b1f3f779 100644
--- a/bridges/source/remote/urp/urp_job.hxx
+++ b/bridges/source/remote/urp/urp_job.hxx
@@ -76,9 +76,6 @@ public:
~Job();
- inline void setUnmarshal( Unmarshal *p )
- { m_pUnmarshal = p; }
-
public:
remote_Context *m_pContext;
Unmarshal *m_pUnmarshal;
@@ -87,7 +84,7 @@ public:
::bridges_remote::RemoteThreadCounter m_counter;
};
-class ClientJob : public Job
+class ClientJob : private Job
{
public:
// pContext is null for bridge-internal UrpProtocolProperties requests
@@ -123,6 +120,9 @@ public:
{ return m_bBridgePropertyCall; }
inline sal_Bool isOneway()
{ return m_bOneway; }
+
+ inline void setUnmarshal( Unmarshal *p )
+ { m_pUnmarshal = p; }
public:
typelib_InterfaceMethodTypeDescription *m_pMethodType;
typelib_InterfaceAttributeTypeDescription *m_pAttributeType;
@@ -172,7 +172,7 @@ struct ServerJobEntry
sal_Bool m_bIgnoreCache;
};
-class ServerMultiJob : public Job
+class ServerMultiJob : private Job
{
public:
ServerMultiJob( uno_Environment *pEnvRemote,
diff --git a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx
index 253699f4595c..062dcc1a129d 100644
--- a/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx
+++ b/chart2/source/controller/chartapiwrapper/ChartDataWrapper.cxx
@@ -303,7 +303,9 @@ ChartDataWrapper::ChartDataWrapper( ::boost::shared_ptr< Chart2ModelContact > sp
m_spChart2ModelContact( spChart2ModelContact ),
m_aEventListenerContainer( m_aMutex )
{
+ osl_incrementInterlockedCount( &m_refCount );
initDataAccess();
+ osl_decrementInterlockedCount( &m_refCount );
}
ChartDataWrapper::ChartDataWrapper( ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact,
@@ -311,8 +313,10 @@ ChartDataWrapper::ChartDataWrapper( ::boost::shared_ptr< Chart2ModelContact > sp
m_spChart2ModelContact( spChart2ModelContact ),
m_aEventListenerContainer( m_aMutex )
{
+ osl_incrementInterlockedCount( &m_refCount );
lcl_AllOperator aOperator( xNewData );
applyData( aOperator );
+ osl_decrementInterlockedCount( &m_refCount );
}
ChartDataWrapper::~ChartDataWrapper()
@@ -482,7 +486,8 @@ void ChartDataWrapper::fireChartDataChangeEvent(
uno::Reference<
::com::sun::star::chart::XChartDataChangeEventListener > xListener(
aIter.next(), uno::UNO_QUERY );
- xListener->chartDataChanged( aEvent );
+ if( xListener.is() )
+ xListener->chartDataChanged( aEvent );
}
}
@@ -547,6 +552,7 @@ void ChartDataWrapper::applyData( lcl_Operator& rDataOperator )
if( !bHasCategories && rDataOperator.setsCategories( bUseColumns ) )
bHasCategories = true;
+ aRangeString = C2U("all");
uno::Sequence< beans::PropertyValue > aArguments( DataSourceHelper::createArguments(
aRangeString, aSequenceMapping, bUseColumns, bFirstCellAsLabel, bHasCategories ) );
diff --git a/chart2/source/controller/main/ChartController_Window.cxx b/chart2/source/controller/main/ChartController_Window.cxx
index 7822c8c1cc21..6049be7e3199 100644
--- a/chart2/source/controller/main/ChartController_Window.cxx
+++ b/chart2/source/controller/main/ChartController_Window.cxx
@@ -774,6 +774,7 @@ void ChartController::execute_Tracking( const TrackingEvent& /* rTEvt */ )
void ChartController::execute_MouseButtonUp( const MouseEvent& rMEvt )
{
ControllerLockGuard aCLGuard( m_aModel->getModel());
+ bool bMouseUpWithoutMouseDown = !m_bWaitingForMouseUp;
m_bWaitingForMouseUp = false;
bool bNotifySelectionChange = false;
{
@@ -907,9 +908,8 @@ void ChartController::execute_MouseButtonUp( const MouseEvent& rMEvt )
else
m_aSelection.resetPossibleSelectionAfterSingleClickWasEnsured();
}
- else if( isDoubleClick(rMEvt) )
+ else if( isDoubleClick(rMEvt) && !bMouseUpWithoutMouseDown /*#i106966#*/ )
{
- // #i12587# support for shapes in chart
Point aMousePixel = rMEvt.GetPosPixel();
execute_DoubleClick( &aMousePixel );
}
@@ -1714,7 +1714,11 @@ bool ChartController::requestQuickHelp(
lang::EventObject aEvent( xSelectionSupplier );
::cppu::OInterfaceIteratorHelper aIt( *pIC );
while( aIt.hasMoreElements() )
- (static_cast< view::XSelectionChangeListener*>(aIt.next()))->selectionChanged( aEvent );
+ {
+ uno::Reference< view::XSelectionChangeListener > xListener( aIt.next(), uno::UNO_QUERY );
+ if( xListener.is() )
+ xListener->selectionChanged( aEvent );
+ }
}
}
diff --git a/chart2/source/controller/main/ShapeToolbarController.cxx b/chart2/source/controller/main/ShapeToolbarController.cxx
index a8a6cfba20ff..9c6ed747e1d5 100644
--- a/chart2/source/controller/main/ShapeToolbarController.cxx
+++ b/chart2/source/controller/main/ShapeToolbarController.cxx
@@ -56,7 +56,7 @@ namespace chart
::rtl::OUString ShapeToolbarController::getImplementationName_Static() throw (uno::RuntimeException)
{
- return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.chart2.comp.ShapeToolbarController" ) );
+ return ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.chart2.ShapeToolbarController" ) );
}
Sequence< ::rtl::OUString > ShapeToolbarController::getSupportedServiceNames_Static() throw (uno::RuntimeException)
diff --git a/chart2/source/controller/main/UndoManager.cxx b/chart2/source/controller/main/UndoManager.cxx
index 34157503e629..21e27922b1c8 100644
--- a/chart2/source/controller/main/UndoManager.cxx
+++ b/chart2/source/controller/main/UndoManager.cxx
@@ -108,7 +108,11 @@ void ModifyBroadcaster::fireEvent()
lang::EventObject aEvent( static_cast< lang::XComponent* >( this ) );
::cppu::OInterfaceIteratorHelper aIt( *pIC );
while( aIt.hasMoreElements() )
- (static_cast< util::XModifyListener*>(aIt.next()))->modified( aEvent );
+ {
+ uno::Reference< util::XModifyListener > xListener( aIt.next(), uno::UNO_QUERY );
+ if( xListener.is() )
+ xListener->modified( aEvent );
+ }
}
}
diff --git a/chart2/source/model/main/ChartModel.cxx b/chart2/source/model/main/ChartModel.cxx
index dc0931f41fc4..2a34844c169d 100644
--- a/chart2/source/model/main/ChartModel.cxx
+++ b/chart2/source/model/main/ChartModel.cxx
@@ -230,7 +230,11 @@ void SAL_CALL ChartModel::impl_notifyCloseListeners()
lang::EventObject aEvent( static_cast< lang::XComponent*>(this) );
::cppu::OInterfaceIteratorHelper aIt( *pIC );
while( aIt.hasMoreElements() )
- (static_cast< util::XCloseListener*>(aIt.next()))->notifyClosing( aEvent );
+ {
+ uno::Reference< util::XCloseListener > xListener( aIt.next(), uno::UNO_QUERY );
+ if( xListener.is() )
+ xListener->notifyClosing( aEvent );
+ }
}
}
diff --git a/chart2/source/model/main/ChartModel_Persistence.cxx b/chart2/source/model/main/ChartModel_Persistence.cxx
index 4f864ae0fd1c..113be99915cb 100644
--- a/chart2/source/model/main/ChartModel_Persistence.cxx
+++ b/chart2/source/model/main/ChartModel_Persistence.cxx
@@ -697,7 +697,11 @@ void SAL_CALL ChartModel::impl_notifyModifiedListeners()
lang::EventObject aEvent( static_cast< lang::XComponent*>(this) );
::cppu::OInterfaceIteratorHelper aIt( *pIC );
while( aIt.hasMoreElements() )
- (static_cast< util::XModifyListener*>(aIt.next()))->modified( aEvent );
+ {
+ uno::Reference< util::XModifyListener > xListener( aIt.next(), uno::UNO_QUERY );
+ if( xListener.is() )
+ xListener->modified( aEvent );
+ }
}
}
@@ -827,8 +831,11 @@ void SAL_CALL ChartModel::impl_notifyStorageChangeListeners()
{
::cppu::OInterfaceIteratorHelper aIt( *pIC );
while( aIt.hasMoreElements() )
- (static_cast< document::XStorageChangeListener* >(aIt.next()))->notifyStorageChange(
- static_cast< ::cppu::OWeakObject* >( this ), m_xStorage );
+ {
+ uno::Reference< document::XStorageChangeListener > xListener( aIt.next(), uno::UNO_QUERY );
+ if( xListener.is() )
+ xListener->notifyStorageChange( static_cast< ::cppu::OWeakObject* >( this ), m_xStorage );
+ }
}
}
diff --git a/chart2/source/model/main/DataSeries.cxx b/chart2/source/model/main/DataSeries.cxx
index 4faca33e936c..bdb46665004f 100644
--- a/chart2/source/model/main/DataSeries.cxx
+++ b/chart2/source/model/main/DataSeries.cxx
@@ -116,13 +116,6 @@ void lcl_CloneAttributedDataPoints(
}
}
-bool lcl_isInternalData( const Reference< chart2::data::XLabeledDataSequence > & xLSeq )
-{
- Reference< lang::XServiceInfo > xServiceInfo( xLSeq, uno::UNO_QUERY );
- return ( xServiceInfo.is() && xServiceInfo->getImplementationName().equalsAsciiL(
- RTL_CONSTASCII_STRINGPARAM("com.sun.star.comp.chart2.LabeledDataSequence")));
-}
-
} // anonymous namespace
// ----------------------------------------
@@ -146,11 +139,8 @@ DataSeries::DataSeries( const DataSeries & rOther ) :
{
if( ! rOther.m_aDataSequences.empty())
{
- if( lcl_isInternalData( rOther.m_aDataSequences.front()))
- CloneHelper::CloneRefVector< tDataSequenceContainer::value_type >(
- rOther.m_aDataSequences, m_aDataSequences );
- else
- m_aDataSequences = rOther.m_aDataSequences;
+ CloneHelper::CloneRefVector< tDataSequenceContainer::value_type >(
+ rOther.m_aDataSequences, m_aDataSequences );
ModifyListenerHelper::addListenerToAllElements( m_aDataSequences, m_xModifyEventForwarder );
}
diff --git a/chart2/source/model/template/ChartTypeTemplate.cxx b/chart2/source/model/template/ChartTypeTemplate.cxx
index 393321a19d55..e3943e9eb45f 100644
--- a/chart2/source/model/template/ChartTypeTemplate.cxx
+++ b/chart2/source/model/template/ChartTypeTemplate.cxx
@@ -86,7 +86,7 @@ void lcl_applyDefaultStyle(
void lcl_ensureCorrectLabelPlacement( const Reference< beans::XPropertySet >& xProp, const uno::Sequence < sal_Int32 >& rAvailablePlacements )
{
sal_Int32 nLabelPlacement=0;
- if( xProp->getPropertyValue( C2U( "LabelPlacement" ) ) >>= nLabelPlacement )
+ if( xProp.is() && (xProp->getPropertyValue( C2U( "LabelPlacement" ) ) >>= nLabelPlacement) )
{
bool bValid = false;
for( sal_Int32 nN = 0; nN < rAvailablePlacements.getLength(); nN++ )
@@ -112,7 +112,7 @@ void lcl_resetLabelPlacementIfDefault( const Reference< beans::XPropertySet >& x
{
sal_Int32 nLabelPlacement=0;
- if( xProp->getPropertyValue( C2U( "LabelPlacement" ) ) >>= nLabelPlacement )
+ if( xProp.is() && (xProp->getPropertyValue( C2U( "LabelPlacement" ) ) >>= nLabelPlacement) )
{
if( nDefaultPlacement == nLabelPlacement )
xProp->setPropertyValue( C2U("LabelPlacement"), uno::Any() );
diff --git a/chart2/source/tools/LifeTime.cxx b/chart2/source/tools/LifeTime.cxx
index 68ed06208d11..38aa07718d4a 100644
--- a/chart2/source/tools/LifeTime.cxx
+++ b/chart2/source/tools/LifeTime.cxx
@@ -371,7 +371,11 @@ CloseableLifeTimeManager::~CloseableLifeTimeManager()
lang::EventObject aEvent( xCloseable );
::cppu::OInterfaceIteratorHelper aIt( *pIC );
while( aIt.hasMoreElements() )
- (static_cast< util::XCloseListener*>(aIt.next()))->notifyClosing( aEvent );
+ {
+ uno::Reference< util::XCloseListener > xListener( aIt.next(), uno::UNO_QUERY );
+ if( xListener.is() )
+ xListener->notifyClosing( aEvent );
+ }
}
}
}
diff --git a/chart2/source/tools/RangeHighlighter.cxx b/chart2/source/tools/RangeHighlighter.cxx
index 20359bfa6b4c..1565344923b1 100644
--- a/chart2/source/tools/RangeHighlighter.cxx
+++ b/chart2/source/tools/RangeHighlighter.cxx
@@ -348,7 +348,11 @@ void RangeHighlighter::fireSelectionEvent()
lang::EventObject aEvent( static_cast< lang::XComponent* >( this ) );
::cppu::OInterfaceIteratorHelper aIt( *pIC );
while( aIt.hasMoreElements() )
- (static_cast< view::XSelectionChangeListener*>(aIt.next()))->selectionChanged( aEvent );
+ {
+ uno::Reference< view::XSelectionChangeListener > xListener( aIt.next(), uno::UNO_QUERY );
+ if( xListener.is() )
+ xListener->selectionChanged( aEvent );
+ }
}
}
diff --git a/chart2/source/view/axes/VCartesianAxis.cxx b/chart2/source/view/axes/VCartesianAxis.cxx
index caadaa554091..8ec895fbd452 100644
--- a/chart2/source/view/axes/VCartesianAxis.cxx
+++ b/chart2/source/view/axes/VCartesianAxis.cxx
@@ -451,7 +451,7 @@ void VCartesianAxis::createAllTickInfosFromComplexCategories( ::std::vector< ::s
sal_Int32 nCount = aCat.Count;
if( nCatIndex + 0.5 + nCount >= m_aScale.Maximum )
{
- nCount = m_aScale.Maximum - 0.5 - nCatIndex;
+ nCount = static_cast<sal_Int32>(m_aScale.Maximum - 0.5 - nCatIndex);
if( nCount <= 0 )
nCount = 1;
}
@@ -1519,7 +1519,7 @@ void SAL_CALL VCartesianAxis::createShapes()
::std::vector<TickmarkProperties> aTickmarkPropertiesList;
static bool bIncludeSpaceBetweenTickAndText = false;
- sal_Int32 nOffset = pTickmarkHelper2D->getDistanceAxisTickToText( m_aAxisProperties, false, bIncludeSpaceBetweenTickAndText ).getLength();
+ sal_Int32 nOffset = static_cast<sal_Int32>(pTickmarkHelper2D->getDistanceAxisTickToText( m_aAxisProperties, false, bIncludeSpaceBetweenTickAndText ).getLength());
sal_Int32 nTextLevelCount = getTextLevelCount();
for( sal_Int32 nTextLevel=0; nTextLevel<nTextLevelCount; nTextLevel++ )
{
@@ -1527,7 +1527,7 @@ void SAL_CALL VCartesianAxis::createShapes()
if( apTickIter.get() )
{
B2DVector aLabelsDistance( lcl_getLabelsDistance( *apTickIter.get(), pTickmarkHelper2D->getDistanceAxisTickToText( m_aAxisProperties, false ) ) );
- sal_Int32 nCurrentLength = aLabelsDistance.getLength();
+ sal_Int32 nCurrentLength = static_cast<sal_Int32>(aLabelsDistance.getLength());
aTickmarkPropertiesList.push_back( m_aAxisProperties.makeTickmarkPropertiesForComplexCategories( nOffset + nCurrentLength, 0, nTextLevel ) );
nOffset += nCurrentLength;
}
diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index 549ef0273595..c5ba0c38ab05 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -2829,7 +2829,11 @@ void ChartView::impl_notifyModeChangeListener( const rtl::OUString& rNewMode )
util::ModeChangeEvent aEvent( static_cast< uno::XWeak* >( this ), rNewMode );
::cppu::OInterfaceIteratorHelper aIt( *pIC );
while( aIt.hasMoreElements() )
- (static_cast< util::XModeChangeListener*>(aIt.next()))->modeChanged( aEvent );
+ {
+ uno::Reference< util::XModeChangeListener > xListener( aIt.next(), uno::UNO_QUERY );
+ if( xListener.is() )
+ xListener->modeChanged( aEvent );
+ }
}
}
catch( uno::Exception& ex)
diff --git a/chart2/source/view/main/VLegend.cxx b/chart2/source/view/main/VLegend.cxx
index f0bcc12c0440..7101a984ee24 100644
--- a/chart2/source/view/main/VLegend.cxx
+++ b/chart2/source/view/main/VLegend.cxx
@@ -714,11 +714,16 @@ void VLegend::createShapes(
LegendExpansion eExpansion = LegendExpansion_HIGH;
if( xLegendProp.is())
{
- lcl_getProperties( xLegendProp, aLineFillProperties, aTextProperties, nMaxLabelWidth,
- rPageSize );
-
// get Expansion property
xLegendProp->getPropertyValue( C2U( "Expansion" )) >>= eExpansion;
+ if( eExpansion == LegendExpansion_WIDE )
+ {
+ //#i80377#
+ nMaxLabelWidth = (rAvailableSpace.Width * 5) / 6;//completely correct would be available width minus symbol size minus distances to page ...
+ }
+
+ lcl_getProperties( xLegendProp, aLineFillProperties, aTextProperties, nMaxLabelWidth,
+ rPageSize );
}
if( xBorder.is())
diff --git a/configmgr/inc/configmgr/update.hxx b/configmgr/inc/configmgr/update.hxx
index b27a32487400..3a152959342b 100644
--- a/configmgr/inc/configmgr/update.hxx
+++ b/configmgr/inc/configmgr/update.hxx
@@ -30,6 +30,8 @@
#include "sal/config.h"
+#include <set>
+
#include "configmgr/detail/configmgrdllapi.hxx"
namespace rtl { class OUString; }
@@ -44,6 +46,11 @@ OOO_DLLPUBLIC_CONFIGMGR void insertExtensionXcsFile(
OOO_DLLPUBLIC_CONFIGMGR void insertExtensionXcuFile(
bool shared, rtl::OUString const & fileUri);
+OOO_DLLPUBLIC_CONFIGMGR void insertModificationXcuFile(
+ rtl::OUString const & fileUri,
+ std::set< rtl::OUString > const & includedPaths,
+ std::set< rtl::OUString > const & excludedPaths);
+
}
}
diff --git a/configmgr/source/README b/configmgr/source/README
index 6d19a3b78610..b731043d34ed 100644
--- a/configmgr/source/README
+++ b/configmgr/source/README
@@ -76,6 +76,7 @@ update.cxx
data.cxx
lock.cxx
nodemap.cxx
+partial.cxx
path.hxx
type.cxx
Utilities.
diff --git a/configmgr/source/components.cxx b/configmgr/source/components.cxx
index 51a1a6547d9b..6d97971e1a2c 100644
--- a/configmgr/source/components.cxx
+++ b/configmgr/source/components.cxx
@@ -46,6 +46,7 @@
#include "osl/diagnose.h"
#include "osl/file.hxx"
#include "rtl/bootstrap.hxx"
+#include "rtl/logfile.h"
#include "rtl/ref.hxx"
#include "rtl/string.h"
#include "rtl/textenc.h"
@@ -58,6 +59,7 @@
#include "modifications.hxx"
#include "node.hxx"
#include "parsemanager.hxx"
+#include "partial.hxx"
#include "rootaccess.hxx"
#include "writemodfile.hxx"
#include "xcdparser.hxx"
@@ -82,26 +84,29 @@ struct UnresolvedListItem {
typedef std::list< UnresolvedListItem > UnresolvedList;
-void parseXcsFile(rtl::OUString const & url, int layer, Data * data,
+void parseXcsFile(
+ rtl::OUString const & url, int layer, Data & data, Partial const * partial,
Modifications * modifications)
SAL_THROW((
css::container::NoSuchElementException, css::uno::RuntimeException))
{
- OSL_ASSERT(modifications == 0); (void) modifications;
+ OSL_ASSERT(partial == 0 && modifications == 0);
+ (void) partial; (void) modifications;
OSL_VERIFY(
rtl::Reference< ParseManager >(
new ParseManager(url, new XcsParser(layer, data)))->parse());
}
void parseXcuFile(
- rtl::OUString const & url, int layer, Data * data,
+ rtl::OUString const & url, int layer, Data & data, Partial const * partial,
Modifications * modifications)
SAL_THROW((
css::container::NoSuchElementException, css::uno::RuntimeException))
{
OSL_VERIFY(
rtl::Reference< ParseManager >(
- new ParseManager(url, new XcuParser(layer, data, modifications)))->
+ new ParseManager(
+ url, new XcuParser(layer, data, partial, modifications)))->
parse());
}
@@ -112,7 +117,7 @@ rtl::OUString expand(rtl::OUString const & str) {
}
static bool singletonCreated = false;
-static Components * singleton; // leaks
+static Components * singleton = 0;
}
@@ -122,7 +127,8 @@ void Components::initSingleton(
OSL_ASSERT(context.is());
if (!singletonCreated) {
singletonCreated = true;
- singleton = new Components(context);
+ static Components theSingleton(context);
+ singleton = &theSingleton;
}
}
@@ -211,7 +217,7 @@ void Components::insertExtensionXcsFile(
bool shared, rtl::OUString const & fileUri)
{
try {
- parseXcsFile(fileUri, shared ? 9 : 13, &data_, 0);
+ parseXcsFile(fileUri, shared ? 9 : 13, data_, 0, 0);
} catch (css::container::NoSuchElementException & e) {
throw css::uno::RuntimeException(
(rtl::OUString(
@@ -227,7 +233,7 @@ void Components::insertExtensionXcuFile(
{
OSL_ASSERT(modifications != 0);
try {
- parseXcuFile(fileUri, shared ? 10 : 14, &data_, modifications);
+ parseXcuFile(fileUri, shared ? 10 : 14, data_, 0, modifications);
} catch (css::container::NoSuchElementException & e) {
throw css::uno::RuntimeException(
(rtl::OUString(
@@ -238,6 +244,24 @@ void Components::insertExtensionXcuFile(
}
}
+void Components::insertModificationXcuFile(
+ rtl::OUString const & fileUri,
+ std::set< rtl::OUString > const & includedPaths,
+ std::set< rtl::OUString > const & excludedPaths,
+ Modifications * modifications)
+{
+ OSL_ASSERT(modifications != 0);
+ try {
+ Partial part(includedPaths, excludedPaths);
+ parseXcuFile(fileUri, Data::NO_LAYER, data_, &part, modifications);
+ } catch (css::uno::Exception & e) { //TODO: more specific exception catching
+ OSL_TRACE(
+ "configmgr error inserting %s: %s",
+ rtl::OUStringToOString(fileUri, RTL_TEXTENCODING_UTF8).getStr(),
+ rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8).getStr());
+ }
+}
+
css::beans::Optional< css::uno::Any > Components::getExternalValue(
rtl::OUString const & descriptor)
{
@@ -315,7 +339,7 @@ Components::Components(
context_(context)
{
OSL_ASSERT(context.is());
-/*SB*/try{
+ RTL_LOGFILE_TRACE_AUTHOR("configmgr", "sb", "begin parsing");
parseXcsXcuLayer(
0,
expand(
@@ -380,24 +404,22 @@ Components::Components(
":UNO_USER_PACKAGES_CACHE}/registry/"
"com.sun.star.comp.deployment.configuration."
"PackageRegistryBackend/configmgr.ini"))));
-/*SB*/}catch(css::uno::Exception&e){fprintf(stderr,"caught <%s>\n",rtl::OUStringToOString(e.Message,RTL_TEXTENCODING_UTF8).getStr());throw;}
try {
parseModificationLayer();
} catch (css::uno::Exception & e) { //TODO: more specific exception catching
- // Silently ignore unreadable parts of a corrupted
- // registrymodifications.xcu file, instead of completely preventing OOo
- // from starting:
+ // Silently ignore unreadable parts of a corrupted user modification
+ // layer, instead of completely preventing OOo from starting:
OSL_TRACE(
"configmgr error reading user modification layer: %s",
rtl::OUStringToOString(e.Message, RTL_TEXTENCODING_UTF8).getStr());
}
+ RTL_LOGFILE_TRACE_AUTHOR("configmgr", "sb", "end parsing");
}
Components::~Components() {}
void Components::parseFiles(
- int layer, rtl::OUString const & extension,
- void (* parseFile)(rtl::OUString const &, int, Data *, Modifications *),
+ int layer, rtl::OUString const & extension, FileParser * parseFile,
rtl::OUString const & url, bool recursive)
{
osl::Directory dir(url);
@@ -447,7 +469,7 @@ void Components::parseFiles(
file.match(extension, file.getLength() - extension.getLength()))
{
try {
- (*parseFile)(stat.getFileURL(), layer, &data_, 0);
+ (*parseFile)(stat.getFileURL(), layer, data_, 0, 0);
} catch (css::container::NoSuchElementException & e) {
throw css::uno::RuntimeException(
(rtl::OUString(
@@ -462,16 +484,15 @@ void Components::parseFiles(
}
void Components::parseFileList(
- int layer,
- void (* parseFile)(rtl::OUString const &, int, Data *, Modifications *),
- rtl::OUString const & urls, rtl::Bootstrap const & ini)
+ int layer, FileParser * parseFile, rtl::OUString const & urls,
+ rtl::Bootstrap const & ini)
{
for (sal_Int32 i = 0;;) {
rtl::OUString url(urls.getToken(0, ' ', i));
if (url.getLength() != 0) {
ini.expandMacrosFrom(url); //TODO: detect failure
try {
- (*parseFile)(url, layer, &data_, 0);
+ (*parseFile)(url, layer, data_, 0, 0);
} catch (css::container::NoSuchElementException & e) {
throw css::uno::RuntimeException(
(rtl::OUString(
@@ -539,7 +560,7 @@ void Components::parseXcdFiles(int layer, rtl::OUString const & url) {
rtl::Reference< ParseManager > manager;
try {
manager = new ParseManager(
- stat.getFileURL(), new XcdParser(layer, deps, &data_));
+ stat.getFileURL(), new XcdParser(layer, deps, data_));
} catch (css::container::NoSuchElementException & e) {
throw css::uno::RuntimeException(
(rtl::OUString(
@@ -630,7 +651,7 @@ rtl::OUString Components::getModificationFileUrl() const {
void Components::parseModificationLayer() {
try {
- parseXcuFile(getModificationFileUrl(), Data::NO_LAYER, &data_, 0);
+ parseXcuFile(getModificationFileUrl(), Data::NO_LAYER, data_, 0, 0);
} catch (css::container::NoSuchElementException &) {
OSL_TRACE(
"configmgr user registrymodifications.xcu does not (yet) exist");
diff --git a/configmgr/source/components.hxx b/configmgr/source/components.hxx
index 8523b02cbbaf..a78ed325969d 100644
--- a/configmgr/source/components.hxx
+++ b/configmgr/source/components.hxx
@@ -58,6 +58,7 @@ namespace configmgr {
class Broadcaster;
class Modifications;
class Node;
+class Partial;
class RootAccess;
class Components: private boost::noncopyable {
@@ -96,10 +97,19 @@ public:
bool shared, rtl::OUString const & fileUri,
Modifications * modifications);
+ void insertModificationXcuFile(
+ rtl::OUString const & fileUri,
+ std::set< rtl::OUString > const & includedPaths,
+ std::set< rtl::OUString > const & excludedPaths,
+ Modifications * modifications);
+
com::sun::star::beans::Optional< com::sun::star::uno::Any >
getExternalValue(rtl::OUString const & descriptor);
private:
+ typedef void FileParser(
+ rtl::OUString const &, int, Data &, Partial const *, Modifications *);
+
Components(
com::sun::star::uno::Reference< com::sun::star::uno::XComponentContext >
const & context);
@@ -107,14 +117,12 @@ private:
~Components();
void parseFiles(
- int layer, rtl::OUString const & extension,
- void (* parseFile)(rtl::OUString const &, int, Data *, Modifications *),
+ int layer, rtl::OUString const & extension, FileParser * parseFile,
rtl::OUString const & url, bool recursive);
void parseFileList(
- int layer,
- void (* parseFile)(rtl::OUString const &, int, Data *, Modifications *),
- rtl::OUString const & urls, rtl::Bootstrap const & ini);
+ int layer, FileParser * parseFile, rtl::OUString const & urls,
+ rtl::Bootstrap const & ini);
void parseXcdFiles(int layer, rtl::OUString const & url);
diff --git a/configmgr/source/makefile.mk b/configmgr/source/makefile.mk
index d6972e12b9d8..317e08bdf49c 100644
--- a/configmgr/source/makefile.mk
+++ b/configmgr/source/makefile.mk
@@ -54,6 +54,7 @@ SLOFILES = \
$(SLO)/nodemap.obj \
$(SLO)/pad.obj \
$(SLO)/parsemanager.obj \
+ $(SLO)/partial.obj \
$(SLO)/propertynode.obj \
$(SLO)/rootaccess.obj \
$(SLO)/services.obj \
diff --git a/configmgr/source/partial.cxx b/configmgr/source/partial.cxx
new file mode 100644
index 000000000000..4c9189ed05c4
--- /dev/null
+++ b/configmgr/source/partial.cxx
@@ -0,0 +1,137 @@
+/*************************************************************************
+*
+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+*
+* Copyright 2000, 2010 Oracle and/or its affiliates.
+*
+* OpenOffice.org - a multi-platform office productivity suite
+*
+* This file is part of OpenOffice.org.
+*
+* OpenOffice.org is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Lesser General Public License version 3
+* only, as published by the Free Software Foundation.
+*
+* OpenOffice.org is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Lesser General Public License version 3 for more details
+* (a copy is included in the LICENSE file that accompanied this code).
+*
+* You should have received a copy of the GNU Lesser General 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 "precompiled_configmgr.hxx"
+#include "sal/config.h"
+
+#include <map>
+#include <set>
+
+#include "com/sun/star/uno/Reference.hxx"
+#include "com/sun/star/uno/RuntimeException.hpp"
+#include "com/sun/star/uno/XInterface.hpp"
+#include "osl/diagnose.h"
+#include "rtl/ustring.h"
+#include "rtl/ustring.hxx"
+#include "sal/types.h"
+
+#include "data.hxx"
+#include "partial.hxx"
+
+namespace configmgr {
+
+namespace {
+
+namespace css = com::sun::star;
+
+bool parseSegment(
+ rtl::OUString const & path, sal_Int32 * index, rtl::OUString * segment)
+{
+ OSL_ASSERT(
+ index != 0 && *index >= 0 && *index <= path.getLength() &&
+ segment != 0);
+ if (path[(*index)++] == '/') {
+ rtl::OUString name;
+ bool setElement;
+ rtl::OUString templateName;
+ *index = Data::parseSegment(
+ path, *index, &name, &setElement, &templateName);
+ if (*index != -1) {
+ *segment = Data::createSegment(templateName, name);
+ return *index == path.getLength();
+ }
+ }
+ throw css::uno::RuntimeException(
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("bad path ")) + path,
+ css::uno::Reference< css::uno::XInterface >());
+}
+
+}
+
+Partial::Partial(
+ std::set< rtl::OUString > const & includedPaths,
+ std::set< rtl::OUString > const & excludedPaths)
+{
+ for (std::set< rtl::OUString >::const_iterator i(includedPaths.begin());
+ i != includedPaths.end(); ++i)
+ {
+ sal_Int32 n = 0;
+ for (Node * p = &root_;;) {
+ rtl::OUString seg;
+ bool end = parseSegment(*i, &n, &seg);
+ p = &p->children[seg];
+ if (p->startInclude) {
+ break;
+ }
+ if (end) {
+ p->children.clear();
+ p->startInclude = true;
+ break;
+ }
+ }
+ }
+ for (std::set< rtl::OUString >::const_iterator i(excludedPaths.begin());
+ i != excludedPaths.end(); ++i)
+ {
+ sal_Int32 n = 0;
+ for (Node * p = &root_;;) {
+ rtl::OUString seg;
+ bool end = parseSegment(*i, &n, &seg);
+ if (end) {
+ p->children[seg] = Node();
+ break;
+ }
+ Node::Children::iterator j(p->children.find(seg));
+ if (j == p->children.end()) {
+ break;
+ }
+ p = &j->second;
+ }
+ }
+}
+
+Partial::~Partial() {}
+
+Partial::Containment Partial::contains(Path const & path) const {
+ //TODO: For set elements, the segment names recorded in the node tree need
+ // not match the corresponding path segments, so this function can fail.
+ Node const * p = &root_;
+ bool includes = false;
+ for (Path::const_iterator i(path.begin()); i != path.end(); ++i) {
+ Node::Children::const_iterator j(p->children.find(*i));
+ if (j == p->children.end()) {
+ break;
+ }
+ p = &j->second;
+ includes |= p->startInclude;
+ }
+ return p->children.empty() && !p->startInclude
+ ? CONTAINS_NOT
+ : includes ? CONTAINS_NODE : CONTAINS_SUBNODES;
+}
+
+}
diff --git a/configmgr/source/partial.hxx b/configmgr/source/partial.hxx
new file mode 100644
index 000000000000..39931448c66d
--- /dev/null
+++ b/configmgr/source/partial.hxx
@@ -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.
+*
+************************************************************************/
+
+#ifndef INCLUDED_CONFIGMGR_SOURCE_PARTIAL_HXX
+#define INCLUDED_CONFIGMGR_SOURCE_PARTIAL_HXX
+
+#include "sal/config.h"
+
+#include <map>
+#include <set>
+
+#include "boost/noncopyable.hpp"
+
+#include "path.hxx"
+
+namespace rtl { class OUString; }
+
+namespace configmgr {
+
+class Partial: private boost::noncopyable {
+public:
+ enum Containment { CONTAINS_NOT, CONTAINS_SUBNODES, CONTAINS_NODE };
+
+ Partial(
+ std::set< rtl::OUString > const & includedPaths,
+ std::set< rtl::OUString > const & excludedPaths);
+
+ ~Partial();
+
+ Containment contains(Path const & path) const;
+
+private:
+ struct Node {
+ typedef std::map< rtl::OUString, Node > Children;
+
+ Node(): startInclude(false) {}
+
+ Children children;
+ bool startInclude;
+ };
+
+ Node root_;
+};
+
+}
+
+#endif
diff --git a/configmgr/source/update.cxx b/configmgr/source/update.cxx
index ab711c3bec10..57f45068d954 100644
--- a/configmgr/source/update.cxx
+++ b/configmgr/source/update.cxx
@@ -28,6 +28,8 @@
#include "precompiled_configmgr.hxx"
#include "sal/config.h"
+#include <set>
+
#include "configmgr/update.hxx"
#include "osl/mutex.hxx"
#include "rtl/ref.hxx"
@@ -61,6 +63,23 @@ void insertExtensionXcuFile(bool shared, rtl::OUString const & fileUri) {
bc.send();
}
+void insertModificationXcuFile(
+ rtl::OUString const & fileUri,
+ std::set< rtl::OUString > const & includedPaths,
+ std::set< rtl::OUString > const & excludedPaths)
+{
+ Broadcaster bc;
+ {
+ osl::MutexGuard g(lock);
+ Modifications mods;
+ Components::getSingleton().insertModificationXcuFile(
+ fileUri, includedPaths, excludedPaths, &mods);
+ Components::getSingleton().initGlobalBroadcaster(
+ mods, rtl::Reference< RootAccess >(), &bc);
+ }
+ bc.send();
+}
+
}
}
diff --git a/configmgr/source/valueparser.cxx b/configmgr/source/valueparser.cxx
index f951aac5ca01..4adf452c409b 100644
--- a/configmgr/source/valueparser.cxx
+++ b/configmgr/source/valueparser.cxx
@@ -270,6 +270,10 @@ XmlReader::Text ValueParser::getTextMode() const {
if (node_.is()) {
switch (state_) {
case STATE_TEXT:
+ if (!items_.empty()) {
+ break;
+ }
+ // fall through
case STATE_IT:
return
(type_ == TYPE_STRING || type_ == TYPE_STRING_LIST ||
@@ -294,7 +298,9 @@ bool ValueParser::startElement(
name.equals(RTL_CONSTASCII_STRINGPARAM("it")) &&
isListType(type_) && separator_.getLength() == 0)
{
- checkEmptyPad(reader);
+ pad_.clear();
+ // before first <it>, characters are not ignored; assume they
+ // are only whitespace
state_ = STATE_IT;
return true;
}
@@ -351,7 +357,7 @@ bool ValueParser::startElement(
css::uno::Reference< css::uno::XInterface >());
}
-bool ValueParser::endElement(XmlReader const & reader) {
+bool ValueParser::endElement() {
if (!node_.is()) {
return false;
}
@@ -363,7 +369,6 @@ bool ValueParser::endElement(XmlReader const & reader) {
value = parseValue(separator_, pad_.get(), type_);
pad_.clear();
} else {
- checkEmptyPad(reader);
switch (type_) {
case TYPE_BOOLEAN_LIST:
value = convertItems< sal_Bool >();
@@ -454,17 +459,6 @@ int ValueParser::getLayer() const {
return layer_;
}
-void ValueParser::checkEmptyPad(XmlReader const & reader) const {
- if (pad_.is()) {
- throw css::uno::RuntimeException(
- (rtl::OUString(
- RTL_CONSTASCII_USTRINGPARAM(
- "mixed text and <it> elements in ")) +
- reader.getUrl()),
- css::uno::Reference< css::uno::XInterface >());
- }
-}
-
template< typename T > css::uno::Any ValueParser::convertItems() {
css::uno::Sequence< T > seq(items_.size());
for (sal_Int32 i = 0; i < seq.getLength(); ++i) {
diff --git a/configmgr/source/valueparser.hxx b/configmgr/source/valueparser.hxx
index c328fe7eddce..4e899f4632dd 100644
--- a/configmgr/source/valueparser.hxx
+++ b/configmgr/source/valueparser.hxx
@@ -61,7 +61,7 @@ public:
bool startElement(
XmlReader & reader, XmlReader::Namespace ns, Span const & name);
- bool endElement(XmlReader const & reader);
+ bool endElement();
void characters(Span const & text);
@@ -75,8 +75,6 @@ public:
rtl::OString separator_;
private:
- void checkEmptyPad(XmlReader const & reader) const;
-
template< typename T > com::sun::star::uno::Any convertItems();
enum State { STATE_TEXT, STATE_TEXT_UNICODE, STATE_IT, STATE_IT_UNICODE };
diff --git a/configmgr/source/writemodfile.cxx b/configmgr/source/writemodfile.cxx
index a8e0f77cbd2e..c2573ab67439 100644
--- a/configmgr/source/writemodfile.cxx
+++ b/configmgr/source/writemodfile.cxx
@@ -451,9 +451,9 @@ void writeNode(
void writeModifications(
Components & components, oslFileHandle handle,
- rtl::OUString const & grandparentPathRepresentation,
- rtl::OUString const & parentName, rtl::Reference< Node > const & parent,
- rtl::OUString const & nodeName, rtl::Reference< Node > const & node,
+ rtl::OUString const & parentPathRepresentation,
+ rtl::Reference< Node > const & parent, rtl::OUString const & nodeName,
+ rtl::Reference< Node > const & node,
Modifications::Node const & modifications)
{
// It is never necessary to write oor:finalized or oor:mandatory attributes,
@@ -461,27 +461,15 @@ void writeModifications(
if (modifications.children.empty()) {
OSL_ASSERT(parent.is());
// components themselves have no parent but must have children
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("<item oor:path=\""));
+ writeAttributeValue(handle, parentPathRepresentation);
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("\">"));
if (node.is()) {
- writeData(handle, RTL_CONSTASCII_STRINGPARAM("<item oor:path=\""));
- writeAttributeValue(
- handle,
- (grandparentPathRepresentation +
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")) +
- Data::createSegment(parent->getTemplateName(), parentName)));
- writeData(handle, RTL_CONSTASCII_STRINGPARAM("\">"));
writeNode(components, handle, parent, nodeName, node);
- writeData(handle, RTL_CONSTASCII_STRINGPARAM("</item>"));
} else {
- writeData(handle, RTL_CONSTASCII_STRINGPARAM("<item oor:path=\""));
switch (parent->kind()) {
case Node::KIND_LOCALIZED_PROPERTY:
- writeAttributeValue(handle, grandparentPathRepresentation);
- writeData(
- handle, RTL_CONSTASCII_STRINGPARAM("\"><prop oor:name=\""));
- writeAttributeValue(handle, parentName);
- writeData(
- handle,
- RTL_CONSTASCII_STRINGPARAM("\" oor:op=\"fuse\"><value"));
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("<value"));
if (nodeName.getLength() != 0) {
writeData(
handle, RTL_CONSTASCII_STRINGPARAM(" xml:lang=\""));
@@ -489,61 +477,44 @@ void writeModifications(
writeData(handle, RTL_CONSTASCII_STRINGPARAM("\""));
}
writeData(
- handle,
- RTL_CONSTASCII_STRINGPARAM(
- " oor:op=\"remove\"/></prop></item>"));
+ handle, RTL_CONSTASCII_STRINGPARAM(" oor:op=\"remove\"/>"));
break;
case Node::KIND_GROUP:
OSL_ASSERT(
dynamic_cast< GroupNode * >(parent.get())->isExtensible());
- writeAttributeValue(
- handle,
- (grandparentPathRepresentation +
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")) +
- Data::createSegment(
- parent->getTemplateName(), parentName)));
writeData(
- handle, RTL_CONSTASCII_STRINGPARAM("\"><prop oor:name=\""));
+ handle, RTL_CONSTASCII_STRINGPARAM("<prop oor:name=\""));
writeAttributeValue(handle, nodeName);
writeData(
handle,
- RTL_CONSTASCII_STRINGPARAM(
- "\" oor:op=\"remove\"/></item>"));
+ RTL_CONSTASCII_STRINGPARAM("\" oor:op=\"remove\"/>"));
break;
case Node::KIND_SET:
- writeAttributeValue(
- handle,
- (grandparentPathRepresentation +
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")) +
- Data::createSegment(
- parent->getTemplateName(), parentName)));
writeData(
- handle, RTL_CONSTASCII_STRINGPARAM("\"><node oor:name=\""));
+ handle, RTL_CONSTASCII_STRINGPARAM("<node oor:name=\""));
writeAttributeValue(handle, nodeName);
writeData(
handle,
- RTL_CONSTASCII_STRINGPARAM(
- "\" oor:op=\"remove\"/></item>"));
+ RTL_CONSTASCII_STRINGPARAM("\" oor:op=\"remove\"/>"));
break;
default:
OSL_ASSERT(false); // this cannot happen
break;
}
}
+ writeData(handle, RTL_CONSTASCII_STRINGPARAM("</item>"));
} else {
- rtl::OUString parentPathRep;
- if (parent.is()) { // components themselves have no parent
- parentPathRep = grandparentPathRepresentation +
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")) +
- Data::createSegment(parent->getTemplateName(), parentName);
- }
OSL_ASSERT(node.is());
+ rtl::OUString pathRep(
+ parentPathRepresentation +
+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")) +
+ Data::createSegment(node->getTemplateName(), nodeName));
for (Modifications::Node::Children::const_iterator i(
modifications.children.begin());
i != modifications.children.end(); ++i)
{
writeModifications(
- components, handle, parentPathRep, nodeName, node, i->first,
+ components, handle, pathRep, node, i->first,
node->getMember(i->first), i->second);
}
}
@@ -605,9 +576,8 @@ void writeModFile(
j != data.modifications.getRoot().children.end(); ++j)
{
writeModifications(
- components, tmp.handle, rtl::OUString(), rtl::OUString(),
- rtl::Reference< Node >(), j->first,
- Data::findNode(Data::NO_LAYER, data.components, j->first),
+ components, tmp.handle, rtl::OUString(), rtl::Reference< Node >(),
+ j->first, Data::findNode(Data::NO_LAYER, data.components, j->first),
j->second);
}
writeData(tmp.handle, RTL_CONSTASCII_STRINGPARAM("</oor:items>"));
diff --git a/configmgr/source/xcdparser.cxx b/configmgr/source/xcdparser.cxx
index 8306c692c30f..498254b35644 100644
--- a/configmgr/source/xcdparser.cxx
+++ b/configmgr/source/xcdparser.cxx
@@ -53,7 +53,7 @@ namespace css = com::sun::star;
}
-XcdParser::XcdParser(int layer, Dependencies const & dependencies, Data * data):
+XcdParser::XcdParser(int layer, Dependencies const & dependencies, Data & data):
layer_(layer), dependencies_(dependencies), data_(data), state_(STATE_START)
{}
@@ -137,7 +137,7 @@ bool XcdParser::startElement(
if (ns == XmlReader::NAMESPACE_OOR &&
name.equals(RTL_CONSTASCII_STRINGPARAM("component-data")))
{
- nestedParser_ = new XcuParser(layer_ + 1, data_, 0);
+ nestedParser_ = new XcuParser(layer_ + 1, data_, 0, 0);
nesting_ = 1;
return nestedParser_->startElement(reader, ns, name);
}
diff --git a/configmgr/source/xcdparser.hxx b/configmgr/source/xcdparser.hxx
index 2e35b3686e60..2ad8ecea7f93 100644
--- a/configmgr/source/xcdparser.hxx
+++ b/configmgr/source/xcdparser.hxx
@@ -47,7 +47,7 @@ class XcdParser: public Parser {
public:
typedef std::set< rtl::OUString > Dependencies;
- XcdParser(int layer, Dependencies const & dependencies, Data * data);
+ XcdParser(int layer, Dependencies const & dependencies, Data & data);
private:
virtual ~XcdParser();
@@ -66,7 +66,7 @@ private:
int layer_;
Dependencies const & dependencies_;
- Data * data_;
+ Data & data_;
State state_;
rtl::OUString dependency_;
rtl::Reference< Parser > nestedParser_;
diff --git a/configmgr/source/xcsparser.cxx b/configmgr/source/xcsparser.cxx
index 15141844a276..12e64ebbe171 100644
--- a/configmgr/source/xcsparser.cxx
+++ b/configmgr/source/xcsparser.cxx
@@ -60,9 +60,66 @@ namespace {
namespace css = com::sun::star;
+// Conservatively merge a template or component (and its recursive parts) into
+// an existing instance:
+void merge(
+ rtl::Reference< Node > const & original,
+ rtl::Reference< Node > const & update)
+{
+ OSL_ASSERT(
+ original.is() && update.is() && original->kind() == update->kind() &&
+ update->getFinalized() == Data::NO_LAYER);
+ if (update->getLayer() >= original->getLayer() &&
+ update->getLayer() <= original->getFinalized())
+ {
+ switch (original->kind()) {
+ case Node::KIND_PROPERTY:
+ case Node::KIND_LOCALIZED_PROPERTY:
+ case Node::KIND_LOCALIZED_VALUE:
+ break; //TODO: merge certain parts?
+ case Node::KIND_GROUP:
+ if (dynamic_cast< GroupNode * >(original.get())->isExtensible()) {
+ for (NodeMap::iterator i2(update->getMembers().begin());
+ i2 != update->getMembers().end(); ++i2)
+ {
+ NodeMap::iterator i1(
+ original->getMembers().find(i2->first));
+ if (i1 == original->getMembers().end()) {
+ if (i2->second->kind() == Node::KIND_PROPERTY) {
+ original->getMembers().insert(*i2);
+ }
+ } else if (i2->second->kind() == i1->second->kind()) {
+ merge(i1->second, i2->second);
+ }
+ }
+ }
+ break;
+ case Node::KIND_SET:
+ for (NodeMap::iterator i2(update->getMembers().begin());
+ i2 != update->getMembers().end(); ++i2)
+ {
+ NodeMap::iterator i1(original->getMembers().find(i2->first));
+ if (i1 == original->getMembers().end()) {
+ if (dynamic_cast< SetNode * >(original.get())->
+ isValidTemplate(i2->second->getTemplateName()))
+ {
+ original->getMembers().insert(*i2);
+ }
+ } else if (i2->second->kind() == i1->second->kind() &&
+ (i2->second->getTemplateName() ==
+ i1->second->getTemplateName()))
+ {
+ merge(i1->second, i2->second);
+ }
+ }
+ break;
+ }
+ }
}
-XcsParser::XcsParser(int layer, Data * data):
+}
+
+XcsParser::XcsParser(int layer, Data & data):
valueParser_(layer), data_(data), state_(STATE_START)
{}
@@ -209,7 +266,7 @@ bool XcsParser::startElement(
}
void XcsParser::endElement(XmlReader const & reader) {
- if (valueParser_.endElement(reader)) {
+ if (valueParser_.endElement()) {
return;
}
if (ignoring_ > 0) {
@@ -218,15 +275,30 @@ void XcsParser::endElement(XmlReader const & reader) {
Element top(elements_.top());
elements_.pop();
if (top.node.is()) {
- NodeMap * map;
if (elements_.empty()) {
switch (state_) {
case STATE_TEMPLATES:
- map = &data_->templates;
+ {
+ NodeMap::iterator i(data_.templates.find(top.name));
+ if (i == data_.templates.end()) {
+ data_.templates.insert(
+ NodeMap::value_type(top.name, top.node));
+ } else {
+ merge(i->second, top.node);
+ }
+ }
break;
case STATE_COMPONENT:
- map = &data_->components;
- state_ = STATE_COMPONENT_DONE;
+ {
+ NodeMap::iterator i(data_.components.find(top.name));
+ if (i == data_.components.end()) {
+ data_.components.insert(
+ NodeMap::value_type(top.name, top.node));
+ } else {
+ merge(i->second, top.node);
+ }
+ state_ = STATE_COMPONENT_DONE;
+ }
break;
default:
OSL_ASSERT(false);
@@ -235,10 +307,9 @@ void XcsParser::endElement(XmlReader const & reader) {
RTL_CONSTASCII_USTRINGPARAM("this cannot happen")),
css::uno::Reference< css::uno::XInterface >());
}
- } else {
- map = &elements_.top().node->getMembers();
- }
- if (!map->insert(NodeMap::value_type(top.name, top.node)).second) {
+ } else if (!elements_.top().node->getMembers().insert(
+ NodeMap::value_type(top.name, top.node)).second)
+ {
throw css::uno::RuntimeException(
(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("duplicate ")) +
top.name +
@@ -372,7 +443,7 @@ void XcsParser::handleNodeRef(XmlReader & reader) {
css::uno::Reference< css::uno::XInterface >());
}
rtl::Reference< Node > tmpl(
- data_->getTemplate(
+ data_.getTemplate(
valueParser_.getLayer(),
xmldata::parseTemplateReference(
component, hasNodeType, nodeType, 0)));
diff --git a/configmgr/source/xcsparser.hxx b/configmgr/source/xcsparser.hxx
index 21a124945a2e..196add9a826a 100644
--- a/configmgr/source/xcsparser.hxx
+++ b/configmgr/source/xcsparser.hxx
@@ -48,7 +48,7 @@ struct Span;
class XcsParser: public Parser {
public:
- XcsParser(int layer, Data * data);
+ XcsParser(int layer, Data & data);
private:
virtual ~XcsParser();
@@ -94,7 +94,7 @@ private:
typedef std::stack< Element > ElementStack;
ValueParser valueParser_;
- Data * data_;
+ Data & data_;
rtl::OUString componentName_;
State state_;
long ignoring_;
diff --git a/configmgr/source/xcuparser.cxx b/configmgr/source/xcuparser.cxx
index 220168c62725..77b0f747f313 100644
--- a/configmgr/source/xcuparser.cxx
+++ b/configmgr/source/xcuparser.cxx
@@ -49,6 +49,7 @@
#include "modifications.hxx"
#include "node.hxx"
#include "nodemap.hxx"
+#include "partial.hxx"
#include "path.hxx"
#include "propertynode.hxx"
#include "setnode.hxx"
@@ -65,14 +66,15 @@ namespace css = com::sun::star;
}
-XcuParser::XcuParser(int layer, Data * data, Modifications * modifications):
- valueParser_(layer), data_(data), modifications_(modifications)
-{
- if (layer == Data::NO_LAYER) {
- OSL_ASSERT(modifications_ == 0);
- modifications_ = &data_->modifications;
- }
-}
+XcuParser::XcuParser(
+ int layer, Data & data, Partial const * partial,
+ Modifications * broadcastModifications):
+ valueParser_(layer), data_(data),
+ partial_(partial), broadcastModifications_(broadcastModifications),
+ recordModifications_(layer == Data::NO_LAYER),
+ trackPath_(
+ partial_ != 0 || broadcastModifications_ != 0 || recordModifications_)
+{}
XcuParser::~XcuParser() {}
@@ -105,7 +107,7 @@ bool XcuParser::startElement(
css::uno::Reference< css::uno::XInterface >());
}
} else if (state_.top().ignore) {
- state_.push(state_.top());
+ state_.push(State(false));
} else if (!state_.top().node.is()) {
if (ns == XmlReader::NAMESPACE_NONE &&
name.equals(RTL_CONSTASCII_STRINGPARAM("item")))
@@ -209,12 +211,12 @@ bool XcuParser::startElement(
return true;
}
-void XcuParser::endElement(XmlReader const & reader) {
- if (valueParser_.endElement(reader)) {
+void XcuParser::endElement(XmlReader const &) {
+ if (valueParser_.endElement()) {
return;
}
OSL_ASSERT(!state_.empty());
- bool ignore = state_.top().ignore;
+ bool pop = state_.top().pop;
rtl::Reference< Node > insert;
rtl::OUString name;
if (state_.top().insert) {
@@ -227,10 +229,10 @@ void XcuParser::endElement(XmlReader const & reader) {
OSL_ASSERT(!state_.empty() && state_.top().node.is());
state_.top().node->getMembers()[name] = insert;
}
- if (!ignore && !modificationPath_.empty()) {
- modificationPath_.pop_back();
+ if (pop && !path_.empty()) {
+ path_.pop_back();
// </item> will pop less than <item> pushed, but that is harmless,
- // as the next <item> will reset modificationPath_
+ // as the next <item> will reset path_
}
}
@@ -328,16 +330,27 @@ void XcuParser::handleComponentData(XmlReader & reader) {
}
componentName_ = xmldata::convertFromUtf8(
Span(buf.getStr(), buf.getLength()));
+ if (trackPath_) {
+ OSL_ASSERT(path_.empty());
+ path_.push_back(componentName_);
+ if (partial_ != 0 && partial_->contains(path_) == Partial::CONTAINS_NOT)
+ {
+ state_.push(State(true)); // ignored
+ return;
+ }
+ }
rtl::Reference< Node > node(
Data::findNode(
- valueParser_.getLayer(), data_->components, componentName_));
+ valueParser_.getLayer(), data_.components, componentName_));
if (!node.is()) {
- throw css::uno::RuntimeException(
- (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("unknown component ")) +
- componentName_ +
- rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
- reader.getUrl()),
- css::uno::Reference< css::uno::XInterface >());
+ OSL_TRACE(
+ "configmgr unknown component %s in %s",
+ rtl::OUStringToOString(
+ componentName_, RTL_TEXTENCODING_UTF8).getStr(),
+ rtl::OUStringToOString(
+ reader.getUrl(), RTL_TEXTENCODING_UTF8).getStr());
+ state_.push(State(true)); // ignored
+ return;
}
switch (op) {
case OPERATION_MODIFY:
@@ -356,10 +369,6 @@ void XcuParser::handleComponentData(XmlReader & reader) {
node->getFinalized());
node->setFinalized(finalizedLayer);
state_.push(State(node, finalizedLayer < valueParser_.getLayer()));
- if (modifications_ != 0) {
- OSL_ASSERT(modificationPath_.empty());
- modificationPath_.push_back(componentName_);
- }
}
void XcuParser::handleItem(XmlReader & reader) {
@@ -386,27 +395,43 @@ void XcuParser::handleItem(XmlReader & reader) {
rtl::OUString path(xmldata::convertFromUtf8(attrPath));
int finalizedLayer;
rtl::Reference< Node > node(
- data_->resolvePathRepresentation(
- path, &modificationPath_, &finalizedLayer));
+ data_.resolvePathRepresentation(path, &path_, &finalizedLayer));
if (!node.is()) {
- //TODO: Within Components::parseModificationLayer (but only there) it
- // can rightly happen that data is read that does not match a schema
- // (that no schema exists, or that the schema specifies a different
- // type), namely if the schema was brought along by an extension that
- // has been removed or replaced; instead of taking care of that at all
- // the relevant places, as a hack, only "top-level" <item>s (that only
- // appear in modification layer data) with unknown path are filtered out
- // here.
OSL_TRACE(
- "configmgr unknown <item path=\"%s\">",
- rtl::OUStringToOString(path, RTL_TEXTENCODING_UTF8).getStr());
- state_.push(State()); // ignored
+ "configmgr unknown item %s in %s",
+ rtl::OUStringToOString(path, RTL_TEXTENCODING_UTF8).getStr(),
+ rtl::OUStringToOString(
+ reader.getUrl(), RTL_TEXTENCODING_UTF8).getStr());
+ state_.push(State(true)); // ignored
return;
}
- OSL_ASSERT(!modificationPath_.empty());
- componentName_ = modificationPath_.front();
- if (modifications_ == 0) {
- modificationPath_.clear();
+ OSL_ASSERT(!path_.empty());
+ componentName_ = path_.front();
+ if (trackPath_) {
+ if (partial_ != 0 && partial_->contains(path_) == Partial::CONTAINS_NOT)
+ {
+ state_.push(State(true)); // ignored
+ return;
+ }
+ } else {
+ path_.clear();
+ }
+ switch (node->kind()) {
+ case Node::KIND_PROPERTY:
+ case Node::KIND_LOCALIZED_VALUE:
+ OSL_TRACE(
+ "configmgr item of bad type %s in %s",
+ rtl::OUStringToOString(path, RTL_TEXTENCODING_UTF8).getStr(),
+ rtl::OUStringToOString(
+ reader.getUrl(), RTL_TEXTENCODING_UTF8).getStr());
+ state_.push(State(true)); // ignored
+ return;
+ case Node::KIND_LOCALIZED_PROPERTY:
+ valueParser_.type_ = dynamic_cast< LocalizedPropertyNode * >(
+ node.get())->getStaticType();
+ break;
+ default:
+ break;
}
state_.push(State(node, finalizedLayer < valueParser_.getLayer()));
}
@@ -483,13 +508,13 @@ void XcuParser::handlePropValue(XmlReader & reader, PropertyNode * prop) {
css::uno::Reference< css::uno::XInterface >());
}
prop->setValue(valueParser_.getLayer(), css::uno::Any());
- state_.push(State());
+ state_.push(State(false));
} else if (external.getLength() == 0) {
valueParser_.separator_ = separator;
valueParser_.start(prop);
} else {
prop->setExternal(valueParser_.getLayer(), external);
- state_.push(State());
+ state_.push(State(false));
}
}
@@ -546,11 +571,20 @@ void XcuParser::handleLocpropValue(
op = parseOperation(reader.getAttributeValue(true));
}
}
+ if (trackPath_) {
+ path_.push_back(name);
+ if (partial_ != 0 &&
+ partial_->contains(path_) != Partial::CONTAINS_NODE)
+ {
+ state_.push(State(true)); // ignored
+ return;
+ }
+ }
NodeMap::iterator i(locprop->getMembers().find(name));
if (i != locprop->getMembers().end() &&
i->second->getLayer() > valueParser_.getLayer())
{
- state_.push(State()); // ignored
+ state_.push(State(true)); // ignored
return;
}
if (nil && !locprop->isNillable()) {
@@ -563,23 +597,29 @@ void XcuParser::handleLocpropValue(
}
switch (op) {
case OPERATION_FUSE:
- if (nil) {
- if (i == locprop->getMembers().end()) {
- locprop->getMembers()[name] = new LocalizedValueNode(
- valueParser_.getLayer(), css::uno::Any());
+ {
+ bool pop = false;
+ if (nil) {
+ if (i == locprop->getMembers().end()) {
+ locprop->getMembers()[name] = new LocalizedValueNode(
+ valueParser_.getLayer(), css::uno::Any());
+ } else {
+ dynamic_cast< LocalizedValueNode * >(
+ i->second.get())->setValue(
+ valueParser_.getLayer(), css::uno::Any());
+ }
+ state_.push(State(true));
} else {
- dynamic_cast< LocalizedValueNode * >(i->second.get())->setValue(
- valueParser_.getLayer(), css::uno::Any());
+ valueParser_.separator_ = separator;
+ valueParser_.start(locprop, name);
+ pop = true;
+ }
+ if (trackPath_) {
+ recordModification();
+ if (pop) {
+ path_.pop_back();
+ }
}
- state_.push(State());
- } else {
- valueParser_.separator_ = separator;
- valueParser_.start(locprop, name);
- }
- if (modifications_ != 0) {
- modificationPath_.push_back(name);
- modifications_->add(modificationPath_);
- modificationPath_.pop_back();
}
break;
case OPERATION_REMOVE:
@@ -588,12 +628,8 @@ void XcuParser::handleLocpropValue(
if (i != locprop->getMembers().end()) {
locprop->getMembers().erase(i);
}
- state_.push(State());
- if (modifications_ != 0) {
- modificationPath_.push_back(name);
- modifications_->add(modificationPath_);
- modificationPath_.pop_back();
- }
+ state_.push(State(true));
+ recordModification();
break;
default:
throw css::uno::RuntimeException(
@@ -643,6 +679,17 @@ void XcuParser::handleGroupProp(XmlReader & reader, GroupNode * group) {
reader.getUrl()),
css::uno::Reference< css::uno::XInterface >());
}
+ if (trackPath_) {
+ path_.push_back(name);
+ //TODO: This ignores locprop values for which specific include paths
+ // exist (i.e., for which contains(locprop path) = CONTAINS_SUBNODES):
+ if (partial_ != 0 &&
+ partial_->contains(path_) != Partial::CONTAINS_NODE)
+ {
+ state_.push(State(true)); // ignored
+ return;
+ }
+ }
NodeMap::iterator i(group->getMembers().find(name));
if (i == group->getMembers().end()) {
handleUnknownGroupProp(reader, group, name, type, op, finalized);
@@ -672,17 +719,10 @@ void XcuParser::handleUnknownGroupProp(
XmlReader const & reader, GroupNode * group, rtl::OUString const & name,
Type type, Operation operation, bool finalized)
{
- if (!group->isExtensible()) {
- throw css::uno::RuntimeException(
- (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("unknown prop ")) +
- name + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
- reader.getUrl()),
- css::uno::Reference< css::uno::XInterface >());
- }
switch (operation) {
case OPERATION_REPLACE:
case OPERATION_FUSE:
- {
+ if (group->isExtensible()) {
if (type == TYPE_ERROR) {
throw css::uno::RuntimeException(
(rtl::OUString(
@@ -701,17 +741,17 @@ void XcuParser::handleUnknownGroupProp(
prop->setFinalized(valueParser_.getLayer());
}
state_.push(State(prop, name, state_.top().locked));
- if (modifications_ != 0) {
- modificationPath_.push_back(name);
- modifications_->add(modificationPath_);
- }
+ recordModification();
+ break;
}
- break;
+ // fall through
default:
OSL_TRACE(
- "ignoring modify or remove of unknown (presumably extension)"
- " property");
- state_.push(State());
+ "configmgr unknown property %s in %s",
+ rtl::OUStringToOString(name, RTL_TEXTENCODING_UTF8).getStr(),
+ rtl::OUStringToOString(
+ reader.getUrl(), RTL_TEXTENCODING_UTF8).getStr());
+ state_.push(State(true)); // ignored
break;
}
}
@@ -724,7 +764,7 @@ void XcuParser::handlePlainGroupProp(
PropertyNode * property = dynamic_cast< PropertyNode * >(
propertyIndex->second.get());
if (property->getLayer() > valueParser_.getLayer()) {
- state_.push(State()); // ignored
+ state_.push(State(true)); // ignored
return;
}
int finalizedLayer = std::min(
@@ -751,10 +791,7 @@ void XcuParser::handlePlainGroupProp(
property,
(state_.top().locked ||
finalizedLayer < valueParser_.getLayer())));
- if (modifications_ != 0) {
- modificationPath_.push_back(name);
- modifications_->add(modificationPath_);
- }
+ recordModification();
break;
case OPERATION_REMOVE:
if (!property->isExtension()) {
@@ -767,12 +804,8 @@ void XcuParser::handlePlainGroupProp(
css::uno::Reference< css::uno::XInterface >());
}
group->getMembers().erase(propertyIndex);
- state_.push(State()); // ignore children
- if (modifications_ != 0) {
- modificationPath_.push_back(name);
- modifications_->add(modificationPath_);
- modificationPath_.pop_back();
- }
+ state_.push(State(true)); // ignore children
+ recordModification();
break;
}
}
@@ -782,7 +815,7 @@ void XcuParser::handleLocalizedGroupProp(
rtl::OUString const & name, Type type, Operation operation, bool finalized)
{
if (property->getLayer() > valueParser_.getLayer()) {
- state_.push(State()); // ignored
+ state_.push(State(true)); // ignored
return;
}
int finalizedLayer = std::min(
@@ -808,9 +841,6 @@ void XcuParser::handleLocalizedGroupProp(
property,
(state_.top().locked ||
finalizedLayer < valueParser_.getLayer())));
- if (modifications_ != 0) {
- modificationPath_.push_back(name);
- }
break;
case OPERATION_REPLACE:
{
@@ -824,10 +854,7 @@ void XcuParser::handleLocalizedGroupProp(
replacement, name,
(state_.top().locked ||
finalizedLayer < valueParser_.getLayer())));
- if (modifications_ != 0) {
- modificationPath_.push_back(name);
- modifications_->add(modificationPath_);
- }
+ recordModification();
}
break;
case OPERATION_REMOVE:
@@ -876,14 +903,24 @@ void XcuParser::handleGroupNode(
reader.getUrl()),
css::uno::Reference< css::uno::XInterface >());
}
+ if (trackPath_) {
+ path_.push_back(name);
+ if (partial_ != 0 && partial_->contains(path_) == Partial::CONTAINS_NOT)
+ {
+ state_.push(State(true)); // ignored
+ return;
+ }
+ }
rtl::Reference< Node > child(
Data::findNode(valueParser_.getLayer(), group->getMembers(), name));
if (!child.is()) {
- throw css::uno::RuntimeException(
- (rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("unknown node ")) +
- name + rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" in ")) +
- reader.getUrl()),
- css::uno::Reference< css::uno::XInterface >());
+ OSL_TRACE(
+ "configmgr unknown node %s in %s",
+ rtl::OUStringToOString(name, RTL_TEXTENCODING_UTF8).getStr(),
+ rtl::OUStringToOString(
+ reader.getUrl(), RTL_TEXTENCODING_UTF8).getStr());
+ state_.push(State(true)); // ignored
+ return;
}
if (op != OPERATION_MODIFY && op != OPERATION_FUSE) {
throw css::uno::RuntimeException(
@@ -901,9 +938,6 @@ void XcuParser::handleGroupNode(
State(
child,
state_.top().locked || finalizedLayer < valueParser_.getLayer()));
- if (modifications_ != 0) {
- modificationPath_.push_back(name);
- }
}
void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
@@ -958,6 +992,14 @@ void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
reader.getUrl()),
css::uno::Reference< css::uno::XInterface >());
}
+ if (trackPath_) {
+ path_.push_back(name);
+ if (partial_ != 0 && partial_->contains(path_) == Partial::CONTAINS_NOT)
+ {
+ state_.push(State(true)); // ignored
+ return;
+ }
+ }
rtl::OUString templateName(
xmldata::parseTemplateReference(
component, hasNodeType, nodeType, &set->getDefaultTemplateName()));
@@ -972,7 +1014,7 @@ void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
css::uno::Reference< css::uno::XInterface >());
}
rtl::Reference< Node > tmpl(
- data_->getTemplate(valueParser_.getLayer(), templateName));
+ data_.getTemplate(valueParser_.getLayer(), templateName));
if (!tmpl.is()) {
throw css::uno::RuntimeException(
(rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("set member node ")) +
@@ -993,7 +1035,7 @@ void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
mandatoryLayer = std::min(mandatoryLayer, i->second->getMandatory());
i->second->setMandatory(mandatoryLayer);
if (i->second->getLayer() > valueParser_.getLayer()) {
- state_.push(State()); // ignored
+ state_.push(State(true)); // ignored
return;
}
}
@@ -1001,48 +1043,39 @@ void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
case OPERATION_MODIFY:
if (i == set->getMembers().end()) {
OSL_TRACE("ignoring modify of unknown set member node");
- state_.push(State());
+ state_.push(State(true)); // ignored
} else {
state_.push(
State(
i->second,
(state_.top().locked ||
finalizedLayer < valueParser_.getLayer())));
- if (modifications_ != 0) {
- modificationPath_.push_back(name);
- }
}
break;
case OPERATION_REPLACE:
if (state_.top().locked || finalizedLayer < valueParser_.getLayer()) {
- state_.push(State()); // ignored
+ state_.push(State(true)); // ignored
} else {
rtl::Reference< Node > member(tmpl->clone());
member->setLayer(valueParser_.getLayer());
member->setFinalized(finalizedLayer);
member->setMandatory(mandatoryLayer);
state_.push(State(member, name, false));
- if (modifications_ != 0) {
- modificationPath_.push_back(name);
- modifications_->add(modificationPath_);
- }
+ recordModification();
}
break;
case OPERATION_FUSE:
if (i == set->getMembers().end()) {
if (state_.top().locked || finalizedLayer < valueParser_.getLayer())
{
- state_.push(State()); // ignored
+ state_.push(State(true)); // ignored
} else {
rtl::Reference< Node > member(tmpl->clone());
member->setLayer(valueParser_.getLayer());
member->setFinalized(finalizedLayer);
member->setMandatory(mandatoryLayer);
state_.push(State(member, name, false));
- if (modifications_ != 0) {
- modificationPath_.push_back(name);
- modifications_->add(modificationPath_);
- }
+ recordModification();
}
} else {
state_.push(
@@ -1050,9 +1083,6 @@ void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
i->second,
(state_.top().locked ||
finalizedLayer < valueParser_.getLayer())));
- if (modifications_ != 0) {
- modificationPath_.push_back(name);
- }
}
break;
case OPERATION_REMOVE:
@@ -1064,14 +1094,19 @@ void XcuParser::handleSetNode(XmlReader & reader, SetNode * set) {
{
set->getMembers().erase(i);
}
- state_.push(State());
- if (modifications_ != 0) {
- modificationPath_.push_back(name);
- modifications_->add(modificationPath_);
- modificationPath_.pop_back();
- }
+ state_.push(State(true));
+ recordModification();
break;
}
}
+void XcuParser::recordModification() {
+ if (broadcastModifications_ != 0) {
+ broadcastModifications_->add(path_);
+ }
+ if (recordModifications_) {
+ data_.modifications.add(path_);
+ }
+}
+
}
diff --git a/configmgr/source/xcuparser.hxx b/configmgr/source/xcuparser.hxx
index 21806edebe9c..64108451b4ef 100644
--- a/configmgr/source/xcuparser.hxx
+++ b/configmgr/source/xcuparser.hxx
@@ -49,6 +49,7 @@ namespace configmgr {
class GroupNode;
class LocalizedPropertyNode;
class Modifications;
+class Partial;
class PropertyNode;
class SetNode;
struct Data;
@@ -56,7 +57,9 @@ struct Span;
class XcuParser: public Parser {
public:
- XcuParser(int layer, Data * data, Modifications * modifications);
+ XcuParser(
+ int layer, Data & data, Partial const * partial,
+ Modifications * broadcastModifications);
private:
virtual ~XcuParser();
@@ -105,36 +108,44 @@ private:
void handleSetNode(XmlReader & reader, SetNode * set);
+ void recordModification();
+
struct State {
rtl::Reference< Node > node; // empty iff ignore or <items>
rtl::OUString name; // empty and ignored if !insert
bool ignore;
bool insert;
bool locked;
+ bool pop;
- inline State(): ignore(true), insert(false), locked(false) {}
+ inline State(bool thePop):
+ ignore(true), insert(false), locked(false), pop(thePop)
+ {}
inline State(rtl::Reference< Node > const & theNode, bool theLocked):
- node(theNode), ignore(false), insert(false), locked(theLocked)
+ node(theNode), ignore(false), insert(false), locked(theLocked),
+ pop(true)
{}
inline State(
rtl::Reference< Node > const & theNode,
rtl::OUString const & theName, bool theLocked):
node(theNode), name(theName), ignore(false), insert(true),
- locked(theLocked)
+ locked(theLocked), pop(true)
{}
};
typedef std::stack< State > StateStack;
ValueParser valueParser_;
- Data * data_;
- Modifications * modifications_;
+ Data & data_;
+ Partial const * partial_;
+ Modifications * broadcastModifications_;
+ bool recordModifications_;
+ bool trackPath_;
rtl::OUString componentName_;
StateStack state_;
- Path modificationPath_;
- rtl::OUString path_;
+ Path path_;
};
}
diff --git a/configure.in b/configure.in
index 91ff5806fbe5..928e08275213 100644
--- a/configure.in
+++ b/configure.in
@@ -550,6 +550,9 @@ AC_ARG_WITH(system-lpsolve,
AC_ARG_WITH(system-cppunit,
[ --with-system-cppunit Use cppunit already on system
],,)
+AC_ARG_WITH(system-redland,
+[ --with-system-redland Use redland library already on system
+],,)
AC_ARG_WITH(system-mozilla,
[ --with-system-mozilla Use mozilla already on system. Note that some
components cannot be built against a contemporary
@@ -1404,6 +1407,9 @@ fi
AC_MSG_RESULT($GCC_HOME)
AC_SUBST(GCC_HOME)
+save_CC=$CC
+save_CXX=$CXX
+
if test -n "$with_gcc_home"; then
if test -z "$CC"; then
CC="$with_gcc_home/bin/gcc"
@@ -1431,7 +1437,6 @@ if test \( "$_os" != "WINNT" -o "$WITH_MINGWIN" = "yes" \) -a "$GCC" = "yes"; th
AC_MSG_CHECKING([the GNU gcc compiler version])
_gcc_version=`$CC -dumpversion`
_gcc_major=`echo $_gcc_version | $AWK -F. '{ print \$1 }'`
- _gcc_longver=`echo $_gcc_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
GCCVER=`echo $_gcc_version | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
if test "$_gcc_major" -lt "3"; then
@@ -1443,7 +1448,22 @@ if test \( "$_os" != "WINNT" -o "$WITH_MINGWIN" = "yes" \) -a "$GCC" = "yes"; th
fi
fi
fi
- AC_MSG_RESULT([checked (gcc $_gcc_version)])
+ if test "$_os" = "Darwin" -a "$GCCVER" -ge "040100" ; then
+ if test -z "$save_CC" -a -x "$GCC_HOME/bin/gcc-4.0" ; then
+ CC=$GCC_HOME/bin/gcc-4.0
+ GCCVER2=`"$CC" -dumpversion | $AWK -F. '{ print \$1*10000+\$2*100+\$3 }'`
+ if test "$GCCVER2" -ge "040000" -a "$GCCVER2" -lt "040100" ; then
+ GCCVER=$GCCVER2
+ fi
+ fi
+ if test "$GCCVER" -ge "040100" ; then
+ AC_MSG_ERROR([You need to use the gcc-4.0 compiler (gcc $_gcc_version won't work with the MacOSX10.4u.sdk) - set CC accordingly])
+ else
+ AC_MSG_RESULT([implicitly using CC=$CC])
+ fi
+ else
+ AC_MSG_RESULT([checked (gcc $_gcc_version)])
+ fi
if test "$_os" = "SunOS"; then
AC_MSG_CHECKING([gcc linker])
if $CC -Wl,--version 2>&1 |head -n 1| grep -v GNU > /dev/null;then
@@ -2048,14 +2068,27 @@ if test "$GXX" = "yes"; then
AC_MSG_CHECKING([the GNU C++ compiler version])
_gpp_version=`$CXX -dumpversion`
- _gpp_major=`echo $_gpp_version | $AWK -F. '{ print \$1 }'`
- _gpp_minor=`echo $_gpp_version | $AWK -F. '{ print \$2 }'`
-
- AC_MSG_RESULT([checked (g++ $_gpp_version)])
+ _gpp_majmin=`echo $_gpp_version | $AWK -F. '{ print \$1*100+\$2 }'`
+
+ if test "$_os" = "Darwin" -a "$_gpp_majmin" -ge "401" ; then
+ if test -z "$save_CXX" -a -x "$GCC_HOME/bin/g++-4.0" ; then
+ CXX=$GCC_HOME/bin/g++-4.0
+ _gpp_majmin_2=`"$CXX" -dumpversion | $AWK -F. '{ print \$1*100+\$2 }'`
+ if test "$_gpp_majmin_2" -ge "400" -a "$_gpp_majmin_2" -lt "401" ; then
+ _gpp_majmin=$_gpp_majmin_2
+ fi
+ fi
+ if test "$_gpp_majmin" -ge "401" ; then
+ AC_MSG_ERROR([You need to use the g++-4.0 compiler (g++ $_gpp_version won't work with the MacOSX10.4u.sdk) - set CXX accordingly])
+ else
+ AC_MSG_RESULT([implicitly using CXX=$CXX])
+ fi
+ else
+ AC_MSG_RESULT([checked (g++ $_gpp_version)])
+ fi
- if test "$_gpp_major" = "3"; then
- if test "$_gpp_minor" = "4"; then
- AC_MSG_CHECKING([whether $CXX has the enum bug])
+ if test "$_gpp_majmin" = "304"; then
+ AC_MSG_CHECKING([whether $CXX has the enum bug])
AC_TRY_RUN([
extern "C" void abort (void);
extern "C" void exit (int status);
@@ -2078,7 +2111,6 @@ main (void)
return 0;
}
],[AC_MSG_ERROR([your version of the GNU C++ compile has a bug which prevents OpenOffice.org from being compiled correctly - please check http://gcc.gnu.org/ml/gcc-patches/2004-07/msg00968.html for details.])], [AC_MSG_RESULT([no])])
- fi
fi
fi
@@ -2218,21 +2250,6 @@ if test "$_os" = "SunOS"; then
fi
fi
dnl ===================================================================
-dnl Extra checking for the DARWIN compiler
-dnl ===================================================================
-if test "$_os" = "Darwin"; then
- dnl c++ packaged with cc (gcc) for Macosx
- if test "$CC" = "cc"; then
- AC_MSG_CHECKING([Macosx c++ Compiler])
- if test "$CXX" != "c++"; then
- AC_MSG_WARN([Macosx C++ was not found])
- echo "Macosx C++ was not found" >> warn
- else
- AC_MSG_RESULT([checked])
- fi
- fi
-fi
-dnl ===================================================================
dnl Extra checking for the OSF compiler
dnl ===================================================================
if test "$_os" = "OSF1"; then
@@ -3726,26 +3743,25 @@ AC_SUBST(LIBXML_LIBS)
dnl ===================================================================
dnl Check for system python
dnl ===================================================================
+AC_MSG_CHECKING([which python to use])
if test "$_os" = "Darwin" && test "$with_system_python" != "no"; then
with_system_python=yes
-fi
-AC_MSG_CHECKING([which python to use])
-if test -n "$with_system_python" -o -n "$with_system_libs" && \
+ AC_MSG_RESULT([compiling against MacOSX10.4u.sdk (python version 2.3)])
+ PYTHON_CFLAGS="-I/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/Python.framework/Versions/2.3/include/python2.3"
+ PYTHON_LIBS="-framework Python"
+elif test -n "$with_system_python" -o -n "$with_system_libs" && \
test "$with_system_python" != "no"; then
- SYSTEM_PYTHON=YES
+ with_system_python=yes
AC_MSG_RESULT([external])
AM_PATH_PYTHON([2.2])
python_include=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('INCLUDEPY');"`
python_version=`$PYTHON -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('VERSION');"`
PYTHON_CFLAGS="-I$python_include"
-
- if test "$_os" = "Darwin"; then
- PYTHON_LIBS="-framework Python"
- else
- PYTHON_LIBS="-lpython$python_version"
- fi
-
+ PYTHON_LIBS="-lpython$python_version"
+fi
+if test "$with_system_python" = "yes" ; then
+ SYSTEM_PYTHON=YES
dnl check if the headers really work:
save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $PYTHON_CFLAGS"
@@ -5004,16 +5020,12 @@ dnl ===================================================================
dnl Check for system redland
dnl ===================================================================
AC_MSG_CHECKING([which redland library to use])
-dnl if test -n "$with_system_redland" -o -n "$with_system_libs" && \
-dnl test "$with_system_redland" != "no"; then
-dnl mst: NOTE: right now we need patches against redland
-dnl so we only enable system redland if explicitly requested
-dnl if next version includes patches, insert version check here
-if test -n "$with_system_redland" && \
+if test -n "$with_system_redland" -o -n "$with_system_libs" && \
test "$with_system_redland" != "no"; then
AC_MSG_RESULT([external])
SYSTEM_REDLAND=YES
- PKG_CHECK_MODULES(REDLAND, redland)
+ dnl versions before 1.0.8 write RDF/XML that is useless for ODF (@xml:base)
+ PKG_CHECK_MODULES(REDLAND, redland >= 1.0.8)
else
AC_MSG_RESULT([internal])
BUILD_TYPE="$BUILD_TYPE REDLAND"
diff --git a/crashrep/prj/d.lst b/crashrep/prj/d.lst
index c7f78c8ca0c7..a53aacc4659c 100755
--- a/crashrep/prj/d.lst
+++ b/crashrep/prj/d.lst
@@ -1,4 +1,3 @@
..\%__SRC%\bin\soreport.exe %_DEST%\bin%_EXT%\crashrep.exe
..\%__SRC%\bin\soreport.exe.manifest %_DEST%\bin%_EXT%\crashrep.exe.manifest
-..\%__SRC%\bin\crash_report.bin %_DEST%\bin%_EXT%\crash_report.bin
-..\%__SRC%\misc\crash_report.sh %_DEST%\bin%_EXT%\crash_report
+..\%__SRC%\bin\crashrep %_DEST%\bin%_EXT%\crashrep
diff --git a/crashrep/source/unx/makefile.mk b/crashrep/source/unx/makefile.mk
index fb0465d329fc..8383f682443c 100755
--- a/crashrep/source/unx/makefile.mk
+++ b/crashrep/source/unx/makefile.mk
@@ -28,7 +28,7 @@
PRJ=..$/..
PRJNAME=crashrep
-TARGET=crash_report.bin
+TARGET=crashrep
TARGETTYPE=CUI
ENABLE_EXCEPTIONS=TRUE
@@ -63,8 +63,6 @@ APP1STDLIBS+=-ldl -lnsl
APP1STDLIBS+=-lsocket
.ENDIF
-UNIXTEXT = $(MISC)/crash_report.sh
-
.ENDIF # "$(ENABLE_CRASHDUMP)" != "" || "$(PRODUCT)" == ""
# --- Targets ------------------------------------------------------
diff --git a/cui/source/dialogs/hldoctp.cxx b/cui/source/dialogs/hldoctp.cxx
index d8e5878c3a8e..a87d7710f484 100644
--- a/cui/source/dialogs/hldoctp.cxx
+++ b/cui/source/dialogs/hldoctp.cxx
@@ -39,7 +39,6 @@
sal_Char __READONLY_DATA sHash[] = "#";
sal_Char __READONLY_DATA sFileScheme[] = INET_FILE_SCHEME;
-sal_Char __READONLY_DATA sPortalFileScheme[] = "vnd.sun.star.wfs://";
sal_Char __READONLY_DATA sNewsSRVScheme[] = "news://";
// TODO news:// is nonsense
sal_Char __READONLY_DATA sHTTPScheme[] = INET_HTTP_SCHEME;
@@ -170,8 +169,7 @@ void SvxHyperlinkDocTp::GetCurentItemData ( String& aStrURL, String& aStrName,
// get data from standard-fields
aStrURL = GetCurrentURL();
- if( aStrURL.EqualsIgnoreCaseAscii( sFileScheme ) ||
- aStrURL.EqualsIgnoreCaseAscii( sPortalFileScheme ) )
+ if( aStrURL.EqualsIgnoreCaseAscii( sFileScheme ) )
aStrURL=aEmptyStr;
GetDataFromCommonFields( aStrName, aStrIntName, aStrFrame, eMode );
@@ -212,8 +210,7 @@ IMPL_LINK ( SvxHyperlinkDocTp, ClickFileopenHdl_Impl, void *, EMPTYARG )
com::sun::star::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0,
GetParent() );
String aOldURL( GetCurrentURL() );
- if( aOldURL.EqualsIgnoreCaseAscii( sFileScheme, 0, sizeof( sFileScheme ) - 1 ) ||
- aOldURL.EqualsIgnoreCaseAscii( sPortalFileScheme, 0, sizeof( sFileScheme ) - 1 ) )
+ if( aOldURL.EqualsIgnoreCaseAscii( sFileScheme, 0, sizeof( sFileScheme ) - 1 ) )
{
aDlg.SetDisplayDirectory( aOldURL );
}
@@ -250,15 +247,13 @@ IMPL_LINK ( SvxHyperlinkDocTp, ClickTargetHdl_Impl, void *, EMPTYARG )
if ( GetPathType ( maStrURL ) == Type_ExistsFile ||
maStrURL == aEmptyStr ||
maStrURL.EqualsIgnoreCaseAscii( sFileScheme ) ||
- maStrURL.EqualsIgnoreCaseAscii( sPortalFileScheme ) ||
maStrURL.SearchAscii( sHash ) == 0 )
{
mpMarkWnd->SetError( LERR_NOERROR );
EnterWait();
- if ( maStrURL.EqualsIgnoreCaseAscii( sFileScheme ) ||
- maStrURL.EqualsIgnoreCaseAscii( sPortalFileScheme ) )
+ if ( maStrURL.EqualsIgnoreCaseAscii( sFileScheme ) )
mpMarkWnd->RefreshTree ( aEmptyStr );
else
mpMarkWnd->RefreshTree ( maStrURL );
@@ -305,8 +300,7 @@ IMPL_LINK ( SvxHyperlinkDocTp, TimeoutHdl_Impl, Timer *, EMPTYARG )
{
EnterWait();
- if ( maStrURL.EqualsIgnoreCaseAscii( sFileScheme ) ||
- maStrURL.EqualsIgnoreCaseAscii( sPortalFileScheme ) )
+ if ( maStrURL.EqualsIgnoreCaseAscii( sFileScheme ) )
mpMarkWnd->RefreshTree ( aEmptyStr );
else
mpMarkWnd->RefreshTree ( maStrURL );
diff --git a/cui/source/options/treeopt.cxx b/cui/source/options/treeopt.cxx
index f1651b0bd1dd..b63d9afc647e 100644
--- a/cui/source/options/treeopt.cxx
+++ b/cui/source/options/treeopt.cxx
@@ -129,6 +129,13 @@
#include <svx/drawitem.hxx>
#include <rtl/uri.hxx>
+#ifdef LINUX
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#endif
+
using namespace ::com::sun::star;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star::container;
@@ -2195,6 +2202,28 @@ void OfaTreeOptionsDialog::Initialize( const Reference< XFrame >& _xFrame )
if ( nPageId == RID_SVXPAGE_INET_MOZPLUGIN )
continue;
#endif
+#ifdef LINUX
+ // Disable Mozilla Plug-in tab-page on Linux if we find a
+ // globally installed plugin
+ if ( nPageId == RID_SVXPAGE_INET_MOZPLUGIN ) {
+ struct stat sb;
+ char *p;
+ bool bHaveSystemWidePlugin = false;
+ char mozpaths[]="/usr/lib/mozilla/plugins/libnpsoplugin.so:/usr/lib/firefox/plugins/libnpsoplugin.so:/usr/lib/mozilla-firefox/plugins/libnpsoplugin.so:/usr/lib/iceweasel/plugins/libnpsoplugin.so:/usr/lib/iceape/plugins/libnpsoplugin.so:/usr/lib/browser-plugins/libnpsoplugin.so:/usr/lib64/browser-plugins/libnpsoplugin.so";
+
+ p = strtok(mozpaths, ":");
+ while (p != NULL) {
+ if (stat(p, &sb) != -1) {
+ bHaveSystemWidePlugin = true;
+ break;
+ }
+ p = strtok(NULL, ":");
+ }
+
+ if (bHaveSystemWidePlugin == true)
+ continue;
+ }
+#endif
AddTabPage( nPageId, rInetArray.GetString(i), nGroup );
}
}
diff --git a/cui/source/tabpages/chardlg.cxx b/cui/source/tabpages/chardlg.cxx
index 696c1c62cb23..1f166b8f8d41 100644
--- a/cui/source/tabpages/chardlg.cxx
+++ b/cui/source/tabpages/chardlg.cxx
@@ -3386,11 +3386,6 @@ USHORT* SvxCharPositionPage::GetRanges()
}
// -----------------------------------------------------------------------
-#define ENABLE_AND_CHECK( aCheckBox ) \
- if ( !aCheckBox.IsEnabled() ) \
- aCheckBox.Enable(); \
- aCheckBox.Check( TRUE )
-
void SvxCharPositionPage::Reset( const SfxItemSet& rSet )
{
String sUser = GetUserData();
@@ -3431,6 +3426,7 @@ void SvxCharPositionPage::Reset( const SfxItemSet& rSet )
m_aFontSizeEdit.Enable();
short nFac;
+ sal_Bool bAutomatic(sal_False);
if ( nEsc > 0 )
{
@@ -3438,8 +3434,8 @@ void SvxCharPositionPage::Reset( const SfxItemSet& rSet )
m_aHighPosBtn.Check( TRUE );
if ( nEsc == DFLT_ESC_AUTO_SUPER )
{
- ENABLE_AND_CHECK( m_aHighLowRB );
nEsc = DFLT_ESC_SUPER;
+ bAutomatic = sal_True;
}
}
else
@@ -3448,10 +3444,15 @@ void SvxCharPositionPage::Reset( const SfxItemSet& rSet )
m_aLowPosBtn.Check( TRUE );
if ( nEsc == DFLT_ESC_AUTO_SUB )
{
- ENABLE_AND_CHECK( m_aHighLowRB );
nEsc = DFLT_ESC_SUB;
+ bAutomatic = sal_True;
}
}
+ if (!m_aHighLowRB.IsEnabled())
+ {
+ m_aHighLowRB.Enable();
+ }
+ m_aHighLowRB.Check(bAutomatic);
if ( m_aHighLowRB.IsChecked() )
{
diff --git a/dbaccess/source/core/api/KeySet.cxx b/dbaccess/source/core/api/KeySet.cxx
index 04bef19278b1..9d5188ceffc4 100644
--- a/dbaccess/source/core/api/KeySet.cxx
+++ b/dbaccess/source/core/api/KeySet.cxx
@@ -367,15 +367,17 @@ void OKeySet::construct(const Reference< XResultSet>& _xDriverSet,const ::rtl::O
}
Sequence< ::rtl::OUString> aBestColumnNames;
- if ( aBestRowColumnNames.empty() )
+ if ( !aBestRowColumnNames.empty() )
{
- if ( xKeyColumns.is() )
- aBestColumnNames = xKeyColumns->getElementNames();
- }
- else
aBestColumnNames = Sequence< ::rtl::OUString>(&aBestRowColumnNames[0],aBestRowColumnNames.size());
+ ::dbaccess::getColumnPositions(xSup->getColumns(),aBestColumnNames,m_sUpdateTableName,(*m_pKeyColumnNames));
+ }
- ::dbaccess::getColumnPositions(xSup->getColumns(),aBestColumnNames,m_sUpdateTableName,(*m_pKeyColumnNames));
+ if (m_pKeyColumnNames->empty() && xKeyColumns.is())
+ {
+ aBestColumnNames = xKeyColumns->getElementNames();
+ ::dbaccess::getColumnPositions(xSup->getColumns(),aBestColumnNames,m_sUpdateTableName,(*m_pKeyColumnNames));
+ }
::dbaccess::getColumnPositions(xSup->getColumns(),xSourceColumns->getElementNames(),m_sUpdateTableName,(*m_pColumnNames));
::dbaccess::getColumnPositions(xSup->getColumns(),aParameterColumns,m_sUpdateTableName,(*m_pParameterNames));
diff --git a/default_images/framework/res/folder_32.png b/default_images/framework/res/folder_32.png
index 95efe64263df..1c7774b28571 100644
--- a/default_images/framework/res/folder_32.png
+++ b/default_images/framework/res/folder_32.png
Binary files differ
diff --git a/default_images/framework/res/folder_32_hc.png b/default_images/framework/res/folder_32_hc.png
new file mode 100644
index 000000000000..04513f55b9f1
--- /dev/null
+++ b/default_images/framework/res/folder_32_hc.png
Binary files differ
diff --git a/default_images/framework/res/templates_32.png b/default_images/framework/res/templates_32.png
new file mode 100644
index 000000000000..584c3b2a28ac
--- /dev/null
+++ b/default_images/framework/res/templates_32.png
Binary files differ
diff --git a/default_images/framework/res/templates_32_hc.png b/default_images/framework/res/templates_32_hc.png
new file mode 100644
index 000000000000..de0a9f5b1a5a
--- /dev/null
+++ b/default_images/framework/res/templates_32_hc.png
Binary files differ
diff --git a/default_images/res/odb_32_hc.png b/default_images/res/odb_32_hc.png
new file mode 100644
index 000000000000..70068a091c9c
--- /dev/null
+++ b/default_images/res/odb_32_hc.png
Binary files differ
diff --git a/default_images/res/odf_32_hc.png b/default_images/res/odf_32_hc.png
new file mode 100644
index 000000000000..b63b9d7450cb
--- /dev/null
+++ b/default_images/res/odf_32_hc.png
Binary files differ
diff --git a/default_images/res/odg_32_hc.png b/default_images/res/odg_32_hc.png
new file mode 100644
index 000000000000..ee8a0d1cf52a
--- /dev/null
+++ b/default_images/res/odg_32_hc.png
Binary files differ
diff --git a/default_images/res/odp_32_hc.png b/default_images/res/odp_32_hc.png
new file mode 100644
index 000000000000..7372ba53e266
--- /dev/null
+++ b/default_images/res/odp_32_hc.png
Binary files differ
diff --git a/default_images/res/ods_32_hc.png b/default_images/res/ods_32_hc.png
new file mode 100644
index 000000000000..fde5d70e18de
--- /dev/null
+++ b/default_images/res/ods_32_hc.png
Binary files differ
diff --git a/default_images/res/odt_32_hc.png b/default_images/res/odt_32_hc.png
new file mode 100644
index 000000000000..e9487262f8a5
--- /dev/null
+++ b/default_images/res/odt_32_hc.png
Binary files differ
diff --git a/desktop/scripts/soffice.sh b/desktop/scripts/soffice.sh
index 73653092f59c..ebbdeb9eabdb 100644
--- a/desktop/scripts/soffice.sh
+++ b/desktop/scripts/soffice.sh
@@ -114,10 +114,6 @@ if [ -f /etc/adabasrc ]; then
. /etc/adabasrc
fi
-# Set PATH so that crash_report is found:
-PATH=$sd_prog${PATH+:$PATH}
-export PATH
-
# execute soffice binary
"$sd_prog/$sd_binary" "$@" &
trap 'kill -9 $!' TERM
diff --git a/desktop/scripts/unopkg.sh b/desktop/scripts/unopkg.sh
index 9e74f34d0e57..0fe319735c06 100644
--- a/desktop/scripts/unopkg.sh
+++ b/desktop/scripts/unopkg.sh
@@ -70,10 +70,6 @@ unset XENVIRONMENT
# uncomment line below if you encounter problems starting soffice on your system
# SAL_NO_XINITTHREADS=true; export SAL_NO_XINITTHREADS
-# Set PATH so that crash_report is found:
-PATH=$sd_prog${PATH+:$PATH}
-export PATH
-
# execute binary
exec "$sd_prog/unopkg.bin" "$@" \
"-env:INIFILENAME=vnd.sun.star.pathname:$sd_prog/redirectrc"
diff --git a/desktop/source/app/appfirststart.cxx b/desktop/source/app/appfirststart.cxx
index c48805fcfeb7..2f0d4ab9e538 100644
--- a/desktop/source/app/appfirststart.cxx
+++ b/desktop/source/app/appfirststart.cxx
@@ -108,6 +108,9 @@ OUString Desktop::GetLicensePath()
/* Check if we need to accept license. */
sal_Bool Desktop::LicenseNeedsAcceptance()
{
+ // Don't show a license
+ return sal_False;
+/*
sal_Bool bShowLicense = sal_True;
sal_Int32 nOpenSourceContext = 0;
try
@@ -122,6 +125,7 @@ sal_Bool Desktop::LicenseNeedsAcceptance()
bShowLicense = sal_False;
return bShowLicense;
+*/
}
/* Local function - was the wizard completed already? */
diff --git a/desktop/source/app/makefile.mk b/desktop/source/app/makefile.mk
index d9db7c163481..83bec9011283 100644
--- a/desktop/source/app/makefile.mk
+++ b/desktop/source/app/makefile.mk
@@ -65,6 +65,7 @@ SHL1LIBS = $(SLB)$/mig.lib
SHL1STDLIBS = \
$(COMPHELPERLIB) \
+ $(CONFIGMGRLIB) \
$(CPPUHELPERLIB) \
$(CPPULIB) \
$(I18NISOLANGLIB) \
diff --git a/desktop/source/deployment/manager/dp_manager.cxx b/desktop/source/deployment/manager/dp_manager.cxx
index 165efbaeca5a..3f13cb021aae 100644
--- a/desktop/source/deployment/manager/dp_manager.cxx
+++ b/desktop/source/deployment/manager/dp_manager.cxx
@@ -542,11 +542,19 @@ OUString PackageManagerImpl::insertToActivationLayer(
{
// inflate content:
::rtl::OUStringBuffer buf;
- buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("vnd.sun.star.zip://") );
- buf.append( ::rtl::Uri::encode( sourceContent.getURL(),
- rtl_UriCharClassRegName,
- rtl_UriEncodeIgnoreEscapes,
- RTL_TEXTENCODING_UTF8 ) );
+ if (!sourceContent.isFolder())
+ {
+ buf.appendAscii( RTL_CONSTASCII_STRINGPARAM("vnd.sun.star.zip://") );
+ buf.append( ::rtl::Uri::encode( sourceContent.getURL(),
+ rtl_UriCharClassRegName,
+ rtl_UriEncodeIgnoreEscapes,
+ RTL_TEXTENCODING_UTF8 ) );
+ }
+ else
+ {
+ //Folder. No need to unzip, just copy
+ buf.append(sourceContent.getURL());
+ }
buf.append( static_cast<sal_Unicode>('/') );
sourceContent = ::ucbhelper::Content(
buf.makeStringAndClear(), xCmdEnv );
diff --git a/desktop/source/deployment/misc/dp_platform.cxx b/desktop/source/deployment/misc/dp_platform.cxx
index bb93f78689b6..4a144f3fdf20 100644
--- a/desktop/source/deployment/misc/dp_platform.cxx
+++ b/desktop/source/deployment/misc/dp_platform.cxx
@@ -47,8 +47,11 @@
#define PLATFORM_LINUX_MIPS_EL "linux_mips_el"
#define PLATFORM_LINUX_MIPS_EB "linux_mips_eb"
#define PLATFORM_LINUX_IA64 "linux_ia64"
+#define PLATFORM_LINUX_M68K "linux_m68k"
#define PLATFORM_LINUX_S390 "linux_s390"
#define PLATFORM_LINUX_S390x "linux_s390x"
+#define PLATFORM_LINUX_HPPA "linux_hppa"
+#define PLATFORM_LINUX_ALPHA "linux_alpha"
@@ -142,10 +145,16 @@ namespace
ret = checkOSandCPU(OUSTR("Linux"), OUSTR("MIPS_EB"));
else if (token.equals(OUSTR(PLATFORM_LINUX_IA64)))
ret = checkOSandCPU(OUSTR("Linux"), OUSTR("IA64"));
+ else if (token.equals(OUSTR(PLATFORM_LINUX_M68K)))
+ ret = checkOSandCPU(OUSTR("Linux"), OUSTR("M68K"));
else if (token.equals(OUSTR(PLATFORM_LINUX_S390)))
ret = checkOSandCPU(OUSTR("Linux"), OUSTR("S390"));
else if (token.equals(OUSTR(PLATFORM_LINUX_S390x)))
ret = checkOSandCPU(OUSTR("Linux"), OUSTR("S390x"));
+ else if (token.equals(OUSTR(PLATFORM_LINUX_HPPA)))
+ ret = checkOSandCPU(OUSTR("Linux"), OUSTR("HPPA"));
+ else if (token.equals(OUSTR(PLATFORM_LINUX_ALPHA)))
+ ret = checkOSandCPU(OUSTR("Linux"), OUSTR("ALPHA"));
else if (token.equals(OUSTR(PLATFORM_SOLARIS_SPARC)))
ret = checkOSandCPU(OUSTR("Solaris"), OUSTR("SPARC"));
else if (token.equals(OUSTR(PLATFORM_SOLARIS_SPARC64)))
diff --git a/desktop/source/deployment/registry/dp_registry.cxx b/desktop/source/deployment/registry/dp_registry.cxx
index c6572364aac0..c56131a1015c 100644
--- a/desktop/source/deployment/registry/dp_registry.cxx
+++ b/desktop/source/deployment/registry/dp_registry.cxx
@@ -181,6 +181,7 @@ OUString normalizeMediaType( OUString const & mediaType )
}
//______________________________________________________________________________
+
void PackageRegistryImpl::insertBackend(
Reference<deployment::XPackageRegistry> const & xBackend )
{
@@ -201,7 +202,8 @@ void PackageRegistryImpl::insertBackend(
::std::pair<t_string2registry::iterator, bool> mb_insertion(
m_mediaType2backend.insert( t_string2registry::value_type(
mediaType, xBackend ) ) );
- if (mb_insertion.second) {
+ if (mb_insertion.second)
+ {
// add parameterless media-type, too:
sal_Int32 semi = mediaType.indexOf( ';' );
if (semi >= 0) {
@@ -210,9 +212,13 @@ void PackageRegistryImpl::insertBackend(
mediaType.copy( 0, semi ), xBackend ) );
}
const OUString fileFilter( xPackageType->getFileFilter() );
+ //The package backend shall also be called to determine the mediatype
+ //(XPackageRegistry.bindPackage) when the URL points to a directory.
+ const bool bExtension = mediaType.equals(OUSTR("application/vnd.sun.star.package-bundle"));
if (fileFilter.getLength() == 0 ||
fileFilter.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("*.*") ) ||
- fileFilter.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("*") ))
+ fileFilter.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM("*") ) ||
+ bExtension)
{
m_ambiguousBackends.insert( xBackend );
}
@@ -351,7 +357,10 @@ Reference<deployment::XPackageRegistry> PackageRegistryImpl::create(
}
}
- // insert bundle be:
+ // Insert bundle back-end.
+ // Always register as last, because we want to add extensions also as folders
+ // and as a default we accept every folder, which was not recognized by the other
+ // backends.
that->insertBackend(
::dp_registry::backend::bundle::create(
that, context, cachePath, readOnly, xComponentContext ) );
@@ -445,7 +454,8 @@ Reference<deployment::XPackage> PackageRegistryImpl::bindPackage(
{
::ucbhelper::Content ucbContent;
if (create_ucb_content(
- &ucbContent, url, xCmdEnv, false /* no throw */ ))
+ &ucbContent, url, xCmdEnv, false /* no throw */ )
+ && !ucbContent.isFolder())
{
OUString title( ucbContent.getPropertyValue(
StrTitle::get() ).get<OUString>() );
diff --git a/desktop/source/deployment/registry/package/dp_package.cxx b/desktop/source/deployment/registry/package/dp_package.cxx
index e45f7fb7ef73..b0b4a918c7a3 100644
--- a/desktop/source/deployment/registry/package/dp_package.cxx
+++ b/desktop/source/deployment/registry/package/dp_package.cxx
@@ -287,7 +287,7 @@ BackendImpl::BackendImpl(
m_xBundleTypeInfo->getShortDescription(),
RID_IMG_DEF_PACKAGE_BUNDLE,
RID_IMG_DEF_PACKAGE_BUNDLE_HC ) ),
- m_typeInfos( 2 )
+ m_typeInfos(2)
{
m_typeInfos[ 0 ] = m_xBundleTypeInfo;
m_typeInfos[ 1 ] = m_xLegacyBundleTypeInfo;
@@ -342,17 +342,32 @@ Reference<deployment::XPackage> BackendImpl::bindPackage_(
::ucbhelper::Content ucbContent;
if (create_ucb_content( &ucbContent, url, xCmdEnv ))
{
- const OUString title( ucbContent.getPropertyValue(
- StrTitle::get() ).get<OUString>() );
- if (title.endsWithIgnoreAsciiCaseAsciiL(
- RTL_CONSTASCII_STRINGPARAM(".oxt") ) ||
- title.endsWithIgnoreAsciiCaseAsciiL(
- RTL_CONSTASCII_STRINGPARAM(".uno.pkg") ))
- mediaType = OUSTR("application/vnd.sun.star.package-bundle");
- else if (title.endsWithIgnoreAsciiCaseAsciiL(
- RTL_CONSTASCII_STRINGPARAM(".zip") ))
- mediaType =
- OUSTR("application/vnd.sun.star.legacy-package-bundle");
+ if (ucbContent.isFolder())
+ {
+ //Every .oxt, uno.pkg file must contain a META-INF folder
+ ::ucbhelper::Content metaInfContent;
+ if (create_ucb_content(
+ &metaInfContent, makeURL( url, OUSTR("META-INF/manifest.xml") ),
+ xCmdEnv, false /* no throw */ ))
+ {
+ mediaType = OUSTR("application/vnd.sun.star.package-bundle");
+ }
+ //No support of legacy bundles, because every folder could be one.
+ }
+ else
+ {
+ const OUString title( ucbContent.getPropertyValue(
+ StrTitle::get() ).get<OUString>() );
+ if (title.endsWithIgnoreAsciiCaseAsciiL(
+ RTL_CONSTASCII_STRINGPARAM(".oxt") ) ||
+ title.endsWithIgnoreAsciiCaseAsciiL(
+ RTL_CONSTASCII_STRINGPARAM(".uno.pkg") ))
+ mediaType = OUSTR("application/vnd.sun.star.package-bundle");
+ else if (title.endsWithIgnoreAsciiCaseAsciiL(
+ RTL_CONSTASCII_STRINGPARAM(".zip") ))
+ mediaType =
+ OUSTR("application/vnd.sun.star.legacy-package-bundle");
+ }
}
if (mediaType.getLength() == 0)
throw lang::IllegalArgumentException(
@@ -1303,7 +1318,7 @@ void BackendImpl::PackageImpl::scanBundle(
{
OSL_ENSURE( 0, "### missing META-INF/manifest.xml file!" );
return;
-}
+ }
const lang::Locale officeLocale = getOfficeLocale();
diff --git a/desktop/source/migration/migration.cxx b/desktop/source/migration/migration.cxx
index 2181daab7454..cefc3cebf0fd 100644
--- a/desktop/source/migration/migration.cxx
+++ b/desktop/source/migration/migration.cxx
@@ -28,6 +28,9 @@
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_desktop.hxx"
+#include <map>
+#include <set>
+
#include "migration.hxx"
#include "migration_impl.hxx"
#include "cfgfilter.hxx"
@@ -35,8 +38,10 @@
#include <unotools/textsearch.hxx>
#include <comphelper/processfactory.hxx>
#include <comphelper/sequence.hxx>
+#include <configmgr/update.hxx>
#include <unotools/bootstrap.hxx>
#include <rtl/bootstrap.hxx>
+#include <rtl/uri.hxx>
#include <tools/config.hxx>
#include <i18npool/lang.h>
#include <tools/urlobj.hxx>
@@ -50,8 +55,6 @@
#include <com/sun/star/task/XJob.hpp>
#include <com/sun/star/beans/NamedValue.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
-#include <com/sun/star/configuration/backend/XLayer.hpp>
-#include <com/sun/star/configuration/backend/XSingleLayerStratum.hpp>
#include <com/sun/star/util/XRefreshable.hpp>
#include <com/sun/star/util/XChangesBatch.hpp>
#include <com/sun/star/util/XStringSubstitution.hpp>
@@ -64,8 +67,6 @@ using namespace com::sun::star::lang;
using namespace com::sun::star::beans;
using namespace com::sun::star::util;
using namespace com::sun::star::container;
-using namespace com::sun::star::configuration;
-using namespace com::sun::star::configuration::backend;
using com::sun::star::uno::Exception;
using namespace com::sun::star;
@@ -154,18 +155,15 @@ MigrationImpl::~MigrationImpl()
sal_Bool MigrationImpl::doMigration()
{
- // compile file and service list for migration
- m_vrFileList = compileFileList();
- m_vrServiceList = compileServiceList();
+ // compile file list for migration
+ m_vrFileList = compileFileList();
sal_Bool result = sal_False;
try{
copyFiles();
// execute the migration items from Setup.xcu
- // and refresh the cache
copyConfig();
- refresh();
// execute custom migration services from Setup.xcu
// and refresh the cache
@@ -232,6 +230,7 @@ static void insertSorted(migrations_available& rAvailableMigrations, supported_m
{
rAvailableMigrations.insert(pIter, aSupportedMigration );
bInserted = true;
+ break; // i111193: insert invalidates iterator!
}
++pIter;
}
@@ -332,13 +331,6 @@ migrations_vr MigrationImpl::readMigrationSteps(const ::rtl::OUString& rMigratio
tmpStep.excludeExtensions.push_back(tmpSeq[j]);
}
- // config components
- if (tmpAccess->getByName(OUString::createFromAscii("ServiceConfigComponents")) >>= tmpSeq)
- {
- for (sal_Int32 j=0; j<tmpSeq.getLength(); j++)
- tmpStep.configComponents.push_back(tmpSeq[j]);
- }
-
// generic service
tmpAccess->getByName(OUString::createFromAscii("MigrationService")) >>= tmpStep.service;
@@ -525,77 +517,87 @@ strings_vr MigrationImpl::compileFileList()
return vrResult;
}
+namespace {
-void MigrationImpl::copyConfig()
-{
- try {
- // 1. get a list of all components from hierachy browser
- uno::Reference< XJob > xBrowser(m_xFactory->createInstance(
- OUString::createFromAscii("com.sun.star.configuration.backend.LocalHierarchyBrowser")), uno::UNO_QUERY_THROW);
-
- uno::Sequence< NamedValue > seqArgs(2);
- seqArgs[0] = NamedValue(
- OUString::createFromAscii("LayerDataUrl"),
- uno::makeAny(m_aInfo.userdata + OUString::createFromAscii("/user/registry")));
- seqArgs[1] = NamedValue(
- OUString::createFromAscii("FetchComponentNames"),
- uno::makeAny(sal_True));
-
- // execute the search
- uno::Any aResult = xBrowser->execute(seqArgs);
- uno::Sequence< OUString > seqComponents;
- aResult >>= seqComponents;
- OSL_ENSURE(seqComponents.getLength()>0, "MigrationImpl::copyConfig(): no config components available");
-
- // 2. create an importer
- uno::Reference< XJob > xImporter(m_xFactory->createInstance(
- OUString::createFromAscii("com.sun.star.configuration.backend.LocalDataImporter")), uno::UNO_QUERY_THROW);
-
- // 3. for each migration step...
- uno::Sequence< NamedValue > importerArgs(3);
- importerArgs[0] = NamedValue(
- OUString::createFromAscii("LayerDataUrl"),
- uno::makeAny(m_aInfo.userdata + OUString::createFromAscii("/user/registry")));
- importerArgs[1] = NamedValue(
- OUString::createFromAscii("LayerFilter"),
- uno::Any());
- importerArgs[2] = NamedValue(
- OUString::createFromAscii("Component"),
- uno::Any());
-
- migrations_v::const_iterator i_mig = m_vrMigrations->begin();
- while (i_mig != m_vrMigrations->end())
- {
- // a. create config filter for step
- uno::Reference< XInitialization > xFilter(
- new CConfigFilter(&(i_mig->includeConfig), &(i_mig->excludeConfig)));
- importerArgs[1].Value = uno::makeAny(xFilter);
+struct componentParts {
+ std::set< rtl::OUString > includedPaths;
+ std::set< rtl::OUString > excludedPaths;
+};
- // b. run each importer with config filter
- for (sal_Int32 i=0; i<seqComponents.getLength(); i++)
- {
- OUString component = seqComponents[i];
- importerArgs[2].Value = uno::makeAny(seqComponents[i]);
- try {
- aResult = xImporter->execute(importerArgs);
- Exception myException;
- if (aResult >>= myException) throw myException;
- } catch(Exception& aException) {
- OString aMsg("Exception in config layer import.\ncomponent: ");
- aMsg += OUStringToOString(seqComponents[i], RTL_TEXTENCODING_ASCII_US);
- aMsg += "\nmessage: ";
- aMsg += OUStringToOString(aException.Message, RTL_TEXTENCODING_ASCII_US);
- OSL_ENSURE(sal_False, aMsg.getStr());
- }
+typedef std::map< rtl::OUString, componentParts > Components;
+
+bool getComponent(rtl::OUString const & path, rtl::OUString * component) {
+ OSL_ASSERT(component != 0);
+ if (path.getLength() == 0 || path[0] != '/') {
+ OSL_TRACE(
+ ("configuration migration in/exclude path %s ignored (does not"
+ " start with slash)"),
+ rtl::OUStringToOString(path, RTL_TEXTENCODING_UTF8).getStr());
+ return false;
+ }
+ sal_Int32 i = path.indexOf('/', 1);
+ *component = i < 0 ? path.copy(1) : path.copy(1, i - 1);
+ return true;
+}
+
+}
+
+void MigrationImpl::copyConfig() {
+ Components comps;
+ for (migrations_v::const_iterator i(m_vrMigrations->begin());
+ i != m_vrMigrations->end(); ++i)
+ {
+ for (strings_v::const_iterator j(i->includeConfig.begin());
+ j != i->includeConfig.end(); ++j)
+ {
+ rtl::OUString comp;
+ if (getComponent(*j, &comp)) {
+ comps[comp].includedPaths.insert(*j);
+ }
+ }
+ for (strings_v::const_iterator j(i->excludeConfig.begin());
+ j != i->excludeConfig.end(); ++j)
+ {
+ rtl::OUString comp;
+ if (getComponent(*j, &comp)) {
+ comps[comp].excludedPaths.insert(*j);
}
- i_mig++;
}
}
- catch (Exception& e)
- {
- OString aMsg("Exception in config layer import.\nmessage: ");
- aMsg += OUStringToOString(e.Message, RTL_TEXTENCODING_ASCII_US);
- OSL_ENSURE(sal_False, aMsg.getStr());
+ for (Components::const_iterator i(comps.begin()); i != comps.end(); ++i) {
+ if (!i->second.includedPaths.empty()) {
+ rtl::OUStringBuffer buf(m_aInfo.userdata);
+ buf.appendAscii(RTL_CONSTASCII_STRINGPARAM("/user/registry/data"));
+ sal_Int32 n = 0;
+ do {
+ rtl::OUString seg(i->first.getToken(0, '.', n));
+ rtl::OUString enc(
+ rtl::Uri::encode(
+ seg, rtl_UriCharClassPchar, rtl_UriEncodeStrict,
+ RTL_TEXTENCODING_UTF8));
+ if (enc.getLength() == 0 && seg.getLength() != 0) {
+ OSL_TRACE(
+ ("configuration migration component %s ignored (cannot"
+ " be encoded as file path)"),
+ rtl::OUStringToOString(
+ i->first, RTL_TEXTENCODING_UTF8).getStr());
+ goto next;
+ }
+ buf.append(sal_Unicode('/'));
+ buf.append(enc);
+ } while (n >= 0);
+ buf.appendAscii(RTL_CONSTASCII_STRINGPARAM(".xcu"));
+ configmgr::update::insertModificationXcuFile(
+ buf.makeStringAndClear(), i->second.includedPaths,
+ i->second.excludedPaths);
+ } else {
+ OSL_TRACE(
+ ("configuration migration component %s ignored (only excludes,"
+ " no includes)"),
+ rtl::OUStringToOString(
+ i->first, RTL_TEXTENCODING_UTF8).getStr());
+ }
+ next:;
}
}
@@ -704,17 +706,8 @@ void MigrationImpl::copyFiles()
void MigrationImpl::runServices()
{
- //create stratum for old user layer
- OUString aOldLayerURL = m_aInfo.userdata;
- aOldLayerURL += OUString::createFromAscii("/user/registry");
- OUString aStratumSvc = OUString::createFromAscii("com.sun.star.configuration.backend.LocalSingleStratum");
- uno::Sequence< uno::Any > stratumArgs(1);
- stratumArgs[0] = uno::makeAny(aOldLayerURL);
- uno::Reference< XSingleLayerStratum> xStartum( m_xFactory->createInstanceWithArguments(
- aStratumSvc, stratumArgs), uno::UNO_QUERY);
-
// Build argument array
- uno::Sequence< uno::Any > seqArguments(4);
+ uno::Sequence< uno::Any > seqArguments(3);
seqArguments[0] = uno::makeAny(NamedValue(
OUString::createFromAscii("Productname"),
uno::makeAny(m_aInfo.productname)));
@@ -735,34 +728,13 @@ void MigrationImpl::runServices()
try
{
- // create access to old configuration components in the user layer
- // that were requested by the migration service
- uno::Sequence< NamedValue > seqComponents(i_mig->configComponents.size());
- strings_v::const_iterator i_comp = i_mig->configComponents.begin();
- sal_Int32 i = 0;
- while (i_comp != i_mig->configComponents.end() && xStartum.is())
- {
- // create Layer for i_comp
- seqComponents[i] = NamedValue(
- *i_comp, uno::makeAny(xStartum->getLayer(*i_comp, OUString())));
-
- // next component
- i_comp++;
- i++;
- }
-
- // set old config argument
- seqArguments[2] = uno::makeAny(NamedValue(
- OUString::createFromAscii("OldConfiguration"),
- uno::makeAny(seqComponents)));
-
// set black list for extension migration
uno::Sequence< rtl::OUString > seqExtBlackList;
sal_uInt32 nSize = i_mig->excludeExtensions.size();
if ( nSize > 0 )
seqExtBlackList = comphelper::arrayToSequence< ::rtl::OUString >(
&i_mig->excludeExtensions[0], nSize );
- seqArguments[3] = uno::makeAny(NamedValue(
+ seqArguments[2] = uno::makeAny(NamedValue(
OUString::createFromAscii("ExtensionBlackList"),
uno::makeAny( seqExtBlackList )));
@@ -791,17 +763,4 @@ void MigrationImpl::runServices()
}
}
-
-strings_vr MigrationImpl::compileServiceList()
-{
- strings_vr vrResult(new strings_v);
- migrations_v::const_iterator i_migr = m_vrMigrations->begin();
- while (i_migr != m_vrMigrations->end())
- {
- vrResult->push_back(i_migr->service);
- i_migr++;
- }
- return vrResult;
-}
-
} // namespace desktop
diff --git a/desktop/source/migration/migration_impl.hxx b/desktop/source/migration/migration_impl.hxx
index b40de510261d..8cad1cce4b16 100644
--- a/desktop/source/migration/migration_impl.hxx
+++ b/desktop/source/migration/migration_impl.hxx
@@ -64,7 +64,6 @@ struct migration_step
strings_v excludeFiles;
strings_v includeConfig;
strings_v excludeConfig;
- strings_v configComponents;
strings_v includeExtensions;
strings_v excludeExtensions;
rtl::OUString service;
@@ -92,8 +91,6 @@ private:
migrations_vr m_vrMigrations; // list of all migration specs from config
install_info m_aInfo; // info about the version being migrated
strings_vr m_vrFileList; // final list of files to be copied
- strings_vr m_vrConfigList; // final list of nodes to be copied
- strings_vr m_vrServiceList; // final list of services to be called
// functions to control the migration process
bool readAvailableMigrations(migrations_available&);
@@ -101,8 +98,6 @@ private:
sal_Int32 findPreferedMigrationProcess(const migrations_available&);
install_info findInstallation(const strings_v& rVersions);
strings_vr compileFileList();
- strings_vr compileConfigList();
- strings_vr compileServiceList();
// helpers
void substract(strings_v& va, const strings_v& vb_c) const;
diff --git a/desktop/source/splash/makefile.mk b/desktop/source/splash/makefile.mk
index 89609687438c..2f163fe7b9d6 100644
--- a/desktop/source/splash/makefile.mk
+++ b/desktop/source/splash/makefile.mk
@@ -63,6 +63,7 @@ SHL1STDLIBS= \
$(SVLLIB) \
$(SVTOOLLIB) \
$(COMPHELPERLIB) \
+ $(CONFIGMGRLIB) \
$(UNOTOOLSLIB) \
$(TOOLSLIB) \
$(UCBHELPERLIB) \
diff --git a/editeng/inc/editeng/svxacorr.hxx b/editeng/inc/editeng/svxacorr.hxx
index c900228cc053..1ef6bad09d9b 100644
--- a/editeng/inc/editeng/svxacorr.hxx
+++ b/editeng/inc/editeng/svxacorr.hxx
@@ -209,6 +209,8 @@ class EDITENG_DLLPUBLIC SvxAutoCorrect
SvxAutoCorrLastFileAskTable_Impl* pLastFileTable;
CharClass* pCharClass;
+ bool bRunNext;
+
LanguageType eCharClassLang;
long nFlags;
@@ -374,6 +376,8 @@ public:
xub_StrLen nSttPos, xub_StrLen nEndPos,
LanguageType eLang = LANGUAGE_SYSTEM);
+ bool HasRunNext() { return bRunNext; }
+
static long GetDefaultFlags();
// returns TRUE for charcters where the function
diff --git a/editeng/source/accessibility/AccessibleEditableTextPara.cxx b/editeng/source/accessibility/AccessibleEditableTextPara.cxx
index 94981dc32e73..b5a43ae8a948 100644
--- a/editeng/source/accessibility/AccessibleEditableTextPara.cxx
+++ b/editeng/source/accessibility/AccessibleEditableTextPara.cxx
@@ -1129,6 +1129,26 @@ namespace accessibility
return aPoint;
}
+ // --> OD 2009-12-16 #i88070#
+ // fallback to parent's <XAccessibleContext> instance
+ else
+ {
+ uno::Reference< XAccessibleContext > xParentContext = xParent->getAccessibleContext();
+ if ( xParentContext.is() )
+ {
+ uno::Reference< XAccessibleComponent > xParentContextComponent( xParentContext, uno::UNO_QUERY );
+ if( xParentContextComponent.is() )
+ {
+ awt::Point aRefPoint = xParentContextComponent->getLocationOnScreen();
+ awt::Point aPoint = getLocation();
+ aPoint.X += aRefPoint.X;
+ aPoint.Y += aRefPoint.Y;
+
+ return aPoint;
+ }
+ }
+ }
+ // <--
}
throw uno::RuntimeException(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Cannot access parent")),
diff --git a/editeng/source/editeng/editeng.cxx b/editeng/source/editeng/editeng.cxx
index 212fb8ff9446..8621f173c250 100644
--- a/editeng/source/editeng/editeng.cxx
+++ b/editeng/source/editeng/editeng.cxx
@@ -49,6 +49,7 @@
#include <eerdll2.hxx>
#include <editeng/eerdll.hxx>
#include <editeng.hrc>
+#include <editeng/acorrcfg.hxx>
#include <editeng/flditem.hxx>
#include <editeng/txtrange.hxx>
#include <vcl/graph.hxx>
@@ -1144,8 +1145,10 @@ sal_Bool EditEngine::PostKeyEvent( const KeyEvent& rKeyEvent, EditView* pEditVie
xub_Unicode nCharCode = rKeyEvent.GetCharCode();
pEditView->pImpEditView->DrawSelection();
// Autokorrektur ?
+ SvxAutoCorrect* pAutoCorrect = SvxAutoCorrCfg::Get()->GetAutoCorrect();
if ( ( pImpEditEngine->GetStatus().DoAutoCorrect() ) &&
- SvxAutoCorrect::IsAutoCorrectChar( nCharCode ) )
+ ( SvxAutoCorrect::IsAutoCorrectChar( nCharCode ) ||
+ pAutoCorrect->HasRunNext() ) )
{
aCurSel = pImpEditEngine->AutoCorrect( aCurSel, nCharCode, !pEditView->IsInsertMode() );
}
diff --git a/editeng/source/misc/svxacorr.cxx b/editeng/source/misc/svxacorr.cxx
index 2631c71a6b17..64343517c69f 100644
--- a/editeng/source/misc/svxacorr.cxx
+++ b/editeng/source/misc/svxacorr.cxx
@@ -363,7 +363,7 @@ SvxAutoCorrect::SvxAutoCorrect( const String& rShareAutocorrFile,
sUserAutoCorrFile( rUserAutocorrFile ),
pLangTable( new SvxAutoCorrLanguageTable_Impl ),
pLastFileTable( new SvxAutoCorrLastFileAskTable_Impl ),
- pCharClass( 0 ),
+ pCharClass( 0 ), bRunNext( false ),
cStartDQuote( 0 ), cEndDQuote( 0 ), cStartSQuote( 0 ), cEndSQuote( 0 )
{
nFlags = SvxAutoCorrect::GetDefaultFlags();
@@ -380,7 +380,7 @@ SvxAutoCorrect::SvxAutoCorrect( const SvxAutoCorrect& rCpy )
pLangTable( new SvxAutoCorrLanguageTable_Impl ),
pLastFileTable( new SvxAutoCorrLastFileAskTable_Impl ),
- pCharClass( 0 ),
+ pCharClass( 0 ), bRunNext( false ),
nFlags( rCpy.nFlags & ~(ChgWordLstLoad|CplSttLstLoad|WrdSttLstLoad)),
cStartDQuote( rCpy.cStartDQuote ), cEndDQuote( rCpy.cEndDQuote ),
@@ -669,7 +669,7 @@ BOOL SvxAutoCorrect::FnAddNonBrkSpace(
// Check the presence of "://" in the word
xub_StrLen nStrPos = rTxt.Search( String::CreateFromAscii( "://" ), nSttWdPos + 1 );
- if ( STRING_NOTFOUND == nStrPos )
+ if ( STRING_NOTFOUND == nStrPos && nEndPos > 0 )
{
// Check the previous char
sal_Unicode cPrevChar = rTxt.GetChar( nEndPos - 1 );
@@ -693,9 +693,12 @@ BOOL SvxAutoCorrect::FnAddNonBrkSpace(
// Add the non-breaking space at the end pos
if ( bHasSpace )
rDoc.Insert( nPos, CHAR_HARDBLANK );
+ bRunNext = true;
bRet = true;
}
}
+ else if ( chars.indexOf( sal_Unicode( cPrevChar ) ) != -1 )
+ bRunNext = true;
}
}
else if ( cChar == '/' )
@@ -1189,6 +1192,9 @@ ULONG SvxAutoCorrect::AutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt,
BOOL bInsert )
{
ULONG nRet = 0;
+ bool bIsNextRun = bRunNext;
+ bRunNext = false; // if it was set, then it has to be turned off
+
do{ // only for middle check loop !!
if( cChar )
{
@@ -1227,10 +1233,39 @@ ULONG SvxAutoCorrect::AutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt,
rDoc.Replace( nInsPos, cChar );
// Hardspaces autocorrection
- if ( NeedsHardspaceAutocorr( cChar ) && IsAutoCorrFlag( AddNonBrkSpace ) &&
- FnAddNonBrkSpace( rDoc, rTxt, 0, nInsPos, rDoc.GetLanguage( nInsPos, FALSE ) ) )
+ if ( IsAutoCorrFlag( AddNonBrkSpace ) )
{
- nRet = AddNonBrkSpace;
+ if ( NeedsHardspaceAutocorr( cChar ) &&
+ FnAddNonBrkSpace( rDoc, rTxt, 0, nInsPos, rDoc.GetLanguage( nInsPos, FALSE ) ) )
+ {
+ nRet = AddNonBrkSpace;
+ }
+ else if ( bIsNextRun && !IsAutoCorrectChar( cChar ) )
+ {
+ // Remove the NBSP if it wasn't an autocorrection
+ if ( NeedsHardspaceAutocorr( rTxt.GetChar( nInsPos - 1 ) ) &&
+ cChar != ' ' && cChar != '\t' && cChar != CHAR_HARDBLANK )
+ {
+ // Look for the last HARD_SPACE
+ xub_StrLen nPos = nInsPos - 1;
+ bool bFound = false;
+ while ( nPos != STRING_NOTFOUND && !bFound )
+ {
+ sal_Unicode cTmpChar = rTxt.GetChar( nPos );
+ if ( cTmpChar == CHAR_HARDBLANK )
+ bFound = true;
+ else if ( !NeedsHardspaceAutocorr( cTmpChar ) )
+ nPos = STRING_NOTFOUND;
+ nPos--;
+ }
+
+ if ( bFound && nPos != STRING_NOTFOUND )
+ {
+ rDoc.Delete( nPos + 1, nPos + 2 );
+ nRet = AddNonBrkSpace;
+ }
+ }
+ }
}
}
diff --git a/extensions/source/activex/main/so_activex.cpp b/extensions/source/activex/main/so_activex.cpp
index 9c10fadadb06..b5793f6c7274 100644
--- a/extensions/source/activex/main/so_activex.cpp
+++ b/extensions/source/activex/main/so_activex.cpp
@@ -44,8 +44,10 @@ const REGSAM n32KeyAccess = KEY_ALL_ACCESS;
#ifdef _AMD64_
const BOOL bX64 = TRUE;
+#define REG_DELETE_KEY_A( key, aPath, nKeyAccess ) RegDeleteKeyExA( key, aPath, nKeyAccess, 0 )
#else
const BOOL bX64 = FALSE;
+#define REG_DELETE_KEY_A( key, aPath, nKeyAccess ) RegDeleteKeyA( key, aPath )
#endif
// 10.11.2009 tkr: MinGW doesn't know anything about RegDeleteKeyExA if WINVER < 0x0502.
@@ -363,7 +365,7 @@ HRESULT DeleteKeyTree( HKEY hkey, const char* pPath, REGSAM nKeyAccess )
RegCloseKey( hkey1 ),hkey1= NULL;
// delete the key itself
- return RegDeleteKeyExA( hkey, pPath, nKeyAccess & ( KEY_WOW64_64KEY | KEY_WOW64_32KEY ), 0 );
+ return REG_DELETE_KEY_A( hkey, pPath, nKeyAccess & ( KEY_WOW64_64KEY | KEY_WOW64_32KEY ) );
}
STDAPI DllUnregisterServerNative_Impl( int nMode, BOOL bForAllUsers, REGSAM nKeyAccess )
diff --git a/extensions/source/nsplugin/source/nsplugin.rc b/extensions/source/nsplugin/source/nsplugin.rc
index a97db09665e0..7d4b60b5bdad 100644
--- a/extensions/source/nsplugin/source/nsplugin.rc
+++ b/extensions/source/nsplugin/source/nsplugin.rc
@@ -26,5 +26,5 @@
************************************************************************/
#define ADDITIONAL_VERINFO1 value "FileExtents", "sdc|sds|sda|sdd|sdp|smf|vor|sgl|sdw|sxc|stc|sxd|std|sxi|sti|sxm|sxw|sxg|stw|odt|ott|odm|oth|ods|ots|odg|otg|odp|otp|odf\0"\
value "FileOpenName", "StarCalc 3.0 - 5.0|StarChart 3.0 - 5.0|StarDraw 3.0 - 5.0|StarImpress 3.0 - 5.0|StarImpress-packed 3.0 - 5.0|StarMath 3.0 - 5.0|StarWriter Template 3.0 - 5.0|StarWriter Global 3.0 - 5.0|StarWriter 3.0 - 5.0|StarOffice 6.0/7 Spreadsheet|StarOffice 6.0/7 Spreadsheet Template|StarOffice 6.0/7 Drawing|StarOffice 6.0/7 Drawing Template|StarOffice 6.0/7 Presentation|StarOffice 6.0/7 Presentation Template|StarOffice 6.0/7 Formula|StarOffice 6.0/7 Text Document|StarOffice 6.0/7 Master Document|StarOffice 6.0/7 Text Document Template|OpenDocument Text|OpenDocument Text Template|OpenDocument Master Document|HTML Document Template|OpenDocument Spreadsheet|OpenDocument Spreadsheet Template|OpenDocument Drawing|OpenDocument Drawing Template|OpenDocument Presentation|OpenDocument Presentation Template|OpenDocument Formula\0"
-#define ADDITIONAL_VERINFO2 value "FileDescription", "StarOffice/StarSuite Plug-in handles all its documents" value "ProductName", "StarOffice/StarSuite Plug-in" value "MIMEType", "application/vnd.stardivision.calc|application/vnd.stardivision.chart|application/vnd.stardivision.draw|application/vnd.stardivision.impress|application/vnd.stardivision.impress-packed|application/vnd.stardivision.math|application/vnd.stardivision.writer|application/vnd.stardivision.writer-global|application/vnd.staroffice.writer|application/vnd.sun.xml.calc|application/vnd.sun.xml.calc.template|application/vnd.sun.xml.draw|application/vnd.sun.xml.draw.template|"
+#define ADDITIONAL_VERINFO2 value "FileDescription", "Oracle Open Office Plug-in handles all its documents" value "ProductName", "Oracle Open Office Plug-in" value "MIMEType", "application/vnd.stardivision.calc|application/vnd.stardivision.chart|application/vnd.stardivision.draw|application/vnd.stardivision.impress|application/vnd.stardivision.impress-packed|application/vnd.stardivision.math|application/vnd.stardivision.writer|application/vnd.stardivision.writer-global|application/vnd.staroffice.writer|application/vnd.sun.xml.calc|application/vnd.sun.xml.calc.template|application/vnd.sun.xml.draw|application/vnd.sun.xml.draw.template|"
#define ADDITIONAL_VERINFO3 "application/vnd.sun.xml.impress|application/vnd.sun.xml.impress.template|application/vnd.sun.xml.math|application/vnd.sun.xml.writer|application/vnd.sun.xml.writer.global|application/vnd.sun.xml.writer.template|application/vnd.oasis.opendocument.text|application/vnd.oasis.opendocument.text-template|application/vnd.oasis.opendocument.text-master|application/vnd.oasis.opendocument.text-web|application/vnd.oasis.opendocument.spreadsheet|application/vnd.oasis.opendocument.spreadsheet-template|application/vnd.oasis.opendocument.graphics|application/vnd.oasis.opendocument.graphics-template|application/vnd.oasis.opendocument.presentation|application/vnd.oasis.opendocument.presentation-template|application/vnd.oasis.opendocument.formula\0"
diff --git a/extensions/source/nsplugin/source/so_env.cxx b/extensions/source/nsplugin/source/so_env.cxx
index 36a2b3f3abec..4cce0f98cd4f 100644
--- a/extensions/source/nsplugin/source/so_env.cxx
+++ b/extensions/source/nsplugin/source/so_env.cxx
@@ -31,6 +31,9 @@
#ifdef UNIX
#include <sys/types.h>
#include <strings.h>
+#ifdef LINUX
+#include <dlfcn.h>
+#endif
#include <stdarg.h>
// For vsnprintf()
#define NSP_vsnprintf vsnprintf
@@ -119,6 +122,113 @@ restoreUTF8(char *pPath)
return 0;
}
+#ifdef LINUX
+extern int nspluginOOoModuleHook (void** aResult);
+int nspluginOOoModuleHook (void** aResult)
+{
+ void *dl_handle;
+
+ dl_handle = dlopen(NULL, RTLD_NOW);
+ if (!dl_handle)
+ {
+ fprintf (stderr, "Can't open myself '%s'\n", dlerror());
+ return 1;
+ }
+
+ Dl_info dl_info = { 0,0,0,0 };
+ if(!dladdr((void *)nspluginOOoModuleHook, &dl_info))
+ {
+ fprintf (stderr, "Can't find my own address '%s'\n", dlerror());
+ return 1;
+ }
+
+ if (!dl_info.dli_fname)
+ {
+ fprintf (stderr, "Can't find my own file name\n");
+ return 1;
+ }
+
+ char cwdstr[NPP_PATH_MAX];
+ if (!getcwd (cwdstr, sizeof(cwdstr)))
+ {
+ fprintf (stderr, "Can't get cwd\n");
+ return 1;
+ }
+
+ char libFileName[NPP_PATH_MAX];
+
+ if (dl_info.dli_fname[0] != '/')
+ {
+ if ((strlen(cwdstr) + 1 + strlen(dl_info.dli_fname)) >= NPP_PATH_MAX)
+ {
+ fprintf (stderr, "Plugin path too long\n");
+ return 1;
+ }
+ strcpy (libFileName, cwdstr);
+ strcat (libFileName, "/");
+ strcat (libFileName, dl_info.dli_fname);
+ }
+ else
+ {
+ if (strlen(dl_info.dli_fname) >= NPP_PATH_MAX)
+ {
+ fprintf (stderr, "Plugin path too long\n");
+ return 1;
+ }
+ strcpy (libFileName, dl_info.dli_fname);
+ }
+
+ char *clobber;
+ static char realFileName[NPP_PATH_MAX] = {0};
+# define SEARCH_SUFFIX "/program/libnpsoplug"
+
+ if (!(clobber = strstr (libFileName, SEARCH_SUFFIX)))
+ {
+ ssize_t len = readlink(libFileName, realFileName, NPP_PATH_MAX-1);
+ if (len == -1)
+ {
+ fprintf (stderr, "Couldn't read link '%s'\n", libFileName);
+ return 1;
+ }
+ realFileName[len] = '\0';
+ if (!(clobber = strstr (realFileName, SEARCH_SUFFIX)))
+ {
+ fprintf (stderr, "Couldn't find suffix in '%s'\n", realFileName);
+ return 1;
+ }
+ *clobber = '\0';
+ }
+ else
+ {
+ *clobber = '\0';
+ strcpy (realFileName, libFileName);
+ }
+
+ fprintf (stderr, "OpenOffice path before fixup is '%s'\n", realFileName);
+
+ if (realFileName[0] != '/') {
+ /* a relative sym-link and we need to get an absolute path */
+ char scratch[NPP_PATH_MAX] = {0};
+ if (strlen (realFileName) + strlen (libFileName) + 2 >= NPP_PATH_MAX - 1)
+ {
+ fprintf (stderr, "Paths too long to fix up.\n");
+ return 1;
+ }
+ strcpy (scratch, libFileName);
+ if (strrchr (scratch, '/')) /* remove the last element */
+ *(strrchr (scratch, '/') + 1) = '\0';
+ strcat (scratch, realFileName);
+ strcpy (realFileName, scratch);
+ }
+
+ *aResult = realFileName;
+
+ fprintf (stderr, "OpenOffice path is '%s'\n", realFileName);
+
+ return 0;
+}
+#endif
+
// *aResult points the static string holding "/opt/staroffice8"
int findReadSversion(void** aResult, int /*bWnt*/, const char* /*tag*/, const char* /*entry*/)
{
@@ -131,9 +241,29 @@ int findReadSversion(void** aResult, int /*bWnt*/, const char* /*tag*/, const ch
// Filename of lnk file, eg. "soffice"
char lnkFileName[NPP_PATH_MAX] = {0};
char* pTempZero = NULL;
+
+#ifdef LINUX
+ /* try to fetch a 'self' pointer */
+ if (!nspluginOOoModuleHook (aResult))
+ return 0;
+
+ /* .. now in $HOME */
+#endif
sprintf(lnkFileName, "%s/.mozilla/plugins/libnpsoplugin%s", getenv("HOME"), SAL_DLLEXTENSION);
+#ifdef LINUX
+ ssize_t len = readlink(lnkFileName, realFileName, NPP_PATH_MAX-1);
+ if (-1 == len)
+ {
+ *realFileName = 0;
+ return -1;
+ }
+ realFileName[len] = '\0';
+
+ if (NULL == (pTempZero = strstr(realFileName, "/program/libnpsoplugin" SAL_DLLEXTENSION)))
+#else
if ((0 > readlink(lnkFileName, realFileName, NPP_PATH_MAX)) ||
- (NULL == (pTempZero = strstr(realFileName, "/program/libnpsoplugin" SAL_DLLEXTENSION))))
+ (NULL == (pTempZero = strstr(realFileName, "/program/libnpsoplugin" SAL_DLLEXTENSION))))
+#endif
{
*realFileName = 0;
return -1;
diff --git a/extensions/source/nsplugin/source/so_main.cxx b/extensions/source/nsplugin/source/so_main.cxx
index 7932f63d6d4d..c60da777689a 100644
--- a/extensions/source/nsplugin/source/so_main.cxx
+++ b/extensions/source/nsplugin/source/so_main.cxx
@@ -126,7 +126,7 @@ int find_free_node()
return -1;
}
-int find_cur_node(sal_Int32 cur_id)
+int find_cur_node(long cur_id)
{
for(int i=0; i<MAX_NODE_NUM; i++)
{
diff --git a/extensions/source/ole/oleobjw.cxx b/extensions/source/ole/oleobjw.cxx
index 79baf3c7d8df..ea9377ccf596 100644
--- a/extensions/source/ole/oleobjw.cxx
+++ b/extensions/source/ole/oleobjw.cxx
@@ -422,6 +422,46 @@ Any SAL_CALL IUnknownWrapper_Impl::getValue( const OUString& aPropertyName )
{
o2u_attachCurrentThread();
ITypeInfo * pInfo = getTypeInfo();
+ // I was going to implement an XServiceInfo interface to allow the type
+ // of the automation object to be exposed.. but it seems
+ // from looking at comments in the code that it is possible for
+ // this object to actually wrap an UNO object ( I guess if automation is
+ // used from MSO to create Openoffice objects ) Therefore, those objects
+ // will more than likely already have their own XServiceInfo interface.
+ // Instead here I chose a name that should be illegal both in COM and
+ // UNO ( from an IDL point of view ) therefore I think this is a safe
+ // hack
+ if ( aPropertyName.equals( rtl::OUString::createFromAscii("$GetTypeName") ))
+ {
+ if ( pInfo && m_sTypeName.getLength() == 0 )
+ {
+ m_sTypeName = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("IDispatch") );
+ CComBSTR sName;
+
+ if ( SUCCEEDED( pInfo->GetDocumentation( -1, &sName, NULL, NULL, NULL ) ) )
+ {
+ rtl::OUString sTmp( reinterpret_cast<const sal_Unicode*>(LPCOLESTR(sName)));
+ if ( sTmp.indexOf('_') == 0 )
+ sTmp = sTmp.copy(1);
+ // do we own the memory for pTypeLib, msdn doco is vague
+ // I'll assume we do
+ CComPtr< ITypeLib > pTypeLib;
+ unsigned int index;
+ if ( SUCCEEDED( pInfo->GetContainingTypeLib( &pTypeLib.p, &index )) )
+ {
+ if ( SUCCEEDED( pTypeLib->GetDocumentation( -1, &sName, NULL, NULL, NULL ) ) )
+ {
+ rtl::OUString sLibName( reinterpret_cast<const sal_Unicode*>(LPCOLESTR(sName)));
+ m_sTypeName = sLibName.concat( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(".") ) ).concat( sTmp );
+
+ }
+ }
+ }
+
+ }
+ ret <<= m_sTypeName;
+ return ret;
+ }
FuncDesc aDescGet(pInfo);
FuncDesc aDescPut(pInfo);
VarDesc aVarDesc(pInfo);
diff --git a/extensions/source/ole/oleobjw.hxx b/extensions/source/ole/oleobjw.hxx
index 6d46452eb088..230de2b7dcf8 100644
--- a/extensions/source/ole/oleobjw.hxx
+++ b/extensions/source/ole/oleobjw.hxx
@@ -234,6 +234,7 @@ protected:
Sequence<Type> m_seqTypes;
CComPtr<IUnknown> m_spUnknown;
CComPtr<IDispatch> m_spDispatch;
+ rtl::OUString m_sTypeName; // is "" ( not initialised ), "IDispatch" ( we have no idea ) or "SomeLibrary.SomeTypeName" if we managed to get a type
/** This value is set dureing XInitialization::initialize. It indicates that the COM interface
was transported as VT_DISPATCH in a VARIANT rather then a VT_UNKNOWN
*/
diff --git a/extras/source/autotext/lang/ga-IE/acor_ga-IE.dat b/extras/source/autotext/lang/ga-IE/acor_ga-IE.dat
new file mode 100644
index 000000000000..66dbf9d18c5d
--- /dev/null
+++ b/extras/source/autotext/lang/ga-IE/acor_ga-IE.dat
Binary files differ
diff --git a/extras/source/autotext/lang/sh-ME/acor_sh-ME.dat b/extras/source/autotext/lang/sh-ME/acor_sh-ME.dat
new file mode 100644
index 000000000000..1f6e4057e6e1
--- /dev/null
+++ b/extras/source/autotext/lang/sh-ME/acor_sh-ME.dat
Binary files differ
diff --git a/extras/source/autotext/lang/sh-RS/acor_sh-RS.dat b/extras/source/autotext/lang/sh-RS/acor_sh-RS.dat
new file mode 100644
index 000000000000..1f6e4057e6e1
--- /dev/null
+++ b/extras/source/autotext/lang/sh-RS/acor_sh-RS.dat
Binary files differ
diff --git a/extras/source/autotext/lang/sh-YU/acor_sh-YU.dat b/extras/source/autotext/lang/sh-YU/acor_sh-YU.dat
new file mode 100644
index 000000000000..1f6e4057e6e1
--- /dev/null
+++ b/extras/source/autotext/lang/sh-YU/acor_sh-YU.dat
Binary files differ
diff --git a/extras/source/autotext/lang/sk/acor_sk-SK.dat b/extras/source/autotext/lang/sk/acor_sk-SK.dat
index 3f62238c9ef5..8502fc624ec2 100644
--- a/extras/source/autotext/lang/sk/acor_sk-SK.dat
+++ b/extras/source/autotext/lang/sk/acor_sk-SK.dat
Binary files differ
diff --git a/extras/source/autotext/lang/sr-ME/acor_sr-ME.dat b/extras/source/autotext/lang/sr-ME/acor_sr-ME.dat
new file mode 100644
index 000000000000..d512182b4735
--- /dev/null
+++ b/extras/source/autotext/lang/sr-ME/acor_sr-ME.dat
Binary files differ
diff --git a/extras/source/autotext/lang/sr-RS/acor_sr-RS.dat b/extras/source/autotext/lang/sr-RS/acor_sr-RS.dat
new file mode 100644
index 000000000000..d512182b4735
--- /dev/null
+++ b/extras/source/autotext/lang/sr-RS/acor_sr-RS.dat
Binary files differ
diff --git a/extras/source/autotext/lang/sr-YU/acor_sr-YU.dat b/extras/source/autotext/lang/sr-YU/acor_sr-YU.dat
new file mode 100644
index 000000000000..d512182b4735
--- /dev/null
+++ b/extras/source/autotext/lang/sr-YU/acor_sr-YU.dat
Binary files differ
diff --git a/extras/source/palettes/lang/eu/modern_eu.sog b/extras/source/palettes/lang/eu/modern_eu.sog
index 820de672b421..e5516c05009e 100755
--- a/extras/source/palettes/lang/eu/modern_eu.sog
+++ b/extras/source/palettes/lang/eu/modern_eu.sog
@@ -1,31 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<office:gradient-table xmlns:office="http://openoffice.org/2000/office" xmlns:style="http://openoffice.org/2000/style" xmlns:text="http://openoffice.org/2000/text" xmlns:table="http://openoffice.org/2000/table" xmlns:draw="http://openoffice.org/2000/drawing" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="http://openoffice.org/2000/meta" xmlns:number="http://openoffice.org/2000/datastyle" xmlns:svg="http://www.w3.org/2000/svg" xmlns:chart="http://openoffice.org/2000/chart" xmlns:dr3d="http://openoffice.org/2000/dr3d" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="http://openoffice.org/2000/form" xmlns:script="http://openoffice.org/2000/script">
- <draw:draw:name="1 gradientea" draw:style="linear" draw:start-color="#00ff00" draw:end-color="#00ffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="600" draw:border="0%"/>
- <draw:draw:name="2 gradientea" draw:style="linear" draw:start-color="#00ffff" draw:end-color="#ffff00" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="600" draw:border="0%"/>
- <draw:draw:name="3 gradientea" draw:style="linear" draw:start-color="#00ffff" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="2250" draw:border="0%"/>
- <draw:draw:name="4 gradientea" draw:style="square" draw:cx="40%" draw:cy="50%" draw:start-color="#000080" draw:end-color="#e6e6ff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="3290" draw:border="0%"/>
- <draw:draw:name="5 gradientea" draw:style="radial" draw:cx="40%" draw:cy="50%" draw:start-color="#00ffff" draw:end-color="#4700b8" draw:start-intensity="85%" draw:end-intensity="100%" draw:border="0%"/>
- <draw:draw:name="6 gradientea" draw:style="radial" draw:cx="70%" draw:cy="65%" draw:start-color="#000080" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:border="0%"/>
- <draw:draw:name="7 gradientea" draw:style="square" draw:cx="70%" draw:cy="80%" draw:start-color="#280099" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="0%"/>
- <draw:draw:name="8 gradientea" draw:style="rectangular" draw:cx="50%" draw:cy="50%" draw:start-color="#94006b" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="0%"/>
- <draw:draw:name="9 gradientea" draw:style="square" draw:cx="50%" draw:cy="50%" draw:start-color="#94006b" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="0%"/>
- <draw:draw:name="10 gradientea" draw:style="radial" draw:cx="60%" draw:cy="50%" draw:start-color="#000000" draw:end-color="#ff6633" draw:start-intensity="100%" draw:end-intensity="100%" draw:border="0%"/>
- <draw:draw:name="11 gradientea" draw:style="square" draw:cx="75%" draw:cy="70%" draw:start-color="#6b6b94" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="70%"/>
- <draw:draw:name="12 gradientea" draw:style="square" draw:cx="75%" draw:cy="70%" draw:start-color="#fa1e42" draw:end-color="#663300" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="0%"/>
- <draw:draw:name="13 gradientea" draw:style="radial" draw:cx="20%" draw:cy="20%" draw:start-color="#800080" draw:end-color="#000080" draw:start-intensity="100%" draw:end-intensity="100%" draw:border="40%"/>
- <draw:draw:name="14 gradientea" draw:style="ellipsoid" draw:cx="50%" draw:cy="50%" draw:start-color="#004a4a" draw:end-color="#23dcdc" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="20%"/>
- <draw:draw:name="15 gradientea" draw:style="ellipsoid" draw:cx="50%" draw:cy="50%" draw:start-color="#000000" draw:end-color="#0000ff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="0%"/>
- <draw:draw:name="16 gradientea" draw:style="radial" draw:cx="40%" draw:cy="80%" draw:start-color="#000000" draw:end-color="#ff0000" draw:start-intensity="100%" draw:end-intensity="100%" draw:border="15%"/>
- <draw:draw:name="17 gradientea" draw:style="radial" draw:cx="75%" draw:cy="80%" draw:start-color="#ffff00" draw:end-color="#ff0000" draw:start-intensity="100%" draw:end-intensity="100%" draw:border="0%"/>
- <draw:draw:name="18 gradientea" draw:style="square" draw:cx="50%" draw:cy="50%" draw:start-color="#b84700" draw:end-color="#ffff00" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1490" draw:border="15%"/>
- <draw:draw:name="19 gradientea" draw:style="square" draw:cx="60%" draw:cy="70%" draw:start-color="#b84700" draw:end-color="#ffff00" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1490" draw:border="40%"/>
- <draw:draw:name="20 gradientea" draw:style="radial" draw:cx="40%" draw:cy="80%" draw:start-color="#b84700" draw:end-color="#ffff00" draw:start-intensity="55%" draw:end-intensity="100%" draw:border="40%"/>
- <draw:draw:name="21 gradientea" draw:style="rectangular" draw:cx="20%" draw:cy="60%" draw:start-color="#e12e2e" draw:end-color="#ffff00" draw:start-intensity="100%" draw:end-intensity="90%" draw:angle="1490" draw:border="40%"/>
- <draw:draw:name="22 gradientea" draw:style="axial" draw:start-color="#c0c0c0" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="90%" draw:angle="1490" draw:border="40%"/>
- <draw:draw:name="23 gradientea" draw:style="square" draw:cx="20%" draw:cy="60%" draw:start-color="#333333" draw:end-color="#fa1e42" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="2090" draw:border="40%"/>
- <draw:draw:name="24 gradientea" draw:style="square" draw:cx="20%" draw:cy="70%" draw:start-color="#0000ff" draw:end-color="#5e11a6" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="2090" draw:border="40%"/>
- <draw:draw:name="25 gradientea" draw:style="rectangular" draw:cx="70%" draw:cy="60%" draw:start-color="#0000ff" draw:end-color="#5e11a6" draw:start-intensity="100%" draw:end-intensity="80%" draw:angle="750" draw:border="40%"/>
- <draw:draw:name="26 gradientea" draw:style="rectangular" draw:cx="50%" draw:cy="30%" draw:start-color="#c0c0c0" draw:end-color="#333333" draw:start-intensity="100%" draw:end-intensity="60%" draw:angle="900" draw:border="40%"/>
- <draw:draw:name="27 gradientea" draw:style="square" draw:cx="50%" draw:cy="50%" draw:start-color="#ffffff" draw:end-color="#333333" draw:start-intensity="100%" draw:end-intensity="60%" draw:angle="0" draw:border="0%"/>
+ <draw:gradient draw:name="1 gradientea" draw:style="linear" draw:start-color="#00ff00" draw:end-color="#00ffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="600" draw:border="0%"/>
+ <draw:gradient draw:name="2 gradientea" draw:style="linear" draw:start-color="#00ffff" draw:end-color="#ffff00" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="600" draw:border="0%"/>
+ <draw:gradient draw:name="3 gradientea" draw:style="linear" draw:start-color="#00ffff" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="2250" draw:border="0%"/>
+ <draw:gradient draw:name="4 gradientea" draw:style="square" draw:cx="40%" draw:cy="50%" draw:start-color="#000080" draw:end-color="#e6e6ff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="3290" draw:border="0%"/>
+ <draw:gradient draw:name="5 gradientea" draw:style="radial" draw:cx="40%" draw:cy="50%" draw:start-color="#00ffff" draw:end-color="#4700b8" draw:start-intensity="85%" draw:end-intensity="100%" draw:border="0%"/>
+ <draw:gradient draw:name="6 gradientea" draw:style="radial" draw:cx="70%" draw:cy="65%" draw:start-color="#000080" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:border="0%"/>
+ <draw:gradient draw:name="7 gradientea" draw:style="square" draw:cx="70%" draw:cy="80%" draw:start-color="#280099" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="0%"/>
+ <draw:gradient draw:name="8 gradientea" draw:style="rectangular" draw:cx="50%" draw:cy="50%" draw:start-color="#94006b" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="0%"/>
+ <draw:gradient draw:name="9 gradientea" draw:style="square" draw:cx="50%" draw:cy="50%" draw:start-color="#94006b" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="0%"/>
+ <draw:gradient draw:name="10 gradientea" draw:style="radial" draw:cx="60%" draw:cy="50%" draw:start-color="#000000" draw:end-color="#ff6633" draw:start-intensity="100%" draw:end-intensity="100%" draw:border="0%"/>
+ <draw:gradient draw:name="11 gradientea" draw:style="square" draw:cx="75%" draw:cy="70%" draw:start-color="#6b6b94" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="70%"/>
+ <draw:gradient draw:name="12 gradientea" draw:style="square" draw:cx="75%" draw:cy="70%" draw:start-color="#fa1e42" draw:end-color="#663300" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="0%"/>
+ <draw:gradient draw:name="13 gradientea" draw:style="radial" draw:cx="20%" draw:cy="20%" draw:start-color="#800080" draw:end-color="#000080" draw:start-intensity="100%" draw:end-intensity="100%" draw:border="40%"/>
+ <draw:gradient draw:name="14 gradientea" draw:style="ellipsoid" draw:cx="50%" draw:cy="50%" draw:start-color="#004a4a" draw:end-color="#23dcdc" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="20%"/>
+ <draw:gradient draw:name="15 gradientea" draw:style="ellipsoid" draw:cx="50%" draw:cy="50%" draw:start-color="#000000" draw:end-color="#0000ff" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1640" draw:border="0%"/>
+ <draw:gradient draw:name="16 gradientea" draw:style="radial" draw:cx="40%" draw:cy="80%" draw:start-color="#000000" draw:end-color="#ff0000" draw:start-intensity="100%" draw:end-intensity="100%" draw:border="15%"/>
+ <draw:gradient draw:name="17 gradientea" draw:style="radial" draw:cx="75%" draw:cy="80%" draw:start-color="#ffff00" draw:end-color="#ff0000" draw:start-intensity="100%" draw:end-intensity="100%" draw:border="0%"/>
+ <draw:gradient draw:name="18 gradientea" draw:style="square" draw:cx="50%" draw:cy="50%" draw:start-color="#b84700" draw:end-color="#ffff00" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1490" draw:border="15%"/>
+ <draw:gradient draw:name="19 gradientea" draw:style="square" draw:cx="60%" draw:cy="70%" draw:start-color="#b84700" draw:end-color="#ffff00" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="1490" draw:border="40%"/>
+ <draw:gradient draw:name="20 gradientea" draw:style="radial" draw:cx="40%" draw:cy="80%" draw:start-color="#b84700" draw:end-color="#ffff00" draw:start-intensity="55%" draw:end-intensity="100%" draw:border="40%"/>
+ <draw:gradient draw:name="21 gradientea" draw:style="rectangular" draw:cx="20%" draw:cy="60%" draw:start-color="#e12e2e" draw:end-color="#ffff00" draw:start-intensity="100%" draw:end-intensity="90%" draw:angle="1490" draw:border="40%"/>
+ <draw:gradient draw:name="22 gradientea" draw:style="axial" draw:start-color="#c0c0c0" draw:end-color="#ffffff" draw:start-intensity="100%" draw:end-intensity="90%" draw:angle="1490" draw:border="40%"/>
+ <draw:gradient draw:name="23 gradientea" draw:style="square" draw:cx="20%" draw:cy="60%" draw:start-color="#333333" draw:end-color="#fa1e42" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="2090" draw:border="40%"/>
+ <draw:gradient draw:name="24 gradientea" draw:style="square" draw:cx="20%" draw:cy="70%" draw:start-color="#0000ff" draw:end-color="#5e11a6" draw:start-intensity="100%" draw:end-intensity="100%" draw:angle="2090" draw:border="40%"/>
+ <draw:gradient draw:name="25 gradientea" draw:style="rectangular" draw:cx="70%" draw:cy="60%" draw:start-color="#0000ff" draw:end-color="#5e11a6" draw:start-intensity="100%" draw:end-intensity="80%" draw:angle="750" draw:border="40%"/>
+ <draw:gradient draw:name="26 gradientea" draw:style="rectangular" draw:cx="50%" draw:cy="30%" draw:start-color="#c0c0c0" draw:end-color="#333333" draw:start-intensity="100%" draw:end-intensity="60%" draw:angle="900" draw:border="40%"/>
+ <draw:gradient draw:name="27 gradientea" draw:style="square" draw:cx="50%" draw:cy="50%" draw:start-color="#ffffff" draw:end-color="#333333" draw:start-intensity="100%" draw:end-intensity="60%" draw:angle="0" draw:border="0%"/>
</office:gradient-table> \ No newline at end of file
diff --git a/fetch_tarballs.sh b/fetch_tarballs.sh
index 87c2c80e4be3..e08b553f8171 100755
--- a/fetch_tarballs.sh
+++ b/fetch_tarballs.sh
@@ -3,14 +3,10 @@
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
-# Copyright 2008 by Sun Microsystems, Inc.
+# Copyright 2000, 2010 Oracle and/or its affiliates.
#
# OpenOffice.org - a multi-platform office productivity suite
#
-# $RCSfile: makefile.mk,v $
-#
-# $Revision: 1.8 $
-#
# This file is part of OpenOffice.org.
#
# OpenOffice.org is free software: you can redistribute it and/or modify
@@ -65,25 +61,31 @@ for i in wget /usr/bin/wget /usr/local/bin/wget /usr/sfw/bin/wget /opt/sfw/bin/w
fi
done
-for i in curl /usr/bin/curl /usr/local/bin/curl /usr/sfw/bin/curl /opt/sfw/bin/curl /opt/local/bin/curl; do
-# mac curl returns "2" on --version
-# eval "$i --version" > /dev/null 2>&1
-# ret=$?
-# if [ $ret -eq 0 ]; then
- if [ -x $i ]; then
- curl=$i
- echo found curl: $curl
- break 2
- fi
-done
+if [ -z "$wget" ]; then
+ for i in curl /usr/bin/curl /usr/local/bin/curl /usr/sfw/bin/curl /opt/sfw/bin/curl /opt/local/bin/curl; do
+ # mac curl returns "2" on --version
+ # eval "$i --version" > /dev/null 2>&1
+ # ret=$?
+ # if [ $ret -eq 0 ]; then
+ if [ -x $i ]; then
+ curl=$i
+ echo found curl: $curl
+ break 2
+ fi
+ done
+fi
if [ -z "$wget" -a -z "$curl" ]; then
echo "ERROR: neither wget nor curl found!"
exit
fi
-for i in md5sum /usr/local/bin/md5sum gmd5sum /usr/sfw/bin/md5sum /opt/sfw/bin/gmd5sum /opt/local/bin/md5sum; do
- eval "$i --version" > /dev/null 2>&1
+for i in md5 md5sum /usr/local/bin/md5sum gmd5sum /usr/sfw/bin/md5sum /opt/sfw/bin/gmd5sum /opt/local/bin/md5sum; do
+ if [ "$i" = "md5" ]; then
+ eval "$i -x" > /dev/null 2>&1
+ else
+ eval "$i --version" > /dev/null 2>&1
+ fi
ret=$?
if [ $ret -eq 0 ]; then
md5sum=$i
@@ -92,44 +94,61 @@ for i in md5sum /usr/local/bin/md5sum gmd5sum /usr/sfw/bin/md5sum /opt/sfw/bin/g
fi
done
+if [ "$md5sum" = "md5" ]; then
+ md5special=-r
+fi
+
if [ -z "$md5sum" ]; then
echo "Warning: no md5sum: found!"
fi
start_dir=`pwd`
+logfile=$TARFILE_LOCATION/fetch.log
+date >> $logfile
+
filelist=`cat $1`
-cd $TARFILE_LOCATION
+mkdir -p $TARFILE_LOCATION/tmp
+cd $TARFILE_LOCATION/tmp
+echo $$ > fetch-running
for i in $filelist ; do
-# echo $i
+# echo $i
if [ "$i" != `echo $i | sed "s/^http:\///"` ]; then
tarurl=$i
# TODO: check for comment
else
if [ "$tarurl" != "" ]; then
- if [ ! -f "$i" ]; then
+ if [ ! -f "../$i" ]; then
+ echo $i
if [ ! -z "$wget" ]; then
- $wget -nv -N $tarurl/$i
+ $wget -nv -N $tarurl/$i 2>&1 | tee -a $logfile
else
echo fetching $i
- $curl $file_date_check -O $tarurl/$i
+ $curl $file_date_check -O $tarurl/$i 2>&1 | tee -a $logfile
fi
wret=$?
if [ $wret -ne 0 ]; then
+ mv $i ${i}_broken
failed="$failed $i"
wret=0
fi
if [ -f $i -a -n "$md5sum" ]; then
- sum=`$md5sum $i | sed "s/ [ *].*//"`
+ sum=`$md5sum $md5special $i | sed "s/ .*//"`
sum2=`echo $i | sed "s/-.*//"`
if [ "$sum" != "$sum2" ]; then
- echo checksum failure for $i
+ echo checksum failure for $i 2>&1 | tee -a $logfile
failed="$failed $i"
+ mv $i ${i}_broken
+ else
+ mv $i ..
fi
+ else
+ mv $i ..
fi
fi
fi
fi
done
+rm $TARFILE_LOCATION/tmp/*-*
cd $start_dir
if [ ! -z "$failed" ]; then
diff --git a/filter/source/pdf/impdialog.cxx b/filter/source/pdf/impdialog.cxx
index 68c449dd7353..bb125bd37a47 100644
--- a/filter/source/pdf/impdialog.cxx
+++ b/filter/source/pdf/impdialog.cxx
@@ -86,6 +86,8 @@ ImpPDFTabDialog::ImpPDFTabDialog( Window* pParent,
mbExportNotesPages( sal_False ),
mbUseTransitionEffects( sal_False ),
mbIsSkipEmptyPages( sal_True ),
+ mbAddStream( sal_False ),
+ mbEmbedStandardFonts( sal_False ),
mnFormsType( 0 ),
mbExportFormFields( sal_True ),
mbAllowDuplicateFieldNames( sal_False ),
@@ -195,6 +197,7 @@ ImpPDFTabDialog::ImpPDFTabDialog( Window* pParent,
mbUseTransitionEffects = maConfigItem.ReadBool( OUString( RTL_CONSTASCII_USTRINGPARAM( "UseTransitionEffects" ) ), sal_True );
mbIsSkipEmptyPages = maConfigItem.ReadBool( OUString( RTL_CONSTASCII_USTRINGPARAM( "IsSkipEmptyPages" ) ), sal_False );
mbAddStream = maConfigItem.ReadBool( String( RTL_CONSTASCII_USTRINGPARAM( "IsAddStream" ) ), sal_False );
+ mbEmbedStandardFonts = maConfigItem.ReadBool( String( RTL_CONSTASCII_USTRINGPARAM( "EmbedStandardFonts" ) ), sal_False );
mnFormsType = maConfigItem.ReadInt32( OUString( RTL_CONSTASCII_USTRINGPARAM( "FormsType" ) ), 0 );
mbExportFormFields = maConfigItem.ReadBool( OUString( RTL_CONSTASCII_USTRINGPARAM( "ExportFormFields" ) ), sal_True );
@@ -332,6 +335,7 @@ Sequence< PropertyValue > ImpPDFTabDialog::GetFilterData()
maConfigItem.WriteBool( OUString( RTL_CONSTASCII_USTRINGPARAM( "UseTransitionEffects" ) ), mbUseTransitionEffects );
maConfigItem.WriteBool( OUString( RTL_CONSTASCII_USTRINGPARAM( "IsSkipEmptyPages" ) ), mbIsSkipEmptyPages );
maConfigItem.WriteBool( OUString( RTL_CONSTASCII_USTRINGPARAM( "IsAddStream" ) ), mbAddStream );
+ maConfigItem.WriteBool( OUString( RTL_CONSTASCII_USTRINGPARAM( "EmbedStandardFonts" ) ), mbEmbedStandardFonts );
/*
* FIXME: the entries are only implicitly defined by the resource file. Should there
@@ -435,6 +439,7 @@ ImpPDFTabGeneralPage::ImpPDFTabGeneralPage( Window* pParent,
maCbExportFormFields( this, PDFFilterResId( CB_EXPORTFORMFIELDS ) ),
mbExportFormFieldsUserSelection( sal_False ),
+ mbEmbedStandardFontsUserSelection( sal_False ),
maFtFormsFormat( this, PDFFilterResId( FT_FORMSFORMAT ) ),
maLbFormsFormat( this, PDFFilterResId( LB_FORMSFORMAT ) ),
maCbAllowDuplicateFieldNames( this, PDFFilterResId( CB_ALLOWDUPLICATEFIELDNAMES ) ),
@@ -444,6 +449,7 @@ ImpPDFTabGeneralPage::ImpPDFTabGeneralPage( Window* pParent,
maCbExportNotesPages( this, PDFFilterResId( CB_EXPORTNOTESPAGES ) ),
maCbExportEmptyPages( this, PDFFilterResId( CB_EXPORTEMPTYPAGES ) ),
maCbAddStream( this, PDFFilterResId( CB_ADDSTREAM ) ),
+ maCbEmbedStandardFonts( this, PDFFilterResId( CB_EMBEDSTANDARDFONTS ) ),
mbIsPresentation( sal_False ),
mbIsWriter( sal_False),
mpaParent( 0 )
@@ -461,7 +467,11 @@ ImpPDFTabGeneralPage::ImpPDFTabGeneralPage( Window* pParent,
Point aNewPos = maCbAddStream.GetPosPixel();
aNewPos.Y() -= nDelta;
maCbAddStream.SetPosPixel( aNewPos );
+ aNewPos = maCbEmbedStandardFonts.GetPosPixel();
+ aNewPos.Y() -= nDelta;
+ maCbEmbedStandardFonts.SetPosPixel( aNewPos );
}
+ maCbExportEmptyPages.SetStyle( maCbExportEmptyPages.GetStyle() | WB_VCENTER );
}
// -----------------------------------------------------------------------------
@@ -524,11 +534,13 @@ void ImpPDFTabGeneralPage::SetFilterConfigItem( const ImpPDFTabDialog* paParent
// get the form values, for use with PDF/A-1 selection interface
mbTaggedPDFUserSelection = paParent->mbUseTaggedPDF;
mbExportFormFieldsUserSelection = paParent->mbExportFormFields;
+ mbEmbedStandardFontsUserSelection = paParent->mbEmbedStandardFonts;
if( !maCbPDFA1b.IsChecked() )
{// the value for PDF/A set by the ToggleExportPDFAHdl method called before
maCbTaggedPDF.Check( mbTaggedPDFUserSelection );
maCbExportFormFields.Check( mbExportFormFieldsUserSelection );
+ maCbEmbedStandardFonts.Check( mbEmbedStandardFontsUserSelection );
}
maLbFormsFormat.SelectEntryPos( (sal_uInt16)paParent->mnFormsType );
@@ -554,6 +566,8 @@ void ImpPDFTabGeneralPage::SetFilterConfigItem( const ImpPDFTabDialog* paParent
maCbExportEmptyPages.SetPosPixel( Point( aPos.X(), aPos.Y() - nCheckBoxHeight ) );
aPos = maCbAddStream.GetPosPixel();
maCbAddStream.SetPosPixel( Point( aPos.X(), aPos.Y() - nCheckBoxHeight ) );
+ aPos = maCbEmbedStandardFonts.GetPosPixel();
+ maCbEmbedStandardFonts.SetPosPixel( Point( aPos.X(), aPos.Y() - nCheckBoxHeight ) );
maCbExportNotesPages.Show( FALSE );
maCbExportNotesPages.Check( FALSE );
}
@@ -614,11 +628,13 @@ void ImpPDFTabGeneralPage::GetFilterConfigItem( ImpPDFTabDialog* paParent )
paParent->mnPDFTypeSelection = 1;
paParent->mbUseTaggedPDF = mbTaggedPDFUserSelection;
paParent->mbExportFormFields = mbExportFormFieldsUserSelection;
+ paParent->mbEmbedStandardFonts = mbEmbedStandardFontsUserSelection;
}
else
{
paParent->mbUseTaggedPDF = maCbTaggedPDF.IsChecked();
paParent->mbExportFormFields = maCbExportFormFields.IsChecked();
+ paParent->mbEmbedStandardFonts = maCbEmbedStandardFonts.IsChecked();
}
/*
@@ -711,6 +727,9 @@ IMPL_LINK( ImpPDFTabGeneralPage, ToggleExportPDFAHdl, void*, EMPTYARG )
mbExportFormFieldsUserSelection = maCbExportFormFields.IsChecked();
maCbExportFormFields.Check( sal_False );
maCbExportFormFields.Enable( sal_False );
+ mbEmbedStandardFontsUserSelection = maCbEmbedStandardFonts.IsChecked();
+ maCbEmbedStandardFonts.Check( sal_True );
+ maCbEmbedStandardFonts.Enable( sal_False );
}
else
{
@@ -719,6 +738,8 @@ IMPL_LINK( ImpPDFTabGeneralPage, ToggleExportPDFAHdl, void*, EMPTYARG )
maCbTaggedPDF.Check( mbTaggedPDFUserSelection );
maCbExportFormFields.Check( mbExportFormFieldsUserSelection );
maCbExportFormFields.Enable();
+ maCbEmbedStandardFonts.Check( mbEmbedStandardFontsUserSelection );
+ maCbEmbedStandardFonts.Enable();
}
// PDF/A-1 doesn't allow launch action, so enable/disable the selection on
// Link page
diff --git a/filter/source/pdf/impdialog.hrc b/filter/source/pdf/impdialog.hrc
index 6a010120e3bd..cc438255650f 100644
--- a/filter/source/pdf/impdialog.hrc
+++ b/filter/source/pdf/impdialog.hrc
@@ -83,9 +83,9 @@
#define CB_ALLOWDUPLICATEFIELDNAMES 23
#define CB_EXPORTEMPTYPAGES 24
#define CB_ADDSTREAM 25
-
#define CB_PDFA_1B_SELECT 26
#define CB_EXPORTNOTESPAGES 27
+#define CB_EMBEDSTANDARDFONTS 28
#define FL_OLD_PAGES 51
#define RB_OLD_ALL 52
diff --git a/filter/source/pdf/impdialog.hxx b/filter/source/pdf/impdialog.hxx
index 050aeee4caf5..38da273c2fbd 100644
--- a/filter/source/pdf/impdialog.hxx
+++ b/filter/source/pdf/impdialog.hxx
@@ -103,6 +103,7 @@ protected:
sal_Bool mbUseTransitionEffects;
sal_Bool mbIsSkipEmptyPages;
sal_Bool mbAddStream;
+ sal_Bool mbEmbedStandardFonts;
sal_Int32 mnFormsType;
sal_Bool mbExportFormFields;
sal_Bool mbAllowDuplicateFieldNames;
@@ -193,6 +194,7 @@ class ImpPDFTabGeneralPage : public SfxTabPage
CheckBox maCbExportFormFields;
sal_Bool mbExportFormFieldsUserSelection;
+ sal_Bool mbEmbedStandardFontsUserSelection;
FixedText maFtFormsFormat;
ListBox maLbFormsFormat;
CheckBox maCbAllowDuplicateFieldNames;
@@ -203,6 +205,7 @@ class ImpPDFTabGeneralPage : public SfxTabPage
CheckBox maCbExportEmptyPages;
CheckBox maCbAddStream;
+ CheckBox maCbEmbedStandardFonts;
sal_Bool mbIsPresentation;
sal_Bool mbIsWriter;
diff --git a/filter/source/pdf/impdialog.src b/filter/source/pdf/impdialog.src
index 34f788495674..76e64e87c173 100644
--- a/filter/source/pdf/impdialog.src
+++ b/filter/source/pdf/impdialog.src
@@ -27,7 +27,7 @@
#include "impdialog.hrc"
-#define TAB_PDF_SIZE Size = MAP_APPFONT ( 176, 255 )
+#define TAB_PDF_SIZE Size = MAP_APPFONT ( 176, 268 )
//string for TabDialog standard buttons
String STR_PDF_EXPORT
{
@@ -229,11 +229,18 @@ TabPage RID_PDF_TAB_GENER
WordBreak = TRUE ;
Text[ en-US ] = "Exp~ort automatically inserted blank pages";
};
- CheckBox CB_ADDSTREAM
+ CheckBox CB_EMBEDSTANDARDFONTS
{
Pos = MAP_APPFONT ( 12 , 248 ) ;
Size = MAP_APPFONT ( 158 , 10 ) ;
TabStop = TRUE ;
+ Text[ en-US ] = "E~mbed standard fonts";
+ };
+ CheckBox CB_ADDSTREAM
+ {
+ Pos = MAP_APPFONT ( 12 , 261 ) ;
+ Size = MAP_APPFONT ( 158 , 10 ) ;
+ TabStop = TRUE ;
Text[ en-US ] = "Create ~hybrid file";
};
};
diff --git a/filter/source/pdf/pdfexport.cxx b/filter/source/pdf/pdfexport.cxx
index 793503abf9ba..c868a3ec3157 100644
--- a/filter/source/pdf/pdfexport.cxx
+++ b/filter/source/pdf/pdfexport.cxx
@@ -430,8 +430,8 @@ sal_Bool PDFExport::Export( const OUString& rFile, const Sequence< PropertyValue
rFilterData[ nData ].Value >>= mbExportNotes;
else if ( rFilterData[ nData ].Name == OUString( RTL_CONSTASCII_USTRINGPARAM( "ExportNotesPages" ) ) )
rFilterData[ nData ].Value >>= mbExportNotesPages;
-// else if ( rFilterData[ nData ].Name == OUString( RTL_CONSTASCII_USTRINGPARAM( "EmbedStandardFonts" ) ) )
-// rFilterData[ nData ].Value >>= mbEmbedStandardFonts;
+ else if ( rFilterData[ nData ].Name == OUString( RTL_CONSTASCII_USTRINGPARAM( "EmbedStandardFonts" ) ) )
+ rFilterData[ nData ].Value >>= mbEmbedStandardFonts;
else if ( rFilterData[ nData ].Name == OUString( RTL_CONSTASCII_USTRINGPARAM( "UseTransitionEffects" ) ) )
rFilterData[ nData ].Value >>= mbUseTransitionEffects;
else if ( rFilterData[ nData ].Name == OUString( RTL_CONSTASCII_USTRINGPARAM( "ExportFormFields" ) ) )
diff --git a/filter/source/xslt/odf2xhtml/export/xhtml/body.xsl b/filter/source/xslt/odf2xhtml/export/xhtml/body.xsl
index 6cfeb35eb50e..b2abefad2d9d 100644
--- a/filter/source/xslt/odf2xhtml/export/xhtml/body.xsl
+++ b/filter/source/xslt/odf2xhtml/export/xhtml/body.xsl
@@ -2,23 +2,23 @@
<!--
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-
+
Copyright 2000, 2010 Oracle and/or its affiliates.
-
+
OpenOffice.org - a multi-platform office productivity suite
-
+
This file is part of OpenOffice.org.
-
+
OpenOffice.org is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License version 3
only, as published by the Free Software Foundation.
-
+
OpenOffice.org is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License version 3 for more details
(a copy is included in the LICENSE file that accompanied this code).
-
+
You should have received a copy of the GNU Lesser General Public License
version 3 along with OpenOffice.org. If not, see
<http://www.openoffice.org/license.html>
@@ -34,177 +34,177 @@
<!--+++++ INCLUDED XSL MODULES +++++-->
<!-- helper collection, to convert measures (e.g. inch to pixel using DPI (dots per inch) parameter)-->
- <xsl:import href="../../common/measure_conversion.xsl"/>
+ <xsl:import href="../../common/measure_conversion.xsl"/>
<!-- common office body element handling -->
- <xsl:import href="../common/body.xsl"/>
+ <xsl:import href="../common/body.xsl"/>
<!-- common table handling -->
- <xsl:import href="../common/table/table.xsl"/>
+ <xsl:import href="../common/table/table.xsl"/>
<!-- xhtml table handling -->
- <xsl:include href="table.xsl"/>
+ <xsl:include href="table.xsl"/>
<!-- Useful in case of 'style:map', conditional formatting, where a style references to another -->
- <xsl:key name="styles" match="/*/office:styles/style:style | /*/office:automatic-styles/style:style" use="@style:name"/>
+ <xsl:key name="styles" match="/*/office:styles/style:style | /*/office:automatic-styles/style:style" use="@style:name"/>
<!-- ************ -->
<!-- *** body *** -->
<!-- ************ -->
- <xsl:key match="style:style/@style:master-page-name" name="masterPage" use="'count'"/>
- <xsl:key match="style:master-page" name="masterPageElements" use="@style:name"/>
- <xsl:key match="style:page-layout" name="pageLayoutElements" use="@style:name"/>
- <xsl:key name="writingModeStyles" match="/*/office:styles/style:style/style:paragraph-properties/@style:writing-mode | /*/office:automatic-styles/style:style/style:paragraph-properties/@style:writing-mode" use="'test'"/>
- <xsl:template name="create-body">
- <xsl:param name="globalData"/>
+ <xsl:key match="style:style/@style:master-page-name" name="masterPage" use="'count'"/>
+ <xsl:key match="style:master-page" name="masterPageElements" use="@style:name"/>
+ <xsl:key match="style:page-layout" name="pageLayoutElements" use="@style:name"/>
+ <xsl:key name="writingModeStyles" match="/*/office:styles/style:style/style:paragraph-properties/@style:writing-mode | /*/office:automatic-styles/style:style/style:paragraph-properties/@style:writing-mode" use="'test'"/>
+ <xsl:template name="create-body">
+ <xsl:param name="globalData"/>
<!-- approximation to find the correct master page style (with page dimensions) -->
- <xsl:variable name="masterPageNames">
+ <xsl:variable name="masterPageNames">
<!-- Loop over every style:style containing a @style:master-page-name attribute -->
- <xsl:for-each select="key('masterPage','count')">
- <!-- Check if this style is being used in the body -->
- <xsl:if test="key('elementUsingStyle', ../@style:name)">
- <!-- Check every master-page-name if it is not emtpy and return as ';' separated list -->
- <xsl:if test="string-length(../@style:master-page-name) &gt; 0">
- <xsl:value-of select="../@style:master-page-name"/>;</xsl:if>
- </xsl:if>
- </xsl:for-each>
- </xsl:variable>
-
+ <xsl:for-each select="key('masterPage','count')">
+ <!-- Check if this style is being used in the body -->
+ <xsl:if test="key('elementUsingStyle', ../@style:name)">
+ <!-- Check every master-page-name if it is not emtpy and return as ';' separated list -->
+ <xsl:if test="string-length(../@style:master-page-name) &gt; 0">
+ <xsl:value-of select="../@style:master-page-name"/>;</xsl:if>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
+
<!-- Take the first of the masterpage list and get the according style:master-page element and find the @style:page-layout-name -->
- <xsl:variable name="pageLayoutName" select="key('masterPageElements', substring-before($masterPageNames,';'))/@style:page-layout-name"/>
- <xsl:variable name="pageProperties">
- <xsl:choose>
- <xsl:when test="not($pageLayoutName) or $pageLayoutName = ''">
- <xsl:copy-of select="$globalData/styles-file/*/office:automatic-styles/style:page-layout[1]/style:page-layout-properties"/>
- </xsl:when>
- <xsl:otherwise>
+ <xsl:variable name="pageLayoutName" select="key('masterPageElements', substring-before($masterPageNames,';'))/@style:page-layout-name"/>
+ <xsl:variable name="pageProperties">
+ <xsl:choose>
+ <xsl:when test="not($pageLayoutName) or $pageLayoutName = ''">
+ <xsl:copy-of select="$globalData/styles-file/*/office:automatic-styles/style:page-layout[1]/style:page-layout-properties"/>
+ </xsl:when>
+ <xsl:otherwise>
<!-- Find the according style:page-layout and store the properties in a variable -->
- <xsl:copy-of select="key('pageLayoutElements', $pageLayoutName)/style:page-layout-properties"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:element name="body">
+ <xsl:copy-of select="key('pageLayoutElements', $pageLayoutName)/style:page-layout-properties"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:element name="body">
<!-- direction of text flow -->
- <xsl:variable name="writingMode" select="$pageProperties/style:page-layout-properties/@style:writing-mode"/>
- <xsl:choose>
- <xsl:when test="$writingMode">
- <xsl:choose>
- <xsl:when test="contains($writingMode, 'lr')">
- <xsl:attribute name="dir">ltr</xsl:attribute>
- </xsl:when>
- <xsl:when test="contains($writingMode, 'rl')">
- <xsl:attribute name="dir">rtl</xsl:attribute>
- </xsl:when>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <!-- As CSS writing-mode is not implemented by all browsers, a heuristic is done -->
- <xsl:variable name="writingMode" select="key('writingModeStyles', 'test')"/>
- <xsl:if test="contains($writingMode, 'rl')">
- <xsl:attribute name="dir">rtl</xsl:attribute>
- </xsl:if>
- </xsl:otherwise>
- </xsl:choose>
+ <xsl:variable name="writingMode" select="$pageProperties/style:page-layout-properties/@style:writing-mode"/>
+ <xsl:choose>
+ <xsl:when test="$writingMode">
+ <xsl:choose>
+ <xsl:when test="contains($writingMode, 'lr')">
+ <xsl:attribute name="dir">ltr</xsl:attribute>
+ </xsl:when>
+ <xsl:when test="contains($writingMode, 'rl')">
+ <xsl:attribute name="dir">rtl</xsl:attribute>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <!-- As CSS writing-mode is not implemented by all browsers, a heuristic is done -->
+ <xsl:variable name="writingMode" select="key('writingModeStyles', 'test')"/>
+ <xsl:if test="contains($writingMode, 'rl')">
+ <xsl:attribute name="dir">rtl</xsl:attribute>
+ </xsl:if>
+ </xsl:otherwise>
+ </xsl:choose>
<!-- adapt page size -->
- <xsl:variable name="pageWidth" select="$pageProperties/style:page-layout-properties/@fo:page-width"/>
+ <xsl:variable name="pageWidth" select="$pageProperties/style:page-layout-properties/@fo:page-width"/>
<!-- multiple backgroundimages for different page styles (never used in html) -->
- <xsl:variable name="backgroundImage" select="$pageProperties/style:page-layout-properties/style:background-image"/>
+ <xsl:variable name="backgroundImage" select="$pageProperties/style:page-layout-properties/style:background-image"/>
<!-- page margins & background image -->
- <xsl:if test="$pageWidth or $pageProperties/style:page-layout-properties/@fo:* or $backgroundImage/@xlink:href">
- <xsl:attribute name="style">
- <xsl:if test="$pageWidth">
- <xsl:text>max-width:</xsl:text>
- <xsl:value-of select="$pageWidth"/>
- <xsl:text>;</xsl:text>
- </xsl:if>
- <xsl:if test="$pageProperties/style:page-layout-properties/@fo:* or $backgroundImage/@xlink:href">
- <xsl:apply-templates select="$pageProperties/style:page-layout-properties/@fo:*"/>
- <xsl:if test="$backgroundImage/@xlink:href">
- <xsl:text>background-image:url(</xsl:text>
- <xsl:call-template name="create-href">
- <xsl:with-param name="href" select="$backgroundImage/@xlink:href"/>
- </xsl:call-template>
- <xsl:text>);</xsl:text>
-
- <xsl:if test="$backgroundImage/@style:repeat">
- <xsl:choose>
- <xsl:when test="$backgroundImage/@style:repeat = 'no-repeat'">
- <xsl:text>background-repeat:no-repeat;</xsl:text>
- </xsl:when>
- <xsl:otherwise>
- <xsl:text>background-repeat:repeat;</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- <xsl:if test="$backgroundImage/@style:position">
- <xsl:text>background-position:</xsl:text>
- <xsl:value-of select="$backgroundImage/@style:position"/>
- <xsl:text>;</xsl:text>
- </xsl:if>
- </xsl:if>
- </xsl:if>
- </xsl:attribute>
- </xsl:if>
- <!-- processing the content of the OpenDocument content file -->
- <xsl:apply-templates select="/*/office:body/*">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
-
- </xsl:element>
- </xsl:template>
-
- <!-- processing the content of the OpenDocument content file -->
- <xsl:template match="office:body/*">
- <xsl:param name="globalData"/>
+ <xsl:if test="$pageWidth or $pageProperties/style:page-layout-properties/@fo:* or $backgroundImage/@xlink:href">
+ <xsl:attribute name="style">
+ <xsl:if test="$pageWidth">
+ <xsl:text>max-width:</xsl:text>
+ <xsl:value-of select="$pageWidth"/>
+ <xsl:text>;</xsl:text>
+ </xsl:if>
+ <xsl:if test="$pageProperties/style:page-layout-properties/@fo:* or $backgroundImage/@xlink:href">
+ <xsl:apply-templates select="$pageProperties/style:page-layout-properties/@fo:*"/>
+ <xsl:if test="$backgroundImage/@xlink:href">
+ <xsl:text>background-image:url(</xsl:text>
+ <xsl:call-template name="create-href">
+ <xsl:with-param name="href" select="$backgroundImage/@xlink:href"/>
+ </xsl:call-template>
+ <xsl:text>);</xsl:text>
+
+ <xsl:if test="$backgroundImage/@style:repeat">
+ <xsl:choose>
+ <xsl:when test="$backgroundImage/@style:repeat = 'no-repeat'">
+ <xsl:text>background-repeat:no-repeat;</xsl:text>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:text>background-repeat:repeat;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ <xsl:if test="$backgroundImage/@style:position">
+ <xsl:text>background-position:</xsl:text>
+ <xsl:value-of select="$backgroundImage/@style:position"/>
+ <xsl:text>;</xsl:text>
+ </xsl:if>
+ </xsl:if>
+ </xsl:if>
+ </xsl:attribute>
+ </xsl:if>
+ <!-- processing the content of the OpenDocument content file -->
+ <xsl:apply-templates select="/*/office:body/*">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+
+ </xsl:element>
+ </xsl:template>
+
+ <!-- processing the content of the OpenDocument content file -->
+ <xsl:template match="office:body/*">
+ <xsl:param name="globalData"/>
<!-- not using of 'apply-styles-and-content' as the content table information migth have been added to 'globalData' variable -->
- <xsl:apply-templates select="@text:style-name | @draw:style-name | @draw:text-style-name | @table:style-name"><!-- | @presentation:style-name -->
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
-
- <xsl:apply-templates>
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
+ <xsl:apply-templates select="@text:style-name | @draw:style-name | @draw:text-style-name | @table:style-name"><!-- | @presentation:style-name -->
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+
+ <xsl:apply-templates>
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
<!-- writing the footer- and endnotes beyond the body -->
- <xsl:call-template name="write-text-nodes">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:call-template>
- </xsl:template>
+ <xsl:call-template name="write-text-nodes">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:call-template>
+ </xsl:template>
<!-- ******************************* -->
<!-- *** User Field Declarations *** -->
<!-- ******************************* -->
- <xsl:template match="text:user-field-get | text:user-field-input">
- <xsl:param name="globalData"/>
+ <xsl:template match="text:user-field-get | text:user-field-input">
+ <xsl:param name="globalData"/>
- <xsl:value-of select="."/>
- </xsl:template>
+ <xsl:value-of select="."/>
+ </xsl:template>
- <xsl:template match="text:conditional-text">
- <xsl:param name="globalData"/>
+ <xsl:template match="text:conditional-text">
+ <xsl:param name="globalData"/>
- <xsl:value-of select="."/>
- </xsl:template>
+ <xsl:value-of select="."/>
+ </xsl:template>
<!-- ODF text fields -->
- <xsl:template match="text:author-initials | text:author-name | text:chapter | text:character-count | text:creation-date | text:creation-time | text:creator | text:date | text:description | text:editing-cycles | text:editing-duration | text:file-name | text:image-count | text:initial-creator | text:keywords | text:modification-date | text:modification-time | text:object-count | text:page-continuation | text:page-count | text:page-number | text:paragraph-count | text:print-date | text:print-time | text:printed-by | text:sender-city | text:sender-company | text:sender-country | text:sender-email | text:sender-fax | text:sender-firstname | text:sender-initials | text:sender-lastname | text:sender-phone-private | text:sender-phone-work | text:sender-position | text:sender-postal-code | text:sender-state-or-province | text:sender-street | text:sender-title | text:sheet-name | text:subject | text:table-count | text:time | text:title | text:user-defined | text:word-count">
- <xsl:param name="globalData"/>
-
- <xsl:element name="span">
- <xsl:attribute name="title">
- <xsl:value-of select="local-name()"/>
- </xsl:attribute>
- <xsl:apply-templates>
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
- </xsl:element>
- </xsl:template>
+ <xsl:template match="text:author-initials | text:author-name | text:chapter | text:character-count | text:creation-date | text:creation-time | text:creator | text:date | text:description | text:editing-cycles | text:editing-duration | text:file-name | text:image-count | text:initial-creator | text:keywords | text:modification-date | text:modification-time | text:object-count | text:page-continuation | text:page-count | text:page-number | text:paragraph-count | text:print-date | text:print-time | text:printed-by | text:sender-city | text:sender-company | text:sender-country | text:sender-email | text:sender-fax | text:sender-firstname | text:sender-initials | text:sender-lastname | text:sender-phone-private | text:sender-phone-work | text:sender-position | text:sender-postal-code | text:sender-state-or-province | text:sender-street | text:sender-title | text:sheet-name | text:subject | text:table-count | text:time | text:title | text:user-defined | text:word-count">
+ <xsl:param name="globalData"/>
+
+ <xsl:element name="span">
+ <xsl:attribute name="title">
+ <xsl:value-of select="local-name()"/>
+ </xsl:attribute>
+ <xsl:apply-templates>
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+ </xsl:element>
+ </xsl:template>
@@ -212,83 +212,83 @@
<!-- *** Textbox *** -->
<!-- *************** -->
- <xsl:template match="draw:text-box">
- <xsl:param name="globalData"/>
-
- <xsl:comment>Next 'div' was a 'draw:text-box'.</xsl:comment>
- <xsl:element name="div">
- <xsl:variable name="dimension">
- <xsl:apply-templates select="@fo:min-width"/>
- <xsl:apply-templates select="@fo:max-width"/>
- <xsl:apply-templates select="@fo:min-height"/>
- <xsl:apply-templates select="@fo:max-height"/>
- </xsl:variable>
- <xsl:if test="$dimension">
- <xsl:attribute name="style">
- <xsl:value-of select="$dimension"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:apply-templates select="@draw:name">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
-
- <xsl:apply-templates select="node()">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
- </xsl:element>
- </xsl:template>
-
- <xsl:template match="@fo:min-width">
- <xsl:text>min-width:</xsl:text>
- <xsl:value-of select="."/>
- <xsl:text>;</xsl:text>
- </xsl:template>
- <xsl:template match="@fo:max-width">
- <xsl:text>max-width:</xsl:text>
- <xsl:value-of select="."/>
- <xsl:text>;</xsl:text>
- </xsl:template>
- <xsl:template match="@fo:min-height">
- <xsl:text>min-height:</xsl:text>
- <xsl:value-of select="."/>
- <xsl:text>;</xsl:text>
- </xsl:template>
- <xsl:template match="@fo:max-height">
- <xsl:text>max-height:</xsl:text>
- <xsl:value-of select="."/>
- <xsl:text>;</xsl:text>
- </xsl:template>
+ <xsl:template match="draw:text-box">
+ <xsl:param name="globalData"/>
+
+ <xsl:comment>Next 'div' was a 'draw:text-box'.</xsl:comment>
+ <xsl:element name="div">
+ <xsl:variable name="dimension">
+ <xsl:apply-templates select="@fo:min-width"/>
+ <xsl:apply-templates select="@fo:max-width"/>
+ <xsl:apply-templates select="@fo:min-height"/>
+ <xsl:apply-templates select="@fo:max-height"/>
+ </xsl:variable>
+ <xsl:if test="$dimension">
+ <xsl:attribute name="style">
+ <xsl:value-of select="$dimension"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:apply-templates select="@draw:name">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+
+ <xsl:apply-templates select="node()">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template match="@fo:min-width">
+ <xsl:text>min-width:</xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>;</xsl:text>
+ </xsl:template>
+ <xsl:template match="@fo:max-width">
+ <xsl:text>max-width:</xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>;</xsl:text>
+ </xsl:template>
+ <xsl:template match="@fo:min-height">
+ <xsl:text>min-height:</xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>;</xsl:text>
+ </xsl:template>
+ <xsl:template match="@fo:max-height">
+ <xsl:text>max-height:</xsl:text>
+ <xsl:value-of select="."/>
+ <xsl:text>;</xsl:text>
+ </xsl:template>
<!-- inline style helper for the 'div' boxes -->
- <xsl:template name="svg:height">
- <xsl:text>height:</xsl:text>
- <xsl:choose>
+ <xsl:template name="svg:height">
+ <xsl:text>height:</xsl:text>
+ <xsl:choose>
<!-- changing the distance measure: inch to in -->
- <xsl:when test="contains(@svg:height, 'inch')">
- <xsl:value-of select="substring-before(@svg:height, 'ch')"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="@svg:height"/>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text>;</xsl:text>
- </xsl:template>
+ <xsl:when test="contains(@svg:height, 'inch')">
+ <xsl:value-of select="substring-before(@svg:height, 'ch')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@svg:height"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>;</xsl:text>
+ </xsl:template>
<!-- inline style helper for the 'div' boxes -->
- <xsl:template name="svg:width">
- <xsl:text>width:</xsl:text>
- <xsl:choose>
+ <xsl:template name="svg:width">
+ <xsl:text>width:</xsl:text>
+ <xsl:choose>
<!-- changing the distance measure: inch to in -->
- <xsl:when test="contains(@svg:width, 'inch')">
- <xsl:value-of select="substring-before(@svg:width, 'ch')"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="@svg:width"/>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text>;</xsl:text>
- </xsl:template>
+ <xsl:when test="contains(@svg:width, 'inch')">
+ <xsl:value-of select="substring-before(@svg:width, 'ch')"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="@svg:width"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>;</xsl:text>
+ </xsl:template>
@@ -296,146 +296,165 @@
<!-- *** Paragraphs *** -->
<!-- ****************** -->
- <xsl:template match="text:p | draw:page">
- <xsl:param name="globalData"/>
+ <xsl:template match="text:p | draw:page">
+ <xsl:param name="globalData"/>
<!-- The footnote symbol is the prefix for a footnote in the footer -->
- <xsl:param name="footnotePrefix"/>
- <!-- 1) In ODF sometimes the followig children are nested
- <text:p>
- <draw:frame>
- <draw:text-box>
- <text:p>
- Which results in a paragraphs (the last text:p) having a paragraph as its anchestor.
- In HTML a 'p' can only have inline documents (no other 'p' as children'),
+ <xsl:param name="footnotePrefix"/>
+ <!-- 1) In ODF sometimes the followig children are nested
+ <text:p>
+ <draw:frame>
+ <draw:text-box>
+ <text:p>
+ Which results in a paragraphs (the last text:p) having a paragraph as its anchestor.
+ In HTML a 'p' can only have inline documents (no other 'p' as children'),
a 'div' will be given for the ancestors instead.
2) ODF images are embedded in a paragraph, but CSS is not able to express a horizontal alignment for an HTML image (text:align is only valid for block elements).
A surrounding 'div' element taking over the image style solves that problem, but the div is invalid as child of a paragraph
- Therefore the paragraph has to be exchanged with a HTML div element
+ Therefore the paragraph has to be exchanged with a HTML div element
-->
- <!-- 2DO page alignment fix - PART1 -->
- <xsl:choose>
- <xsl:when test="draw:frame and ((normalize-space(text()) != '') or (count(*) &gt; 1 and (not(text:soft-page-break) and count(*) = 2)))">
- <!-- Create a div, if there is a 'draw:frame' child with either text (not being whitespace alone) and more than the draw:frame alone and
- not the draw:frame and a soft-page-break alone (which is quite often) -->
-
+ <!-- 2DO page alignment fix - PART1 -->
+ <xsl:variable name="childText"><xsl:apply-templates mode="getAllTextChildren"/></xsl:variable>
+ <xsl:choose>
+ <xsl:when test="name() = 'text:p' and not(*) and (normalize-space($childText) = '')">
+ <!-- WorkAround: Test if the empty paragraph was added after an image, which OOO often does -->
+ <xsl:variable name="isFollowingImage">
+ <xsl:call-template name="follows-empty-paragraphs-and-image">
+ <xsl:with-param name="precedingElement" select="preceding-sibling::node()[1]"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:if test="$isFollowingImage = 'no'">
+ <xsl:call-template name="create-paragraph">
+ <xsl:with-param name="globalData" select="$globalData" />
+ <xsl:with-param name="footnotePrefix" select="$footnotePrefix" />
+ </xsl:call-template>
+ </xsl:if>
+
+ </xsl:when>
+ <xsl:when test="draw:frame and ((normalize-space($childText) != '') or (((count(*) - count(text:soft-page-break)) &gt; 1)))">
+ <!-- If there is a 'draw:frame' child with text (not being whitespace alone) and more than the draw:frame alone and
+ not the draw:frame and a soft-page-break alone (which is quite often) -->
+
<!-- If there is a frame within the text:p or draw:page, its siblings are surrounded as well by a div and are floating (CSS float) -->
- <!-- But it makes no sense to create floating if the frame is alone or only together with a soft-page-break not usable for HTML -->
- <!-- The paragraph is written as DIV as there might be nested paragraphs (see above choose block) -->
- <xsl:choose>
- <xsl:when test="name() = 'text:p'">
- <xsl:comment>Next 'div' was a 'text:p'.</xsl:comment>
- </xsl:when>
- <xsl:otherwise>
- <xsl:comment>Next 'div' was a 'draw:page'.</xsl:comment>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:element name="div">
- <xsl:apply-templates select="@*">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
+ <!-- But it makes no sense to create floating if the frame is alone or only together with a soft-page-break not usable for HTML -->
+ <!-- The paragraph is written as DIV as there might be nested paragraphs (see above choose block) -->
+ <xsl:choose>
+ <xsl:when test="name() = 'text:p'">
+ <xsl:comment>Next 'div' was a 'text:p'.</xsl:comment>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:comment>Next 'div' was a 'draw:page'.</xsl:comment>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:element name="div">
+ <xsl:apply-templates select="@*">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
<!-- the footnote symbol is the prefix for a footnote in the footer -->
- <xsl:copy-of select="$footnotePrefix"/>
-
+ <xsl:copy-of select="$footnotePrefix"/>
<!-- start floating of frame (and siblings) -->
- <xsl:apply-templates select="node()[1]" mode="frameFloating">
- <xsl:with-param name="globalData" select="$globalData" />
- <xsl:with-param name="previousFrameWidths" select="0"/>
- <xsl:with-param name="previousFrameHeights" select="0"/>
- <!-- 2DO for me (Svante) - Not used, uncertain 4now..
- <xsl:with-param name="pageMarginLeft">
- <xsl:call-template name="getPageMarginLeft"/>
- </xsl:with-param>-->
- </xsl:apply-templates>
- </xsl:element>
- <!-- after the last draw:frame sibling the CSS float is disabled
- &#160; is an unbreakable whitespace to give conent to the element and force a browser not to ignore the element -->
- <div style="clear:both; line-height:0; width:0; height:0; margin:0; padding:0;">&#160;</div>
- </xsl:when>
- <xsl:when test="text:tab">
+ <xsl:apply-templates select="node()[1]" mode="frameFloating">
+ <xsl:with-param name="globalData" select="$globalData" />
+ <xsl:with-param name="previousFrameWidths" select="0"/>
+ <xsl:with-param name="previousFrameHeights" select="0"/>
+ <!-- 2DO for me (Svante) - Not used, uncertain 4now..
+ <xsl:with-param name="pageMarginLeft">
+ <xsl:call-template name="getPageMarginLeft"/>
+ </xsl:with-param>-->
+ </xsl:apply-templates>
+ </xsl:element>
+ <!-- after the last draw:frame sibling the CSS float is disabled
+ &#160; is an unbreakable whitespace to give conent to the element and force a browser not to ignore the element -->
+ <div style="clear:both; line-height:0; width:0; height:0; margin:0; padding:0;">&#160;</div>
+ </xsl:when>
+ <xsl:when test="text:tab">
<!-- If there is a tabulator (ie. text:tab) within a paragraph, a heuristic for ODF tabulators creates a
span for every text:tab embracing the following text nodes aligning them according to the tabulator.
A line break or another text:tab starts a new text:span, line break even the tab counter for the line.
-->
- <xsl:element name="p">
- <xsl:apply-templates select="@*">
- <xsl:with-param name="globalData" select="$globalData" />
- </xsl:apply-templates>
+ <xsl:element name="p">
+ <xsl:apply-templates select="@*">
+ <xsl:with-param name="globalData" select="$globalData" />
+ </xsl:apply-templates>
<!-- start with first child of the paragraph -->
- <xsl:variable name="firstChildNode" select="node()[1]" />
- <xsl:apply-templates select="$firstChildNode" mode="tabHandling">
- <xsl:with-param name="globalData" select="$globalData" />
- <xsl:with-param name="tabStops" select="$globalData/all-doc-styles/style[@style:name = current()/@text:style-name]/*/style:tab-stops"/>
- <xsl:with-param name="parentMarginLeft">
+ <xsl:variable name="firstChildNode" select="node()[1]" />
+ <xsl:apply-templates select="$firstChildNode" mode="tabHandling">
+ <xsl:with-param name="globalData" select="$globalData" />
+ <xsl:with-param name="tabStops" select="$globalData/all-doc-styles/style[@style:name = current()/@text:style-name]/*/style:tab-stops"/>
+ <xsl:with-param name="parentMarginLeft">
<!-- Styles of first paragraph in list item, including ancestor styles (inheritance) -->
- <xsl:variable name="paragraphName" select="@text:style-name" />
- <xsl:variable name="imageParagraphStyle" select="$globalData/all-styles/style[@style:name = $paragraphName]/final-properties"/>
+ <xsl:variable name="paragraphName" select="@text:style-name" />
+ <xsl:variable name="imageParagraphStyle" select="$globalData/all-styles/style[@style:name = $paragraphName]/final-properties"/>
<!-- Only the left margin of the first paragraph of a list item will be added to the margin of the complete list (all levels)-->
<!-- 2DO: left-margin in order with bidirectional -->
- <xsl:choose>
- <xsl:when test="contains($imageParagraphStyle, 'margin-left:')">
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="normalize-space(substring-before(substring-after($imageParagraphStyle, 'margin-left:'), ';'))"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>0</xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- <xsl:with-param name="pageMarginLeft">
- <xsl:call-template name="getPageMarginLeft"/>
- </xsl:with-param>
- </xsl:apply-templates>
- </xsl:element>
- </xsl:when>
- <xsl:otherwise>
- <xsl:choose>
+ <xsl:choose>
+ <xsl:when test="contains($imageParagraphStyle, 'margin-left:')">
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="normalize-space(substring-before(substring-after($imageParagraphStyle, 'margin-left:'), ';'))"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ <xsl:with-param name="pageMarginLeft">
+ <xsl:call-template name="getPageMarginLeft"/>
+ </xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:element>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
<!-- !!Check if paragraph is empty!!
OOo writes out empty paragraphs layouted behind an image (= draw:image within draw:frame)
those have to be neglected in HTML -->
- <xsl:when test="name() = 'text:p' and not(text()) and not(*)">
- <xsl:variable name="isFollowingImage">
- <xsl:call-template name="follows-empty-paragraphs-and-image">
- <xsl:with-param name="precedingElement" select="preceding-sibling::node()[1]"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:if test="$isFollowingImage = 'yes'">
- <xsl:call-template name="create-paragraph">
- <xsl:with-param name="globalData" select="$globalData" />
- <xsl:with-param name="footnotePrefix" select="$footnotePrefix" />
- </xsl:call-template>
- </xsl:if>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="create-paragraph">
- <xsl:with-param name="globalData" select="$globalData" />
- <xsl:with-param name="footnotePrefix" select="$footnotePrefix" />
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
+ <xsl:when test="name() = 'text:p' and not($childText) and not(*)">
+ <xsl:variable name="isFollowingImage">
+ <xsl:call-template name="follows-empty-paragraphs-and-image">
+ <xsl:with-param name="precedingElement" select="preceding-sibling::node()[1]"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:if test="$isFollowingImage = 'no'">
+ <xsl:call-template name="create-paragraph">
+ <xsl:with-param name="globalData" select="$globalData" />
+ <xsl:with-param name="footnotePrefix" select="$footnotePrefix" />
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="create-paragraph">
+ <xsl:with-param name="globalData" select="$globalData" />
+ <xsl:with-param name="footnotePrefix" select="$footnotePrefix" />
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+ <!-- Return the text -->
+ <xsl:template match="text()" mode="getAllTextChildren">
+ <xsl:value-of select="."/>
+ </xsl:template>
<!-- A span will be created for every text:tab embracing the following text nodes.
A line break or another text:tab starts a new text:span -->
- <xsl:template match="* | text()" mode="tabHandling">
- <xsl:param name="globalData"/>
- <xsl:param name="tabStops"/>
+ <xsl:template match="* | text()" mode="tabHandling">
+ <xsl:param name="globalData"/>
+ <xsl:param name="tabStops"/>
<!-- there can be multiple tabs in one line, tabNo guesses the one to apply. By default the first i.e. "1" -->
- <xsl:param name="tabCount" select="0"/>
- <xsl:param name="parentMarginLeft" />
- <xsl:param name="pageMarginLeft" />
-
+ <xsl:param name="tabCount" select="0"/>
+ <xsl:param name="parentMarginLeft" />
+ <xsl:param name="pageMarginLeft" />
+
<!-- 2DO: EXCHANGE FOLLOING SIBLING BY VARIABLE -->
- <xsl:variable name="followingSiblingNode" select="following-sibling::node()[1]"/>
+ <xsl:variable name="followingSiblingNode" select="following-sibling::node()[1]"/>
+
+
+ <!--
+ Every tabulator indents its following content, encapuslated in a span
+ element.
-
- <!--
- Every tabulator indents its following content, encapuslated in a span
- element.
-
This template have two modes:
-
+
1) Before the first tabulator it will match as usually paragraph content
to HTML.
2) After the first paragraph it will always triggers two recursions.
@@ -444,604 +463,621 @@
The other calls this template and will now ignore anything else than
TAB and LINE-BREAK.
-
+
The tabulators and linebreaks are being iterated, one by one to keep track of the tab number
-->
- <xsl:choose>
- <xsl:when test="name() = 'text:tab'">
+ <xsl:choose>
+ <xsl:when test="name() = 'text:tab'">
<!-- every frame sibling have to be incapuslated within a div with left indent -->
- <xsl:element name="span">
- <xsl:choose>
- <xsl:when test="count($tabStops/style:tab-stop) &lt; 3">
+ <xsl:element name="span">
+ <xsl:choose>
+ <xsl:when test="count($tabStops/style:tab-stop) &lt; 3">
<!-- only allow the heuristic when the style has less than 3 TABS -->
- <xsl:attribute name="style">
- <xsl:call-template name="createTabIndent">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="tabStops" select="$tabStops"/>
- <xsl:with-param name="tabCount" select="$tabCount + 1"/>
- <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
- <xsl:with-param name="pageMarginLeft" select="$pageMarginLeft"/>
- </xsl:call-template>
- </xsl:attribute>
- </xsl:when>
- <xsl:otherwise>
+ <xsl:attribute name="style">
+ <xsl:call-template name="createTabIndent">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="tabStops" select="$tabStops"/>
+ <xsl:with-param name="tabCount" select="$tabCount + 1"/>
+ <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
+ <xsl:with-param name="pageMarginLeft" select="$pageMarginLeft"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ </xsl:when>
+ <xsl:otherwise>
<!-- if there are more than 3 TABS in the style, create a none-breakable-space as whitespace -->
- <xsl:text>&#160;</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:apply-templates select="following-sibling::node()[1]" mode="tabContentHandling">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
- </xsl:element>
- <xsl:apply-templates select="following-sibling::node()[1]" mode="tabHandling">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="tabStops" select="$tabStops"/>
- <xsl:with-param name="tabCount" select="$tabCount + 1"/>
- <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
- <xsl:with-param name="pageMarginLeft" select="$pageMarginLeft"/>
- </xsl:apply-templates>
- </xsl:when>
- <xsl:when test="name() = 'text:line-break'">
+ <xsl:text>&#160;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:apply-templates select="following-sibling::node()[1]" mode="tabContentHandling">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+ </xsl:element>
+ <xsl:apply-templates select="following-sibling::node()[1]" mode="tabHandling">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="tabStops" select="$tabStops"/>
+ <xsl:with-param name="tabCount" select="$tabCount + 1"/>
+ <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
+ <xsl:with-param name="pageMarginLeft" select="$pageMarginLeft"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test="name() = 'text:line-break'">
<!-- A line-break resets the tabCount to '0' -->
- <br/>
- <xsl:apply-templates select="following-sibling::node()[1]" mode="tabHandling">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="tabStops" select="$tabStops"/>
- <xsl:with-param name="tabCount" select="0"/>
- <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
- <xsl:with-param name="pageMarginLeft" select="$pageMarginLeft"/>
- </xsl:apply-templates>
- </xsl:when>
- <xsl:otherwise>
+ <br/>
+ <xsl:apply-templates select="following-sibling::node()[1]" mode="tabHandling">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="tabStops" select="$tabStops"/>
+ <xsl:with-param name="tabCount" select="0"/>
+ <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
+ <xsl:with-param name="pageMarginLeft" select="$pageMarginLeft"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
<!-- only before the first tab all content is written out -->
- <xsl:if test="$tabCount = 0">
- <xsl:apply-templates select=".">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
- </xsl:if>
- <xsl:apply-templates select="following-sibling::node()[1]" mode="tabHandling">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="tabStops" select="$tabStops"/>
- <xsl:with-param name="tabCount" select="$tabCount"/>
- <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
- <xsl:with-param name="pageMarginLeft" select="$pageMarginLeft"/>
- </xsl:apply-templates>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <!--
- This recursion creates the content of a tab (i.e. following siblings
+ <xsl:if test="$tabCount = 0">
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ <xsl:apply-templates select="following-sibling::node()[1]" mode="tabHandling">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="tabStops" select="$tabStops"/>
+ <xsl:with-param name="tabCount" select="$tabCount"/>
+ <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
+ <xsl:with-param name="pageMarginLeft" select="$pageMarginLeft"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!--
+ This recursion creates the content of a tab (i.e. following siblings
till next TAB or LINE BREAK) and ends with the next
- TAB, LINE-BREAK or with the end of the paragraph.
+ TAB, LINE-BREAK or with the end of the paragraph.
-->
- <xsl:template match="* | text()" mode="tabContentHandling">
- <xsl:param name="globalData"/>
+ <xsl:template match="* | text()" mode="tabContentHandling">
+ <xsl:param name="globalData"/>
- <xsl:if test="(name() != 'text:tab') and (name() != 'text:line-break')">
+ <xsl:if test="(name() != 'text:tab') and (name() != 'text:line-break')">
<!-- Write out content -->
- <xsl:apply-templates select=".">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
<!-- Apply for the next node -->
- <xsl:apply-templates select="following-sibling::node()[1]" mode="tabContentHandling">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
- </xsl:if>
- </xsl:template>
-
- <xsl:template name="createTabIndent">
- <xsl:param name="globalData"/>
- <xsl:param name="tabStops"/>
- <xsl:param name="tabCount"/>
- <xsl:param name="parentMarginLeft" />
- <xsl:param name="pageMarginLeft" />
-
- <xsl:text>position:absolute;left:</xsl:text>
- <xsl:variable name="tabPosition">
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="$tabStops/style:tab-stop[$tabCount]/@style:position"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:variable name="tabIndent">
- <xsl:choose>
- <xsl:when test="$tabStops/style:tab-stop[$tabCount]/@style:type = 'center'">
+ <xsl:apply-templates select="following-sibling::node()[1]" mode="tabContentHandling">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </xsl:template>
+
+ <xsl:template name="createTabIndent">
+ <xsl:param name="globalData"/>
+ <xsl:param name="tabStops"/>
+ <xsl:param name="tabCount"/>
+ <xsl:param name="parentMarginLeft" />
+ <xsl:param name="pageMarginLeft" />
+
+ <xsl:text>position:absolute;left:</xsl:text>
+ <xsl:variable name="tabPosition">
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="$tabStops/style:tab-stop[$tabCount]/@style:position"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="tabIndent">
+ <xsl:choose>
+ <xsl:when test="$tabStops/style:tab-stop[$tabCount]/@style:type = 'center'">
<!-- in case of style:type 'center' the text is even before the tab stop,
centered around the beginning. As I see currently no way in mapping this,
therefore I do some HEURISTIC (minus -2.5cm) -->
- <xsl:value-of select="$tabPosition + $parentMarginLeft + $pageMarginLeft - 2.5"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$tabPosition + $parentMarginLeft + $pageMarginLeft"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:choose>
- <xsl:when test="$tabIndent='NaN'">
- <xsl:variable name="tabPosition">
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="$tabStops/style:tab-stop[last()]/@style:position"/>
- </xsl:call-template>
- </xsl:variable>
+ <xsl:value-of select="$tabPosition + $parentMarginLeft + $pageMarginLeft - 2.5"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$tabPosition + $parentMarginLeft + $pageMarginLeft"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
+ <xsl:when test="$tabIndent='NaN'">
+ <xsl:variable name="tabPosition">
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="$tabStops/style:tab-stop[last()]/@style:position"/>
+ </xsl:call-template>
+ </xsl:variable>
<!-- Heuristic: for every tab that is more than specified give a further 1 cm -->
- <xsl:value-of select="$parentMarginLeft + $tabPosition + count($tabStops/style:tab-stop) - $tabCount"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$tabIndent"/>
- </xsl:otherwise>
- </xsl:choose>
- <xsl:text>cm;</xsl:text>
- <xsl:apply-templates select="$tabStops/style:tab-stop[$tabCount]/@style:type"/>
- </xsl:template>
-
+ <xsl:value-of select="$parentMarginLeft + $tabPosition + count($tabStops/style:tab-stop) - $tabCount"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$tabIndent"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>cm;</xsl:text>
+ <xsl:apply-templates select="$tabStops/style:tab-stop[$tabCount]/@style:type"/>
+ </xsl:template>
+
<!-- OOo writes out empty paragraphs layouted behind an image,
those have to be neglected in HTML
This method checks if an empty paragraph is of that kind! -->
- <xsl:template name="follows-empty-paragraphs-and-image">
- <xsl:param name="precedingElement" />
- <xsl:param name="elementToCheck" select="1"/>
-
- <xsl:choose>
+ <xsl:template name="follows-empty-paragraphs-and-image">
+ <xsl:param name="precedingElement" />
+ <xsl:param name="elementToCheck" select="1"/>
+ <xsl:choose>
<!-- OOo writes out empty paragraphs layouted behind the image,
- those have to be neglected in HTML -->
- <xsl:when test="name($precedingElement) = 'text:p' and not($precedingElement/text()) and not($precedingElement/*)">
- <xsl:call-template name="follows-empty-paragraphs-and-image">
- <xsl:with-param name="precedingElement" select="preceding-sibling::*[$elementToCheck]"/>
- <xsl:with-param name="elementToCheck" select="$elementToCheck +1"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="$precedingElement/draw:frame">no</xsl:when>
- <xsl:otherwise>yes</xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template name="create-paragraph">
- <xsl:param name="globalData"/>
+ those have to be neglected in HTML
+ <xsl:when test="name() = 'text:p' and (normalize-space($childText) = '')"> -->
+ <!-- WorkAround: Test if the empty paragraph was added after an image, which OOO often does -->
+ <xsl:when test="(name($precedingElement) = 'text:p' and not($precedingElement/text()) and not($precedingElement/*))">
+ <xsl:call-template name="follows-empty-paragraphs-and-image">
+ <xsl:with-param name="precedingElement" select="preceding-sibling::*[$elementToCheck]"/>
+ <xsl:with-param name="elementToCheck" select="$elementToCheck +1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="$precedingElement/draw:frame">yes</xsl:when>
+ <xsl:otherwise>no</xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="create-paragraph">
+ <xsl:param name="globalData"/>
<!-- the footnote symbol is the prefix for a footnote in the footer -->
- <xsl:param name="footnotePrefix"/>
-
- <!-- xhtml:p may only contain inline elements.
- If there is one frame beyond, div must be used! -->
- <xsl:variable name="elementName">
- <xsl:choose>
- <xsl:when test="descendant::draw:frame[1] or descendant::text:p[1]">div</xsl:when>
- <xsl:otherwise>p</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:element name="{$elementName}">
- <xsl:choose>
+ <xsl:param name="footnotePrefix"/>
+
+ <!-- xhtml:p may only contain inline elements.
+ If there is one frame beyond, div must be used! -->
+ <xsl:variable name="elementName">
+ <xsl:choose>
+ <xsl:when test="descendant::draw:frame[1] or descendant::text:p[1]">div</xsl:when>
+ <xsl:otherwise>p</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:element name="{$elementName}">
+ <xsl:choose>
<!-- in ODF borders of paragraphs will be merged by default. Merging means the adjactend paragraphs are building a unit,
where only the first and the last will have have a border to the surrounding (top / bottom border)
<xsl:variable name="precedingParagraphStyle" select="preceding-sibling::*[1][name() = 'text:p']/@text:style-name"/>
<xsl:variable name="followingParagraphStyle" select="following-sibling::*[1][name() = 'text:p']/@text:style-name"/>
-->
- <xsl:when test="$globalData/all-styles/style[@style:name = current()/@text:style-name]/@mergedBorders">
- <xsl:variable name="precedingParagraphStyle" select="preceding-sibling::*[1][name() = 'text:p']/@text:style-name"/>
- <xsl:variable name="followingParagraphStyle" select="following-sibling::*[1][name() = 'text:p']/@text:style-name"/>
- <xsl:choose>
- <xsl:when test="$precedingParagraphStyle or $followingParagraphStyle">
- <xsl:variable name="isPrecedingBorderParagraph" select="$globalData/all-styles/style[@style:name = $precedingParagraphStyle]/@mergedBorders"/>
- <xsl:variable name="isFollowingBorderParagraph" select="$globalData/all-styles/style[@style:name = $followingParagraphStyle]/@mergedBorders"/>
- <xsl:choose>
- <xsl:when test="not($isPrecedingBorderParagraph) and $isFollowingBorderParagraph">
- <xsl:attribute name="class">
- <xsl:value-of select="concat(translate(@text:style-name, '.,;: %()[]/\+', '_____________'), '_borderStart')"/>
- </xsl:attribute>
- <xsl:apply-templates>
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
- </xsl:when>
- <xsl:when test="$isPrecedingBorderParagraph and not($isFollowingBorderParagraph)">
- <xsl:attribute name="class">
- <xsl:value-of select="concat(translate(@text:style-name, '.,;: %()[]/\+', '_____________'), '_borderEnd')"/>
- </xsl:attribute>
- <xsl:apply-templates>
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
- </xsl:when>
- <xsl:otherwise>
- <xsl:attribute name="class">
- <xsl:value-of select="translate(@text:style-name, '.,;: %()[]/\+', '_____________')"/>
- </xsl:attribute>
- <xsl:apply-templates>
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="write-paragraph">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="write-paragraph">
- <xsl:with-param name="globalData" select="$globalData" />
- <xsl:with-param name="footnotePrefix" select="$footnotePrefix" />
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- </xsl:template>
-
- <xsl:template name="write-paragraph">
- <xsl:param name="globalData"/>
+ <xsl:when test="$globalData/all-styles/style[@style:name = current()/@text:style-name]/@mergedBorders">
+ <xsl:variable name="precedingParagraphStyle" select="preceding-sibling::*[1][name() = 'text:p']/@text:style-name"/>
+ <xsl:variable name="followingParagraphStyle" select="following-sibling::*[1][name() = 'text:p']/@text:style-name"/>
+ <xsl:choose>
+ <xsl:when test="$precedingParagraphStyle or $followingParagraphStyle">
+ <xsl:variable name="isPrecedingBorderParagraph" select="$globalData/all-styles/style[@style:name = $precedingParagraphStyle]/@mergedBorders"/>
+ <xsl:variable name="isFollowingBorderParagraph" select="$globalData/all-styles/style[@style:name = $followingParagraphStyle]/@mergedBorders"/>
+ <xsl:choose>
+ <xsl:when test="not($isPrecedingBorderParagraph) and $isFollowingBorderParagraph">
+ <xsl:attribute name="class">
+ <xsl:value-of select="concat(translate(@text:style-name, '.,;: %()[]/\+', '_____________'), '_borderStart')"/>
+ </xsl:attribute>
+ <xsl:apply-templates>
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test="$isPrecedingBorderParagraph and not($isFollowingBorderParagraph)">
+ <xsl:attribute name="class">
+ <xsl:value-of select="concat(translate(@text:style-name, '.,;: %()[]/\+', '_____________'), '_borderEnd')"/>
+ </xsl:attribute>
+ <xsl:apply-templates>
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:attribute name="class">
+ <xsl:value-of select="translate(@text:style-name, '.,;: %()[]/\+', '_____________')"/>
+ </xsl:attribute>
+ <xsl:apply-templates>
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="write-paragraph">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="write-paragraph">
+ <xsl:with-param name="globalData" select="$globalData" />
+ <xsl:with-param name="footnotePrefix" select="$footnotePrefix" />
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template name="write-paragraph">
+ <xsl:param name="globalData"/>
<!-- the footnote symbol is the prefix for a footnote in the footer -->
- <xsl:param name="footnotePrefix" />
+ <xsl:param name="footnotePrefix" />
<!-- empty paragraph tags does not provoke an carridge return,
therefore an non breakable space (&nbsp) have been inserted.-->
- <xsl:choose>
- <xsl:when test="node()">
- <xsl:call-template name="apply-styles-and-content">
- <xsl:with-param name="globalData" select="$globalData" />
- <xsl:with-param name="footnotePrefix" select="$footnotePrefix" />
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="apply-styles-and-content">
- <xsl:with-param name="globalData" select="$globalData" />
- <xsl:with-param name="footnotePrefix" select="$footnotePrefix" />
- </xsl:call-template>
- <xsl:text>&#160;</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template match="style:tab-stop/@style:type">
- <xsl:text>text-align:</xsl:text>
- <xsl:choose>
- <xsl:when test=". = 'left'">left</xsl:when>
- <xsl:when test=". = 'right'">right</xsl:when>
- <xsl:when test=". = 'center'">center</xsl:when>
- <xsl:otherwise>justify</xsl:otherwise>
- </xsl:choose>
- <xsl:text>;</xsl:text>
- </xsl:template>
-
- <!-- As soon a frame is within a paragraph (text:p) or page:frame, every element floating (CSS) and worked out in sequence.
+ <xsl:choose>
+ <xsl:when test="node()">
+ <xsl:call-template name="apply-styles-and-content">
+ <xsl:with-param name="globalData" select="$globalData" />
+ <xsl:with-param name="footnotePrefix" select="$footnotePrefix" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="apply-styles-and-content">
+ <xsl:with-param name="globalData" select="$globalData" />
+ <xsl:with-param name="footnotePrefix" select="$footnotePrefix" />
+ </xsl:call-template>
+ <xsl:text>&#160;</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="style:tab-stop/@style:type">
+ <xsl:text>text-align:</xsl:text>
+ <xsl:choose>
+ <xsl:when test=". = 'left'">left</xsl:when>
+ <xsl:when test=". = 'right'">right</xsl:when>
+ <xsl:when test=". = 'center'">center</xsl:when>
+ <xsl:otherwise>justify</xsl:otherwise>
+ </xsl:choose>
+ <xsl:text>;</xsl:text>
+ </xsl:template>
+
+ <!-- As soon a frame is within a paragraph (text:p) or page:frame, every child element is floating (CSS) and worked out in sequence.
Accumulating prior frame width and adding parent's left margin -->
-
- <!-- Matching all elements and text beyond a paragraph/text:page which are sibling of a draw:frame -->
- <xsl:template match="* | text()" mode="frameFloating">
- <xsl:param name="globalData"/>
- <xsl:param name="previousFrameWidths" select="0"/>
- <xsl:param name="previousFrameHeights" select="0" />
+ <!-- Matching all elements and text beyond a paragraph/text:page which are sibling of a draw:frame -->
+ <xsl:template match="* | text()" mode="frameFloating">
+ <xsl:param name="globalData"/>
+ <xsl:param name="previousFrameWidths" select="0"/>
+ <xsl:param name="previousFrameHeights" select="0" />
<!-- it becomes true for siblings after a draw:frame -->
- <xsl:param name="createDiv" select="false()"/>
- <xsl:param name="noDivBefore" select="true()"/>
- <xsl:param name="leftPosition" />
- <xsl:param name="parentMarginLeft" />
- <xsl:param name="frameAlignedToParagraphWithSvgY" />
-
- <xsl:choose>
- <xsl:when test="name() = 'draw:frame'">
- <xsl:copy-of select="$frameAlignedToParagraphWithSvgY"/>
-
- <!-- if the first node is a draw:frame create a div -->
- <xsl:call-template name="createDrawFrame">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths"/>
- <xsl:with-param name="previousFrameHeights" select="$previousFrameHeights"/>
- <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
- </xsl:call-template>
- <!-- next elements will be called after the creation with the new indent (plus width of frame) -->
- </xsl:when>
- <xsl:otherwise>
- <xsl:variable name="nextSiblingIsFrame" select="name(following-sibling::node()[1]) = 'draw:frame'"/>
- <xsl:choose>
- <xsl:when test="$createDiv and normalize-space(.) != ''">
+ <xsl:param name="createDiv" select="false()"/>
+ <xsl:param name="noDivBefore" select="true()"/>
+ <xsl:param name="leftPosition" />
+ <xsl:param name="parentMarginLeft" />
+ <xsl:param name="frameAlignedToParagraphWithSvgY" />
+
+ <xsl:choose>
+ <xsl:when test="name() = 'draw:frame'">
+ <xsl:copy-of select="$frameAlignedToParagraphWithSvgY"/>
+
+ <!-- if the first node is a draw:frame create a div -->
+ <xsl:call-template name="createDrawFrame">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths"/>
+ <xsl:with-param name="previousFrameHeights" select="$previousFrameHeights"/>
+ <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
+ </xsl:call-template>
+ <!-- next elements will be called after the creation with the new indent (plus width of frame) -->
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:variable name="nextSiblingIsFrame" select="name(following-sibling::node()[1]) = 'draw:frame'"/>
+ <xsl:choose>
+ <xsl:when test="$createDiv and normalize-space(.) != ''">
<!-- every following frame sibling till the next draw:frame
- have to be incapuslated within a div with left indent.
- To be moved alltogether arcording the indent (usually right) -->
- <xsl:comment>Next 'div' added for floating.</xsl:comment>
- <xsl:element name="div">
- <xsl:attribute name="style">
- <xsl:text>position:relative; left:</xsl:text>
- <xsl:value-of select="$leftPosition"/>
- <xsl:text>cm;</xsl:text>
- </xsl:attribute>
- <xsl:apply-templates select=".">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
+ have to be incapuslated within a div with left indent.
+ To be moved alltogether arcording the indent (usually right) -->
+ <xsl:comment>Next 'div' added for floating.</xsl:comment>
+ <xsl:element name="div">
+ <xsl:attribute name="style">
+ <xsl:text>position:relative; left:</xsl:text>
+ <xsl:value-of select="$leftPosition"/>
+ <xsl:text>cm;</xsl:text>
+ </xsl:attribute>
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
<!-- if it is a frame sibling it will be NOT incapuslated within the div (as already within one) -->
- <xsl:if test="not($nextSiblingIsFrame)">
- <xsl:apply-templates select="following-sibling::node()[1]" mode="frameFloating">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths"/>
- <xsl:with-param name="previousFrameHeights" select="$previousFrameHeights"/>
- <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
- <xsl:with-param name="leftPosition" select="$leftPosition"/>
- <xsl:with-param name="createDiv" select="false()"/>
- <xsl:with-param name="noDivBefore" select="$noDivBefore"/>
- <xsl:with-param name="frameAlignedToParagraphWithSvgY" select="$frameAlignedToParagraphWithSvgY"/>
- </xsl:apply-templates>
- </xsl:if>
- </xsl:element>
- <xsl:copy-of select="$frameAlignedToParagraphWithSvgY"/>
-
- <!-- Other draw:frame will be created outside of the div element -->
- <xsl:apply-templates select="following-sibling::draw:frame[1]" mode="frameFloating">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths"/>
- <xsl:with-param name="previousFrameHeights" select="$previousFrameHeights"/>
- <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
- <xsl:with-param name="leftPosition" select="$leftPosition"/>
- <xsl:with-param name="frameAlignedToParagraphWithSvgY" select="$frameAlignedToParagraphWithSvgY"/>
- </xsl:apply-templates>
- </xsl:when>
- <xsl:when test="not($createDiv)">
- <xsl:apply-templates select=".">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="frameAlignedToParagraphWithSvgY" select="$frameAlignedToParagraphWithSvgY"/>
- </xsl:apply-templates>
- <xsl:if test="not($nextSiblingIsFrame) or $noDivBefore">
- <xsl:variable name="followingSibling" select="following-sibling::node()[1]"/>
- <xsl:choose>
- <xsl:when test="normalize-space($followingSibling) != ''">
- <xsl:apply-templates select="$followingSibling" mode="frameFloating">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths"/>
- <xsl:with-param name="previousFrameHeights" select="$previousFrameHeights"/>
- <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
- <xsl:with-param name="leftPosition" select="$leftPosition"/>
- <xsl:with-param name="createDiv" select="false()"/>
- <xsl:with-param name="noDivBefore" select="$noDivBefore"/>
- <xsl:with-param name="frameAlignedToParagraphWithSvgY" select="$frameAlignedToParagraphWithSvgY"/>
- </xsl:apply-templates>
- </xsl:when>
- <xsl:otherwise>
- <xsl:copy-of select="$frameAlignedToParagraphWithSvgY"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- </xsl:when>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
+ <xsl:if test="not($nextSiblingIsFrame)">
+ <xsl:apply-templates select="following-sibling::node()[1]" mode="frameFloating">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths"/>
+ <xsl:with-param name="previousFrameHeights" select="$previousFrameHeights"/>
+ <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
+ <xsl:with-param name="leftPosition" select="$leftPosition"/>
+ <xsl:with-param name="createDiv" select="false()"/>
+ <xsl:with-param name="noDivBefore" select="$noDivBefore"/>
+ <xsl:with-param name="frameAlignedToParagraphWithSvgY" select="$frameAlignedToParagraphWithSvgY"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </xsl:element>
+ <xsl:copy-of select="$frameAlignedToParagraphWithSvgY"/>
+
+ <!-- Other draw:frame will be created outside of the div element -->
+ <xsl:apply-templates select="following-sibling::draw:frame[1]" mode="frameFloating">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths"/>
+ <xsl:with-param name="previousFrameHeights" select="$previousFrameHeights"/>
+ <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
+ <xsl:with-param name="leftPosition" select="$leftPosition"/>
+ <xsl:with-param name="frameAlignedToParagraphWithSvgY" select="$frameAlignedToParagraphWithSvgY"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:when test="not($createDiv)">
+ <xsl:apply-templates select=".">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="frameAlignedToParagraphWithSvgY" select="$frameAlignedToParagraphWithSvgY"/>
+ </xsl:apply-templates>
+ <xsl:if test="not($nextSiblingIsFrame) or $noDivBefore">
+ <xsl:apply-templates select="following-sibling::node()[1]" mode="frameFloating">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths"/>
+ <xsl:with-param name="previousFrameHeights" select="$previousFrameHeights"/>
+ <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
+ <xsl:with-param name="leftPosition" select="$leftPosition"/>
+ <xsl:with-param name="createDiv" select="false()"/>
+ <xsl:with-param name="noDivBefore" select="$noDivBefore"/>
+ <xsl:with-param name="frameAlignedToParagraphWithSvgY" select="$frameAlignedToParagraphWithSvgY"/>
+ </xsl:apply-templates>
+ </xsl:if>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <!-- A XML node other than text or element (e.g. commment) should not stop the recursion -->
+ <xsl:template match="comment()" mode="frameFloating">
+ <xsl:param name="globalData"/>
+ <xsl:param name="previousFrameWidths" select="0"/>
+ <xsl:param name="previousFrameHeights" select="0" />
+ <!-- it becomes true for siblings after a draw:frame -->
+ <xsl:param name="createDiv" select="false()"/>
+ <xsl:param name="noDivBefore" select="true()"/>
+ <xsl:param name="leftPosition" />
+ <xsl:param name="parentMarginLeft" />
+ <xsl:param name="frameAlignedToParagraphWithSvgY" />
+
+ <xsl:apply-templates select="following-sibling::node()[1]" mode="frameFloating">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths"/>
+ <xsl:with-param name="parentMarginLeft" select="$parentMarginLeft"/>
+ <xsl:with-param name="leftPosition" select="$leftPosition"/>
+ <xsl:with-param name="createDiv" select="$createDiv"/>
+ <xsl:with-param name="noDivBefore" select="$noDivBefore"/>
+ </xsl:apply-templates>
+ </xsl:template>
+
+
<!-- As draw:fame may occure within more elements than in text:p and draw:page -->
- <xsl:template match="draw:frame">
- <xsl:param name="globalData"/>
- <xsl:param name="previousFrameWidths" select="0"/>
- <xsl:param name="previousFrameHeights" select="0" />
-
- <xsl:call-template name="createDrawFrame">
- <xsl:with-param name="globalData" select="$globalData" />
- <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths"/>
- <xsl:with-param name="previousFrameHeights" select="$previousFrameHeights"/>
- </xsl:call-template>
- <!-- after the last draw:frame sibling the CSS float is disabled -->
- <div style="clear:both; line-height:0; width:0; height:0; margin:0; padding:0;">&#160;</div>
- </xsl:template>
-
- <xsl:template name="getPageMarginLeft">
+ <xsl:template match="draw:frame">
+ <xsl:param name="globalData"/>
+ <xsl:param name="previousFrameWidths" select="0"/>
+ <xsl:param name="previousFrameHeights" select="0" />
+
+ <xsl:call-template name="createDrawFrame">
+ <xsl:with-param name="globalData" select="$globalData" />
+ <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths"/>
+ <xsl:with-param name="previousFrameHeights" select="$previousFrameHeights"/>
+ </xsl:call-template>
+ <!-- after the last draw:frame sibling the CSS float is disabled -->
+ <div style="clear:both; line-height:0; width:0; height:0; margin:0; padding:0;">&#160;</div>
+ </xsl:template>
+
+ <xsl:template name="getPageMarginLeft">
<!-- approximation to find the correct master page style (with page dimensions) -->
- <xsl:variable name="masterPageNames">
+ <xsl:variable name="masterPageNames">
<!-- Loop over every style:style containing a @style:master-page-name attribute -->
- <xsl:for-each select="key('masterPage','count')">
+ <xsl:for-each select="key('masterPage','count')">
<!-- Check if this style is being used in the body -->
- <xsl:if test="key('elementUsingStyle', ../@style:name)">
+ <xsl:if test="key('elementUsingStyle', ../@style:name)">
<!-- Check every master-page-name if it is not emtpy and return as ';' separated list -->
- <xsl:if test="string-length(../@style:master-page-name) &gt; 0">
- <xsl:value-of select="../@style:master-page-name"/>;</xsl:if>
- </xsl:if>
- </xsl:for-each>
- </xsl:variable>
+ <xsl:if test="string-length(../@style:master-page-name) &gt; 0">
+ <xsl:value-of select="../@style:master-page-name"/>;</xsl:if>
+ </xsl:if>
+ </xsl:for-each>
+ </xsl:variable>
<!-- Take the first of the masterpage list and get the according style:master-page element and find the @style:page-layout-name -->
- <xsl:variable name="pageLayoutName" select="key('masterPageElements', substring-before($masterPageNames,';'))/@style:page-layout-name"/>
+ <xsl:variable name="pageLayoutName" select="key('masterPageElements', substring-before($masterPageNames,';'))/@style:page-layout-name"/>
<!-- Find the according style:page-layout and store the properties in a variable -->
- <xsl:variable name="pageMarginLeftAttr" select="key('pageLayoutElements', $pageLayoutName)/style:page-layout-properties/@fo:margin-left"/>
- <xsl:choose>
- <xsl:when test="$pageMarginLeftAttr">
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="$pageMarginLeftAttr"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>0</xsl:otherwise>
- </xsl:choose>
- </xsl:template>
+ <xsl:variable name="pageMarginLeftAttr" select="key('pageLayoutElements', $pageLayoutName)/style:page-layout-properties/@fo:margin-left"/>
+ <xsl:choose>
+ <xsl:when test="$pageMarginLeftAttr">
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="$pageMarginLeftAttr"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
<!-- Elements and text aside of a draw:frame are floating, here a div is being created.
- Either for a draw:frame or for text and other elements floating aside -->
- <xsl:template name="createDrawFrame">
- <xsl:param name="globalData"/>
- <xsl:param name="previousFrameWidths" select="0"/>
- <xsl:param name="previousFrameHeights" select="0" />
- <xsl:param name="parentMarginLeft"/>
-
- <xsl:variable name="parentMarginLeftNew">
- <xsl:choose>
- <xsl:when test="string-length(normalize-space($parentMarginLeft)) &lt; 1">
+ Either for a draw:frame or for text and other elements floating aside -->
+ <xsl:template name="createDrawFrame">
+ <xsl:param name="globalData"/>
+ <xsl:param name="previousFrameWidths" select="0"/>
+ <xsl:param name="previousFrameHeights" select="0" />
+ <xsl:param name="parentMarginLeft"/>
+
+ <xsl:variable name="parentMarginLeftNew">
+ <xsl:choose>
+ <xsl:when test="string-length(normalize-space($parentMarginLeft)) &lt; 1">
<!-- Styles of first paragraph in list item, including ancestor styles (inheritance) -->
- <xsl:variable name="paragraphName" select="parent::*/@text:style-name" />
- <xsl:variable name="imageParagraphStyle" select="$globalData/all-styles/style[@style:name = $paragraphName]/final-properties"/>
+ <xsl:variable name="paragraphName" select="parent::*/@text:style-name" />
+ <xsl:variable name="imageParagraphStyle" select="$globalData/all-styles/style[@style:name = $paragraphName]/final-properties"/>
<!-- Only the left margin of the first paragraph of a list item will be added to the margin of the complete list (all levels)-->
- <xsl:choose>
- <xsl:when test="contains($imageParagraphStyle, 'margin-left:')">
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="normalize-space(substring-before(substring-after($imageParagraphStyle, 'margin-left:'), ';'))"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>0</xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$parentMarginLeft"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:variable name="svgWidth">
- <xsl:choose>
- <xsl:when test="@svg:width">
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="@svg:width"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>0</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:variable name="svgX">
- <xsl:choose>
- <xsl:when test="@svg:x">
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="@svg:x"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>0</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:variable name="leftPosition" select="$svgX - $parentMarginLeftNew - $previousFrameWidths"/>
- <xsl:variable name="svgY">
- <xsl:choose>
- <xsl:when test="@svg:y">
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="@svg:y"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>0</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <!-- if the frame is anchored on a paragraph -->
- <xsl:if test="@text:anchor-type='paragraph'">
- <xsl:comment>Next 'div' is emulating the top hight of a draw:frame.</xsl:comment>
- <!-- When the svg:y is set relativ to the paragraph content, the best way to emulate a positive height,
- is to add an invisbile division inbetween with a height.
- Often text will flow into this 'gap', which is handled separately!
- -->
- <xsl:if test="$svgY &gt; 0">
- <xsl:element name="div">
- <xsl:attribute name="style">
- <xsl:text>height:</xsl:text>
- <xsl:value-of select="$svgY"/>
- <xsl:text>cm;</xsl:text>
- </xsl:attribute>
- <xsl:text>&#160;</xsl:text>
- </xsl:element>
- </xsl:if>
- </xsl:if>
-
-
- <xsl:variable name="followingSibling" select="following-sibling::node()[1]"/>
- <!--
- <xsl:choose>
- HEURISTIC: if the frame is anchored on a paragraph and the above gab is big enough to hold a text line,
- move it behind the text
- <xsl:when test="@text:anchor-type='paragraph' and
- (
- ($svgY &gt; 0.5) or
- ($svgX &gt; 4)
- ) and normalize-space($followingSibling) != ''">
- <xsl:apply-templates select="$followingSibling" mode="frameFloating">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths + $svgWidth"/>
- <xsl:with-param name="parentMarginLeft" select="$parentMarginLeftNew"/>
- <xsl:with-param name="leftPosition" select="$leftPosition"/>
- <xsl:with-param name="createDiv" select="true()"/>
- <xsl:with-param name="noDivBefore" select="false()"/>
- <xsl:with-param name="frameAlignedToParagraphWithSvgY">
- <xsl:call-template name="createDrawFrame2">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths + $svgWidth"/>
- <xsl:with-param name="parentMarginLeftNew" select="$parentMarginLeftNew"/>
- <xsl:with-param name="leftPosition" select="$leftPosition"/>
- <xsl:with-param name="svgY" select="$svgY"/>
- </xsl:call-template>
- </xsl:with-param>
- </xsl:apply-templates>
- </xsl:when>
- <xsl:otherwise>-->
- <xsl:call-template name="createDrawFrame2">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths + $svgWidth"/>
- <xsl:with-param name="parentMarginLeftNew" select="$parentMarginLeftNew"/>
- <xsl:with-param name="leftPosition" select="$leftPosition"/>
- <xsl:with-param name="svgY" select="$svgY"/>
- </xsl:call-template>
- <!-- <xsl:apply-templates select="following-sibling::node()[1]" mode="frameFloating">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths + $svgWidth"/>
- <xsl:with-param name="parentMarginLeft" select="$parentMarginLeftNew"/>
- <xsl:with-param name="leftPosition" select="$leftPosition"/>
- <xsl:with-param name="createDiv" select="true()"/>
- <xsl:with-param name="noDivBefore" select="false()"/>
- </xsl:apply-templates>
-
- </xsl:otherwise>
- </xsl:choose> -->
- </xsl:template>
-
- <xsl:template name="createDrawFrame2">
- <xsl:param name="globalData"/>
- <xsl:param name="previousFrameWidths" />
- <xsl:param name="parentMarginLeftNew"/>
- <xsl:param name="leftPosition" />
- <xsl:param name="svgY" />
-
- <xsl:comment>Next 'div' is a draw:frame.</xsl:comment>
- <xsl:element name="div">
- <xsl:attribute name="style">
- <xsl:call-template name="widthAndHeight"/>
+ <xsl:choose>
+ <xsl:when test="contains($imageParagraphStyle, 'margin-left:')">
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="normalize-space(substring-before(substring-after($imageParagraphStyle, 'margin-left:'), ';'))"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$parentMarginLeft"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="svgWidth">
+ <xsl:choose>
+ <xsl:when test="@svg:width">
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="@svg:width"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="svgX">
+ <xsl:choose>
+ <xsl:when test="@svg:x">
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="@svg:x"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="leftPosition" select="$svgX - $parentMarginLeftNew - $previousFrameWidths"/>
+ <xsl:variable name="svgY">
+ <xsl:choose>
+ <xsl:when test="@svg:y">
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="@svg:y"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <!-- if the frame is anchored on a paragraph -->
+ <xsl:if test="@text:anchor-type='paragraph'">
+ <xsl:comment>Next 'div' is emulating the top hight of a draw:frame.</xsl:comment>
+ <!-- When the svg:y is set relativ to the paragraph content, the best way to emulate a positive height,
+ is to add an invisbile division inbetween with a height.
+ Often text will flow into this 'gap', which is handled separately!
+ -->
+ <xsl:if test="$svgY &gt; 0">
+ <xsl:element name="div">
+ <xsl:attribute name="style">
+ <xsl:text>height:</xsl:text>
+ <xsl:value-of select="$svgY"/>
+ <xsl:text>cm;</xsl:text>
+ </xsl:attribute>
+ <xsl:text>&#160;</xsl:text>
+ </xsl:element>
+ </xsl:if>
+ </xsl:if>
+
+
+ <!--
+ <xsl:variable name="followingSibling" select="following-sibling::node()[1]"/>
+ <xsl:choose>
+ HEURISTIC: if the frame is anchored on a paragraph and the above gab is big enough to hold a text line,
+ move it behind the text
+ <xsl:when test="@text:anchor-type='paragraph' and
+ (
+ ($svgY &gt; 0.5) or
+ ($svgX &gt; 4)
+ ) and normalize-space($followingSibling) != ''">
+ <xsl:apply-templates select="$followingSibling" mode="frameFloating">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths + $svgWidth"/>
+ <xsl:with-param name="parentMarginLeft" select="$parentMarginLeftNew"/>
+ <xsl:with-param name="leftPosition" select="$leftPosition"/>
+ <xsl:with-param name="createDiv" select="true()"/>
+ <xsl:with-param name="noDivBefore" select="false()"/>
+ <xsl:with-param name="frameAlignedToParagraphWithSvgY">
+ <xsl:call-template name="createDrawFrame2">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths + $svgWidth"/>
+ <xsl:with-param name="parentMarginLeftNew" select="$parentMarginLeftNew"/>
+ <xsl:with-param name="leftPosition" select="$leftPosition"/>
+ <xsl:with-param name="svgY" select="$svgY"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>-->
+ <xsl:call-template name="createDrawFrame2">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths + $svgWidth"/>
+ <xsl:with-param name="parentMarginLeftNew" select="$parentMarginLeftNew"/>
+ <xsl:with-param name="leftPosition" select="$leftPosition"/>
+ <xsl:with-param name="svgY" select="$svgY"/>
+ </xsl:call-template>
+ <xsl:apply-templates select="following-sibling::node()[1]" mode="frameFloating">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="previousFrameWidths" select="$previousFrameWidths + $svgWidth"/>
+ <xsl:with-param name="parentMarginLeft" select="$parentMarginLeftNew"/>
+ <xsl:with-param name="leftPosition" select="$leftPosition"/>
+ <xsl:with-param name="createDiv" select="true()"/>
+ <xsl:with-param name="noDivBefore" select="false()"/>
+ </xsl:apply-templates>
+ <!--
+
+ </xsl:otherwise>
+ </xsl:choose> -->
+ </xsl:template>
+
+ <xsl:template name="createDrawFrame2">
+ <xsl:param name="globalData"/>
+ <xsl:param name="previousFrameWidths" />
+ <xsl:param name="parentMarginLeftNew"/>
+ <xsl:param name="leftPosition" />
+ <xsl:param name="svgY" />
+
+ <xsl:comment>Next 'div' is a draw:frame.</xsl:comment>
+ <xsl:element name="div">
+ <xsl:attribute name="style">
+ <xsl:call-template name="widthAndHeight"/>
<!-- all images float (CSS float reltaive) with a left position calculated by svg:x - parentMarginLeft - previousFrameWidths -->
- <xsl:text> float:left; padding:0; position:relative; left:</xsl:text>
- <xsl:value-of select="$leftPosition"/>
- <xsl:text>cm; </xsl:text>
- <!-- if the frame is anchored on a char -->
- <xsl:if test="@text:anchor-type='char'">
- <xsl:text>top:</xsl:text>
- <xsl:value-of select="$svgY"/>
- <xsl:text>cm; </xsl:text>
- </xsl:if>
- </xsl:attribute>
- <xsl:apply-templates select="@*">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
- <xsl:apply-templates select="node()">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
- </xsl:element>
- </xsl:template>
-
- <xsl:template name="widthAndHeight">
- <xsl:if test="@svg:height | @svg:width">
- <xsl:choose>
- <xsl:when test="not(@svg:width)">
- <xsl:call-template name="svg:height"/>
- </xsl:when>
- <xsl:when test="not(@svg:height)">
- <xsl:call-template name="svg:width"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="svg:height"/>
- <xsl:call-template name="svg:width"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- </xsl:template>
+ <xsl:text> float:left; padding:0; position:relative; left:</xsl:text>
+ <xsl:value-of select="$leftPosition"/>
+ <xsl:text>cm; </xsl:text>
+ <!-- if the frame is anchored on a char -->
+ <xsl:if test="@text:anchor-type='char'">
+ <xsl:text>top:</xsl:text>
+ <xsl:value-of select="$svgY"/>
+ <xsl:text>cm; </xsl:text>
+ </xsl:if>
+ </xsl:attribute>
+ <xsl:apply-templates select="@*">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+ <xsl:apply-templates select="node()">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template name="widthAndHeight">
+ <xsl:if test="@svg:height | @svg:width">
+ <xsl:choose>
+ <xsl:when test="not(@svg:width)">
+ <xsl:call-template name="svg:height"/>
+ </xsl:when>
+ <xsl:when test="not(@svg:height)">
+ <xsl:call-template name="svg:width"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="svg:height"/>
+ <xsl:call-template name="svg:width"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:template>
<!-- ***************** -->
<!-- *** Text Span *** -->
<!-- ***************** -->
- <xsl:template match="text:span">
- <xsl:param name="globalData"/>
+ <xsl:template match="text:span">
+ <xsl:param name="globalData"/>
<xsl:choose>
<xsl:when test="draw:frame">
- <!-- sometimes an ODF image is anchored as character and the
+ <!-- sometimes an ODF image is anchored as character and the
image frame appears within a span (which is not valid for HTML)
Heuristic: Neglecting the span assuming no text content aside
of frame within span -->
<xsl:apply-templates>
<xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
+ </xsl:apply-templates>
</xsl:when>
<xsl:otherwise>
<xsl:element name="span">
@@ -1051,7 +1087,7 @@
</xsl:element>
</xsl:otherwise>
</xsl:choose>
- </xsl:template>
+ </xsl:template>
@@ -1059,156 +1095,156 @@
<!-- *** Headings *** -->
<!-- **************** -->
- <xsl:template match="text:h">
- <xsl:param name="globalData"/>
+ <xsl:template match="text:h">
+ <xsl:param name="globalData"/>
<!-- no creation of empty headings (without text content) -->
- <xsl:if test="text() or descendant::text()">
+ <xsl:if test="text() or descendant::text()">
<!-- The URL linking of an table-of-content is due to a bug (cp. bug id# 102311) not mapped as URL in the XML.
Linking of the table-of-content can therefore only be archieved by a work-around in HTML -->
- <xsl:call-template name="create-heading">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:template>
+ <xsl:call-template name="create-heading">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:template>
<!-- default matching for header elements -->
- <xsl:template name="create-heading">
- <xsl:param name="globalData"/>
-
- <xsl:variable name="headingLevel">
- <xsl:choose>
- <xsl:when test="@text:outline-level &lt; 6">
- <xsl:value-of select="@text:outline-level"/>
- </xsl:when>
- <xsl:otherwise>6</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:variable name="headertyp" select="concat('h', $headingLevel)"/>
- <xsl:element name="{$headertyp}">
+ <xsl:template name="create-heading">
+ <xsl:param name="globalData"/>
+
+ <xsl:variable name="headingLevel">
+ <xsl:choose>
+ <xsl:when test="@text:outline-level &lt; 6">
+ <xsl:value-of select="@text:outline-level"/>
+ </xsl:when>
+ <xsl:otherwise>6</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="headertyp" select="concat('h', $headingLevel)"/>
+ <xsl:element name="{$headertyp}">
<!-- outline style 'text:min-label-width' is interpreted as a CSS 'margin-right' attribute
NOTE: Should be handled as CSS style in style header -->
- <xsl:variable name="min-label" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/*/@text:min-label-width"/>
- <xsl:attribute name="class">
- <xsl:value-of select="translate(@text:style-name, '.,;: %()[]/\+', '_____________')"/>
- </xsl:attribute>
-
- <xsl:call-template name="create-heading-anchor">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:call-template>
-
- <xsl:apply-templates>
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
- </xsl:element>
-
- </xsl:template>
-
- <xsl:template name="create-heading-anchor">
- <xsl:param name="globalData"/>
-
- <!-- writing out a heading number if desired.-->
- <!-- if a corresponding 'text:outline-style' exist or is not empty -->
- <xsl:choose>
- <xsl:when test="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/@style:num-format != ''">
-
- <!-- Every heading element will get an unique anchor for its file, from its hiearchy level and name:
- For example: The heading title 'My favorite heading' might get <a name="1_2_2_My_favorite_heading" /> -->
- <!-- creating an anchor for referencing the heading (e.g. from content table) -->
- <xsl:variable name="headingNumber">
- <xsl:call-template name="get-heading-number">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:call-template name="create-heading-anchor2">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="headingNumber" select="$headingNumber"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="create-heading-anchor2">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
-
- <xsl:template name="get-heading-number">
- <xsl:param name="globalData"/>
-
- <!-- write number prefix -->
- <xsl:value-of select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/@style:num-prefix"/>
- <xsl:call-template name="write-heading-number">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:call-template>
- <!-- write number suffix -->
- <xsl:value-of select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/@style:num-suffix"/>
- </xsl:template>
+ <xsl:variable name="min-label" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/*/@text:min-label-width"/>
+ <xsl:attribute name="class">
+ <xsl:value-of select="translate(@text:style-name, '.,;: %()[]/\+', '_____________')"/>
+ </xsl:attribute>
+
+ <xsl:call-template name="create-heading-anchor">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:call-template>
+
+ <xsl:apply-templates>
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+ </xsl:element>
+
+ </xsl:template>
+
+ <xsl:template name="create-heading-anchor">
+ <xsl:param name="globalData"/>
+
+ <!-- writing out a heading number if desired.-->
+ <!-- if a corresponding 'text:outline-style' exist or is not empty -->
+ <xsl:choose>
+ <xsl:when test="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/@style:num-format != ''">
+
+ <!-- Every heading element will get an unique anchor for its file, from its hiearchy level and name:
+ For example: The heading title 'My favorite heading' might get <a name="1_2_2_My_favorite_heading" /> -->
+ <!-- creating an anchor for referencing the heading (e.g. from content table) -->
+ <xsl:variable name="headingNumber">
+ <xsl:call-template name="get-heading-number">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:call-template name="create-heading-anchor2">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="headingNumber" select="$headingNumber"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="create-heading-anchor2">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+
+ <xsl:template name="get-heading-number">
+ <xsl:param name="globalData"/>
+
+ <!-- write number prefix -->
+ <xsl:value-of select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/@style:num-prefix"/>
+ <xsl:call-template name="write-heading-number">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:call-template>
+ <!-- write number suffix -->
+ <xsl:value-of select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/@style:num-suffix"/>
+ </xsl:template>
<!-- creating an anchor for referencing the heading -->
- <xsl:template name="create-heading-anchor2">
- <xsl:param name="globalData"/>
- <xsl:param name="headingNumber" />
-
- <xsl:variable name="title">
- <xsl:apply-templates mode="concatenate"/>
- </xsl:variable>
- <!-- REFERENCE HANDLING - ANCHOR -->
- <xsl:element namespace="{$namespace}" name="a">
- <xsl:attribute name="id">
- <xsl:value-of select="translate(concat('a_',$headingNumber, '_', normalize-space($title)), '&#xA;&amp;&lt;&gt;.,;: %()[]/\+', '___________________________')"/>
- </xsl:attribute>
-
- <xsl:element name="span">
+ <xsl:template name="create-heading-anchor2">
+ <xsl:param name="globalData"/>
+ <xsl:param name="headingNumber" />
+
+ <xsl:variable name="title">
+ <xsl:apply-templates mode="concatenate"/>
+ </xsl:variable>
+ <!-- REFERENCE HANDLING - ANCHOR -->
+ <xsl:element namespace="{$namespace}" name="a">
+ <xsl:attribute name="id">
+ <xsl:value-of select="translate(concat('a_',$headingNumber, '_', normalize-space($title)), '&#xA;&amp;&lt;&gt;.,;: %()[]/\+', '___________________________')"/>
+ </xsl:attribute>
+
+ <xsl:element name="span">
<!-- outline style 'text:min-label-distance' is interpreted as a CSS 'margin-right' attribute
NOTE: Should be handled as CSS style in style header -->
- <xsl:variable name="minLabelDistance" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/*/@text:min-label-distance"/>
- <xsl:variable name="minLabelWidth" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/*/@text:min-label-width"/>
-
- <xsl:if test="$minLabelDistance | $minLabelWidth">
- <xsl:attribute name="style">
- <xsl:if test="$minLabelDistance">
- <xsl:text>margin-right:</xsl:text>
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="$minLabelDistance"/>
- </xsl:call-template>
- <xsl:text>cm;</xsl:text>
- </xsl:if>
- <xsl:if test="$minLabelWidth">
- <xsl:text>min-width:</xsl:text>
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="$minLabelWidth"/>
- </xsl:call-template>
- <xsl:text>cm;</xsl:text>
- </xsl:if>
- </xsl:attribute>
- </xsl:if>
- <xsl:copy-of select="$headingNumber"/>
- </xsl:element>
- </xsl:element>
- </xsl:template>
-
- <xsl:template name="write-heading-number">
- <xsl:param name="globalData"/>
+ <xsl:variable name="minLabelDistance" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/*/@text:min-label-distance"/>
+ <xsl:variable name="minLabelWidth" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/*/@text:min-label-width"/>
+
+ <xsl:if test="$minLabelDistance | $minLabelWidth">
+ <xsl:attribute name="style">
+ <xsl:if test="$minLabelDistance">
+ <xsl:text>margin-right:</xsl:text>
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="$minLabelDistance"/>
+ </xsl:call-template>
+ <xsl:text>cm;</xsl:text>
+ </xsl:if>
+ <xsl:if test="$minLabelWidth">
+ <xsl:text>min-width:</xsl:text>
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="$minLabelWidth"/>
+ </xsl:call-template>
+ <xsl:text>cm;</xsl:text>
+ </xsl:if>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:copy-of select="$headingNumber"/>
+ </xsl:element>
+ </xsl:element>
+ </xsl:template>
+
+ <xsl:template name="write-heading-number">
+ <xsl:param name="globalData"/>
<!-- By default heading start with '1', the parameter 'textStartValue' will only be set, if the attribute @text:start-value exist -->
- <xsl:choose>
- <xsl:when test="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/@text:start-value">
- <xsl:call-template name="calc-heading-number">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="outlineLevel" select="@text:outline-level"/>
- <xsl:with-param name="textStartValue" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/@text:start-value"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="calc-heading-number">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="outlineLevel" select="@text:outline-level"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
+ <xsl:choose>
+ <xsl:when test="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/@text:start-value">
+ <xsl:call-template name="calc-heading-number">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="outlineLevel" select="@text:outline-level"/>
+ <xsl:with-param name="textStartValue" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = current()/@text:outline-level]/@text:start-value"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="calc-heading-number">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="outlineLevel" select="@text:outline-level"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
<!--
Find the correct heading no., which is the sum of 'text:start-value'
@@ -1216,149 +1252,149 @@
If the 'text:start-value is not set the default value of '1' has to be taken.
If a heading number is found (e.g. text:outline-level='3') all heading numbers
for the higher levels have to be written out -->
- <xsl:template name="calc-heading-number">
- <xsl:param name="globalData"/>
- <xsl:param name="outlineLevel"/><!-- text level of the heading -->
- <xsl:param name="iOutlineLevel" select="1"/><!-- iterator, counts from 1 to the text level of the heading -->
- <xsl:param name="textStartValue" select="1"/><!-- text level to start with, default is '1' -->
+ <xsl:template name="calc-heading-number">
+ <xsl:param name="globalData"/>
+ <xsl:param name="outlineLevel"/><!-- text level of the heading -->
+ <xsl:param name="iOutlineLevel" select="1"/><!-- iterator, counts from 1 to the text level of the heading -->
+ <xsl:param name="textStartValue" select="1"/><!-- text level to start with, default is '1' -->
- <xsl:choose>
+ <xsl:choose>
<!-- iText levels counts up from '1' to outlineLevel
Which means writing a heading number from left to right -->
- <xsl:when test="$iOutlineLevel &lt; $outlineLevel">
+ <xsl:when test="$iOutlineLevel &lt; $outlineLevel">
<!-- Write preceding heading numbers -->
- <xsl:call-template name="writeNumber">
- <xsl:with-param name="numberDigit">
- <xsl:call-template name="calc-heading-digit">
- <xsl:with-param name="value" select="0"/>
- <xsl:with-param name="currentoutlineLevel" select="$iOutlineLevel"/>
- </xsl:call-template>
- </xsl:with-param>
- <xsl:with-param name="numberFormat" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = ($outlineLevel)]/@style:num-format"/>
- </xsl:call-template>
- <xsl:choose>
- <xsl:when test="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = ($iOutlineLevel + 1)]/@text:start-value">
- <xsl:call-template name="calc-heading-number">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="outlineLevel" select="$outlineLevel"/>
- <xsl:with-param name="iOutlineLevel" select="$iOutlineLevel + 1"/>
- <xsl:with-param name="textStartValue" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = ($iOutlineLevel + 1)]/@text:start-value"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="calc-heading-number">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="outlineLevel" select="$outlineLevel"/>
- <xsl:with-param name="iOutlineLevel" select="$iOutlineLevel + 1"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
+ <xsl:call-template name="writeNumber">
+ <xsl:with-param name="numberDigit">
+ <xsl:call-template name="calc-heading-digit">
+ <xsl:with-param name="value" select="0"/>
+ <xsl:with-param name="currentoutlineLevel" select="$iOutlineLevel"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ <xsl:with-param name="numberFormat" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = ($outlineLevel)]/@style:num-format"/>
+ </xsl:call-template>
+ <xsl:choose>
+ <xsl:when test="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = ($iOutlineLevel + 1)]/@text:start-value">
+ <xsl:call-template name="calc-heading-number">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="outlineLevel" select="$outlineLevel"/>
+ <xsl:with-param name="iOutlineLevel" select="$iOutlineLevel + 1"/>
+ <xsl:with-param name="textStartValue" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = ($iOutlineLevel + 1)]/@text:start-value"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="calc-heading-number">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="outlineLevel" select="$outlineLevel"/>
+ <xsl:with-param name="iOutlineLevel" select="$iOutlineLevel + 1"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
<!-- Write preceding heading numbers -->
- <xsl:call-template name="writeNumber">
- <xsl:with-param name="numberDigit">
- <xsl:call-template name="calc-heading-digit">
- <xsl:with-param name="value" select="$textStartValue"/>
- <xsl:with-param name="currentoutlineLevel" select="$iOutlineLevel"/>
- </xsl:call-template>
- </xsl:with-param>
- <xsl:with-param name="numberFormat" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = $outlineLevel]/@style:num-format"/>
- <xsl:with-param name="last" select="true()"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template name="writeNumber">
- <xsl:param name="numberDigit"/>
- <xsl:param name="numberFormat"/>
- <xsl:param name="last"/>
-
- <xsl:choose>
- <xsl:when test="not($numberFormat)">
- <xsl:number value="$numberDigit" format="1."/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:choose>
- <xsl:when test="$last">
- <xsl:number value="$numberDigit" format="{$numberFormat}"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:number value="$numberDigit" format="{$numberFormat}."/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template name="calc-heading-digit">
- <xsl:param name="value"/>
- <xsl:param name="currentoutlineLevel"/>
- <xsl:param name="i" select="1"/>
-
- <xsl:variable name="precedingoutlineLevel" select="preceding-sibling::text:h[$i]/@text:outline-level"/>
- <xsl:choose>
- <xsl:when test="$currentoutlineLevel = $precedingoutlineLevel">
- <xsl:call-template name="calc-heading-digit">
- <xsl:with-param name="value" select="$value + 1"/>
- <xsl:with-param name="currentoutlineLevel" select="$currentoutlineLevel"/>
- <xsl:with-param name="i" select="$i + 1"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="$currentoutlineLevel &lt; $precedingoutlineLevel">
- <xsl:call-template name="calc-heading-digit">
- <xsl:with-param name="value" select="$value"/>
- <xsl:with-param name="currentoutlineLevel" select="$currentoutlineLevel"/>
- <xsl:with-param name="i" select="$i + 1"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$value"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
+ <xsl:call-template name="writeNumber">
+ <xsl:with-param name="numberDigit">
+ <xsl:call-template name="calc-heading-digit">
+ <xsl:with-param name="value" select="$textStartValue"/>
+ <xsl:with-param name="currentoutlineLevel" select="$iOutlineLevel"/>
+ </xsl:call-template>
+ </xsl:with-param>
+ <xsl:with-param name="numberFormat" select="$globalData/office:styles/text:outline-style/text:outline-level-style[@text:level = $outlineLevel]/@style:num-format"/>
+ <xsl:with-param name="last" select="true()"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="writeNumber">
+ <xsl:param name="numberDigit"/>
+ <xsl:param name="numberFormat"/>
+ <xsl:param name="last"/>
+
+ <xsl:choose>
+ <xsl:when test="not($numberFormat)">
+ <xsl:number value="$numberDigit" format="1."/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="$last">
+ <xsl:number value="$numberDigit" format="{$numberFormat}"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:number value="$numberDigit" format="{$numberFormat}."/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="calc-heading-digit">
+ <xsl:param name="value"/>
+ <xsl:param name="currentoutlineLevel"/>
+ <xsl:param name="i" select="1"/>
+
+ <xsl:variable name="precedingoutlineLevel" select="preceding-sibling::text:h[$i]/@text:outline-level"/>
+ <xsl:choose>
+ <xsl:when test="$currentoutlineLevel = $precedingoutlineLevel">
+ <xsl:call-template name="calc-heading-digit">
+ <xsl:with-param name="value" select="$value + 1"/>
+ <xsl:with-param name="currentoutlineLevel" select="$currentoutlineLevel"/>
+ <xsl:with-param name="i" select="$i + 1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="$currentoutlineLevel &lt; $precedingoutlineLevel">
+ <xsl:call-template name="calc-heading-digit">
+ <xsl:with-param name="value" select="$value"/>
+ <xsl:with-param name="currentoutlineLevel" select="$currentoutlineLevel"/>
+ <xsl:with-param name="i" select="$i + 1"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$value"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
<!-- Neglect Annotations -->
- <xsl:template match="office:annotation" mode="concatenate"/>
+ <xsl:template match="office:annotation" mode="concatenate"/>
<!-- Match text:placeholder child nodes (e.g. text) -->
- <xsl:template match="text:placeholder">
- <xsl:param name="globalData"/>
+ <xsl:template match="text:placeholder">
+ <xsl:param name="globalData"/>
- <xsl:call-template name="apply-styles-and-content">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:call-template>
- </xsl:template>
+ <xsl:call-template name="apply-styles-and-content">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:call-template>
+ </xsl:template>
<!-- ************* -->
<!-- *** Link *** -->
<!-- ************* -->
- <xsl:template match="text:a | draw:a">
- <xsl:param name="globalData"/>
+ <xsl:template match="text:a | draw:a">
+ <xsl:param name="globalData"/>
- <xsl:call-template name="create-common-anchor-link">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:call-template>
- </xsl:template>
+ <xsl:call-template name="create-common-anchor-link">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:call-template>
+ </xsl:template>
- <xsl:template name="create-common-anchor-link">
- <xsl:param name="globalData"/>
+ <xsl:template name="create-common-anchor-link">
+ <xsl:param name="globalData"/>
- <xsl:element name="a">
- <xsl:attribute name="href">
- <xsl:call-template name="create-href">
- <xsl:with-param name="href" select="@xlink:href"/>
- </xsl:call-template>
- </xsl:attribute>
- <xsl:call-template name="apply-styles-and-content">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:call-template>
- </xsl:element>
- </xsl:template>
+ <xsl:element name="a">
+ <xsl:attribute name="href">
+ <xsl:call-template name="create-href">
+ <xsl:with-param name="href" select="@xlink:href"/>
+ </xsl:call-template>
+ </xsl:attribute>
+ <xsl:call-template name="apply-styles-and-content">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:call-template>
+ </xsl:element>
+ </xsl:template>
@@ -1367,80 +1403,80 @@
<!-- ******************* -->
<!-- currently suggesting that all draw:object-ole elements are images -->
- <xsl:template match="draw:image | draw:object-ole">
- <xsl:param name="globalData"/>
+ <xsl:template match="draw:image | draw:object-ole">
+ <xsl:param name="globalData"/>
- <xsl:choose>
- <xsl:when test="ancestor::text:p or parent::text:span or parent::text:h or parent::draw:a or parent::text:a or text:ruby-base">
+ <xsl:choose>
+ <xsl:when test="ancestor::text:p or parent::text:span or parent::text:h or parent::draw:a or parent::text:a or text:ruby-base">
<!-- XHTML does not allow the mapped elements to contain paragraphs -->
- <xsl:call-template name="create-image-element">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
+ <xsl:call-template name="create-image-element">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
<!-- images are embedded in a paragraph, but are in CSS not able to express a horizontal alignment for themself.
A 'div' element taking over the image style would solve that problem, but is invalid as child of a paragraph -->
- <xsl:element name="p">
- <xsl:apply-templates select="@draw:style-name">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
-
- <xsl:call-template name="create-image-element">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:call-template>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template name="create-image-element">
- <xsl:param name="globalData"/>
-
- <xsl:element name="img">
- <xsl:if test="../@svg:width or ../@svg:height">
- <xsl:attribute name="style">
- <xsl:if test="../@svg:height">
- <xsl:text>height:</xsl:text>
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="../@svg:height"/>
- </xsl:call-template>
- <xsl:text>cm;</xsl:text>
- </xsl:if>
- <xsl:if test="../@svg:width">
- <xsl:text>width:</xsl:text>
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="../@svg:width"/>
- </xsl:call-template>
- <xsl:text>cm;</xsl:text>
- </xsl:if>
- </xsl:attribute>
- </xsl:if>
- <xsl:attribute name="alt">
- <xsl:choose>
- <xsl:when test="../svg:desc">
- <xsl:value-of select="../svg:desc"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:message>
+ <xsl:element name="p">
+ <xsl:apply-templates select="@draw:style-name">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+
+ <xsl:call-template name="create-image-element">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:call-template>
+ </xsl:element>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="create-image-element">
+ <xsl:param name="globalData"/>
+
+ <xsl:element name="img">
+ <xsl:if test="../@svg:width or ../@svg:height">
+ <xsl:attribute name="style">
+ <xsl:if test="../@svg:height">
+ <xsl:text>height:</xsl:text>
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="../@svg:height"/>
+ </xsl:call-template>
+ <xsl:text>cm;</xsl:text>
+ </xsl:if>
+ <xsl:if test="../@svg:width">
+ <xsl:text>width:</xsl:text>
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="../@svg:width"/>
+ </xsl:call-template>
+ <xsl:text>cm;</xsl:text>
+ </xsl:if>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:attribute name="alt">
+ <xsl:choose>
+ <xsl:when test="../svg:desc">
+ <xsl:value-of select="../svg:desc"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message>
Accessibility Warning:
No alternate text ('svg:desc' element) set for
image '<xsl:value-of select="@xlink:href"/>'!</xsl:message>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:attribute>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:attribute>
- <xsl:attribute name="src">
- <xsl:call-template name="create-href">
- <xsl:with-param name="href" select="@xlink:href"/>
- </xsl:call-template>
- </xsl:attribute>
+ <xsl:attribute name="src">
+ <xsl:call-template name="create-href">
+ <xsl:with-param name="href" select="@xlink:href"/>
+ </xsl:call-template>
+ </xsl:attribute>
<!-- style interpretation only, as no subelements are allowed for img in XHTML -->
- <xsl:apply-templates select="@draw:style-name">
- <xsl:with-param name="globalData" select="$globalData"/>
- </xsl:apply-templates>
- </xsl:element>
- </xsl:template>
+ <xsl:apply-templates select="@draw:style-name">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ </xsl:apply-templates>
+ </xsl:element>
+ </xsl:template>
<!-- ************ -->
<!-- *** list *** -->
@@ -1487,212 +1523,212 @@
Further details beyond text:list-list..
-->
- <xsl:key name="listStyles" match=" /*/office:styles/text:list-style | /*/office:automatic-styles/text:list-style | /*/office:styles/style:graphic-properties/text:list-style | /*/office:automatic-styles/style:graphic-properties/text:list-style | /*/office:styles/text:list-style | /*/office:automatic-styles/text:list-style | /*/office:styles/style:graphic-properties/text:list-style | /*/office:automatic-styles/style:graphic-properties/text:list-style" use="@style:name"/>
+ <xsl:key name="listStyles" match=" /*/office:styles/text:list-style | /*/office:automatic-styles/text:list-style | /*/office:styles/style:graphic-properties/text:list-style | /*/office:automatic-styles/style:graphic-properties/text:list-style | /*/office:styles/text:list-style | /*/office:automatic-styles/text:list-style | /*/office:styles/style:graphic-properties/text:list-style | /*/office:automatic-styles/style:graphic-properties/text:list-style" use="@style:name"/>
<!--
A text list may only have text:list-item and text:list-header as children.
-->
- <xsl:template match="text:list">
- <xsl:param name="globalData"/>
- <xsl:param name="isListNumberingReset"/>
- <xsl:param name="isNextLevelNumberingReset"/>
- <xsl:param name="listLevel" select="1"/>
- <xsl:param name="listRestart" select="false()"/>
- <xsl:param name="itemLabel" select="''"/>
- <xsl:param name="listStyle"/>
- <xsl:param name="listStyleName" select="@text:style-name"/>
+ <xsl:template match="text:list">
+ <xsl:param name="globalData"/>
+ <xsl:param name="isListNumberingReset"/>
+ <xsl:param name="isNextLevelNumberingReset"/>
+ <xsl:param name="listLevel" select="1"/>
+ <xsl:param name="listRestart" select="false()"/>
+ <xsl:param name="itemLabel" select="''"/>
+ <xsl:param name="listStyle"/>
+ <xsl:param name="listStyleName" select="@text:style-name"/>
<!-- To choose list type - get the list style, with the same 'text:style-name' and same 'text:level' >-->
- <xsl:variable name="listStyleRTF">
- <xsl:variable name="listStyleInContentFile" select="key('listStyles', $listStyleName)"/>
- <xsl:choose>
- <xsl:when test="$listStyleInContentFile">
- <xsl:copy-of select="$listStyleInContentFile"/>
- </xsl:when>
- <xsl:when test="$globalData/office:styles/text:list-style[@style:name = $listStyleName]">
- <xsl:copy-of select="$globalData/office:styles/text:list-style[@style:name = $listStyleName]"/>
- </xsl:when>
- <xsl:when test="$globalData/office:styles/style:graphic-properties/text:list-style[@style:name = $listStyleName]">
- <xsl:copy-of select="$globalData/office:styles/style:graphic-properties/text:list-style[@style:name = $listStyleName]"/>
- </xsl:when>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:choose>
- <xsl:when test="function-available('common:node-set')">
- <xsl:call-template name="create-list-type">
- <xsl:with-param name="listStyle" select="common:node-set($listStyleRTF)" />
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="isListNumberingReset" select="$isListNumberingReset"/>
- <xsl:with-param name="isNextLevelNumberingReset" select="$isNextLevelNumberingReset"/>
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listRestart" select="$listRestart"/>
- <xsl:with-param name="itemLabel" select="$itemLabel"/>
- <xsl:with-param name="listStyleName" select="$listStyleName" />
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="function-available('xalan:nodeset')">
- <xsl:call-template name="create-list-type">
- <xsl:with-param name="listStyle" select="xalan:nodeset($listStyleRTF)" />
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="isListNumberingReset" select="$isListNumberingReset"/>
- <xsl:with-param name="isNextLevelNumberingReset" select="$isNextLevelNumberingReset"/>
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listRestart" select="$listRestart"/>
- <xsl:with-param name="itemLabel" select="$itemLabel"/>
- <xsl:with-param name="listStyleName" select="$listStyleName" />
- </xsl:call-template>
- </xsl:when>
- <xsl:when test="function-available('xt:node-set')">
- <xsl:call-template name="create-list-type">
- <xsl:with-param name="listStyle" select="xt:node-set($listStyleRTF)" />
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="isListNumberingReset" select="$isListNumberingReset"/>
- <xsl:with-param name="isNextLevelNumberingReset" select="$isNextLevelNumberingReset"/>
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listRestart" select="$listRestart"/>
- <xsl:with-param name="itemLabel" select="$itemLabel"/>
- <xsl:with-param name="listStyleName" select="$listStyleName" />
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:message terminate="yes">The required node-set function was not found!</xsl:message>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template name="create-list-type">
- <xsl:param name="globalData"/>
- <xsl:param name="isListNumberingReset"/>
- <xsl:param name="isNextLevelNumberingReset"/>
- <xsl:param name="listLevel" />
- <xsl:param name="listRestart" />
- <xsl:param name="itemLabel"/>
- <xsl:param name="listStyle"/>
- <xsl:param name="listStyleName" />
-
- <!-- $globalData/styles-file/*/office:styles/ -->
- <xsl:variable name="listLevelStyle" select="$listStyle/*/*[@text:level = number($listLevel)]"/>
- <xsl:variable name="listIndent">
- <xsl:call-template name="getListIndent">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- <xsl:with-param name="firstPara" select="*[1]/*[name() = 'text:p' or name() = 'text:h'][1]"/>
- </xsl:call-template>
- </xsl:variable>
- <xsl:variable name="isEmptyList" select="not(*[1]/*[name() = 'text:h' or name() = 'text:p' or name() = 'text:name'])"/>
- <xsl:variable name="listType">
- <xsl:choose>
+ <xsl:variable name="listStyleRTF">
+ <xsl:variable name="listStyleInContentFile" select="key('listStyles', $listStyleName)"/>
+ <xsl:choose>
+ <xsl:when test="$listStyleInContentFile">
+ <xsl:copy-of select="$listStyleInContentFile"/>
+ </xsl:when>
+ <xsl:when test="$globalData/office:styles/text:list-style[@style:name = $listStyleName]">
+ <xsl:copy-of select="$globalData/office:styles/text:list-style[@style:name = $listStyleName]"/>
+ </xsl:when>
+ <xsl:when test="$globalData/office:styles/style:graphic-properties/text:list-style[@style:name = $listStyleName]">
+ <xsl:copy-of select="$globalData/office:styles/style:graphic-properties/text:list-style[@style:name = $listStyleName]"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:choose>
+ <xsl:when test="function-available('common:node-set')">
+ <xsl:call-template name="create-list-type">
+ <xsl:with-param name="listStyle" select="common:node-set($listStyleRTF)" />
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="isListNumberingReset" select="$isListNumberingReset"/>
+ <xsl:with-param name="isNextLevelNumberingReset" select="$isNextLevelNumberingReset"/>
+ <xsl:with-param name="listLevel" select="$listLevel"/>
+ <xsl:with-param name="listRestart" select="$listRestart"/>
+ <xsl:with-param name="itemLabel" select="$itemLabel"/>
+ <xsl:with-param name="listStyleName" select="$listStyleName" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="function-available('xalan:nodeset')">
+ <xsl:call-template name="create-list-type">
+ <xsl:with-param name="listStyle" select="xalan:nodeset($listStyleRTF)" />
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="isListNumberingReset" select="$isListNumberingReset"/>
+ <xsl:with-param name="isNextLevelNumberingReset" select="$isNextLevelNumberingReset"/>
+ <xsl:with-param name="listLevel" select="$listLevel"/>
+ <xsl:with-param name="listRestart" select="$listRestart"/>
+ <xsl:with-param name="itemLabel" select="$itemLabel"/>
+ <xsl:with-param name="listStyleName" select="$listStyleName" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:when test="function-available('xt:node-set')">
+ <xsl:call-template name="create-list-type">
+ <xsl:with-param name="listStyle" select="xt:node-set($listStyleRTF)" />
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="isListNumberingReset" select="$isListNumberingReset"/>
+ <xsl:with-param name="isNextLevelNumberingReset" select="$isNextLevelNumberingReset"/>
+ <xsl:with-param name="listLevel" select="$listLevel"/>
+ <xsl:with-param name="listRestart" select="$listRestart"/>
+ <xsl:with-param name="itemLabel" select="$itemLabel"/>
+ <xsl:with-param name="listStyleName" select="$listStyleName" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:message terminate="yes">The required node-set function was not found!</xsl:message>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template name="create-list-type">
+ <xsl:param name="globalData"/>
+ <xsl:param name="isListNumberingReset"/>
+ <xsl:param name="isNextLevelNumberingReset"/>
+ <xsl:param name="listLevel" />
+ <xsl:param name="listRestart" />
+ <xsl:param name="itemLabel"/>
+ <xsl:param name="listStyle"/>
+ <xsl:param name="listStyleName" />
+
+ <!-- $globalData/styles-file/*/office:styles/ -->
+ <xsl:variable name="listLevelStyle" select="$listStyle/*/*[@text:level = number($listLevel)]"/>
+ <xsl:variable name="listIndent">
+ <xsl:call-template name="getListIndent">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
+ <xsl:with-param name="firstPara" select="*[1]/*[name() = 'text:p' or name() = 'text:h'][1]"/>
+ </xsl:call-template>
+ </xsl:variable>
+ <xsl:variable name="isEmptyList" select="not(*[1]/*[name() = 'text:h' or name() = 'text:p' or name() = 'text:name'])"/>
+ <xsl:variable name="listType">
+ <xsl:choose>
<!-- ordered list -->
- <xsl:when test="name($listLevelStyle) = 'text:list-level-style-number'">
- <xsl:text>ol</xsl:text>
- </xsl:when>
+ <xsl:when test="name($listLevelStyle) = 'text:list-level-style-number'">
+ <xsl:text>ol</xsl:text>
+ </xsl:when>
<!-- unordered list (bullet or image) -->
- <xsl:otherwise>
- <xsl:text>ul</xsl:text>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
-
- <xsl:element name="{$listType}">
- <xsl:apply-templates select="*[1]" mode="listItemSibling">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="isEmptyList" select="$isEmptyList"/>
- <xsl:with-param name="isListNumberingReset" select="$isNextLevelNumberingReset"/>
- <xsl:with-param name="isNextLevelNumberingReset">
- <xsl:choose>
- <xsl:when test="$isListNumberingReset">
- <xsl:value-of select="true()"/>
- </xsl:when>
- <xsl:otherwise>
+ <xsl:otherwise>
+ <xsl:text>ul</xsl:text>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+
+ <xsl:element name="{$listType}">
+ <xsl:apply-templates select="*[1]" mode="listItemSibling">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="isEmptyList" select="$isEmptyList"/>
+ <xsl:with-param name="isListNumberingReset" select="$isNextLevelNumberingReset"/>
+ <xsl:with-param name="isNextLevelNumberingReset">
+ <xsl:choose>
+ <xsl:when test="$isListNumberingReset">
+ <xsl:value-of select="true()"/>
+ </xsl:when>
+ <xsl:otherwise>
<!-- A list is empty if a text:list does not have a text:list-header or text:list-item (wildcard as only those can exist beyond a text:list), which contains a text:h or text:p -->
- <xsl:value-of select="not($isEmptyList)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- <xsl:with-param name="itemLabel" select="$itemLabel"/>
- <xsl:with-param name="listIndent" select="$listIndent"/>
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- <xsl:with-param name="listRestart">
- <xsl:choose>
- <xsl:when test="$listRestart">
- <xsl:value-of select="$listRestart"/>
- </xsl:when>
- <xsl:otherwise>
+ <xsl:value-of select="not($isEmptyList)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ <xsl:with-param name="itemLabel" select="$itemLabel"/>
+ <xsl:with-param name="listIndent" select="$listIndent"/>
+ <xsl:with-param name="listLevel" select="$listLevel"/>
+ <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
+ <xsl:with-param name="listRestart">
+ <xsl:choose>
+ <xsl:when test="$listRestart">
+ <xsl:value-of select="$listRestart"/>
+ </xsl:when>
+ <xsl:otherwise>
<!-- descdendants restart their list numbering, when an ancestor is not empty -->
- <xsl:value-of select="not($isEmptyList)"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- <xsl:with-param name="listStyle" select="$listStyle"/>
- <xsl:with-param name="listStyleName" select="$listStyleName"/>
- <xsl:with-param name="minLabelDist">
- <xsl:choose>
- <xsl:when test="$listLevelStyle/*/@text:min-label-distance">
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="$listLevelStyle/*/@text:min-label-distance"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>0</xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- <xsl:with-param name="minLabelWidth">
- <xsl:choose>
- <xsl:when test="$listLevelStyle/*/@text:min-label-width">
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="$listLevelStyle/*/@text:min-label-width"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>0</xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- </xsl:apply-templates>
- </xsl:element>
- </xsl:template>
+ <xsl:value-of select="not($isEmptyList)"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ <xsl:with-param name="listStyle" select="$listStyle"/>
+ <xsl:with-param name="listStyleName" select="$listStyleName"/>
+ <xsl:with-param name="minLabelDist">
+ <xsl:choose>
+ <xsl:when test="$listLevelStyle/*/@text:min-label-distance">
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="$listLevelStyle/*/@text:min-label-distance"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ <xsl:with-param name="minLabelWidth">
+ <xsl:choose>
+ <xsl:when test="$listLevelStyle/*/@text:min-label-width">
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="$listLevelStyle/*/@text:min-label-width"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ </xsl:apply-templates>
+ </xsl:element>
+ </xsl:template>
<!-- See comment before text:list template -->
- <xsl:template name="getListIndent">
- <xsl:param name="globalData"/>
- <xsl:param name="listLevelStyle"/>
+ <xsl:template name="getListIndent">
+ <xsl:param name="globalData"/>
+ <xsl:param name="listLevelStyle"/>
<!-- The first paragraph of the list item (heading is special paragraph in ODF) -->
- <xsl:param name="firstPara" />
+ <xsl:param name="firstPara" />
<!-- Styles of first paragraph in list item, including ancestor styles (inheritance) -->
- <xsl:variable name="firstParaStyles" select="$globalData/all-styles/style[@style:name = $firstPara/@text:style-name]/final-properties"/>
+ <xsl:variable name="firstParaStyles" select="$globalData/all-styles/style[@style:name = $firstPara/@text:style-name]/final-properties"/>
<!-- Only the left margin of the first paragraph of a list item will be added to the margin of the complete list (all levels)-->
- <xsl:variable name="firstParaLeftMargin">
- <xsl:choose>
- <xsl:when test="contains($firstParaStyles, 'margin-left:')">
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="normalize-space(substring-before(substring-after($firstParaStyles, 'margin-left:'), ';'))"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>0</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:variable name="spaceBefore">
- <xsl:choose>
- <xsl:when test="$listLevelStyle/*/@text:space-before">
- <xsl:call-template name="convert2cm">
- <xsl:with-param name="value" select="$listLevelStyle/*/@text:space-before"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>0</xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
+ <xsl:variable name="firstParaLeftMargin">
+ <xsl:choose>
+ <xsl:when test="contains($firstParaStyles, 'margin-left:')">
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="normalize-space(substring-before(substring-after($firstParaStyles, 'margin-left:'), ';'))"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="spaceBefore">
+ <xsl:choose>
+ <xsl:when test="$listLevelStyle/*/@text:space-before">
+ <xsl:call-template name="convert2cm">
+ <xsl:with-param name="value" select="$listLevelStyle/*/@text:space-before"/>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>0</xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
<!-- Only if the left-margin of the first paragraph is positive the sum
text:space-before and fo:left-margin is taken as list indent -->
- <xsl:choose>
- <xsl:when test="$firstParaLeftMargin &gt; 0">
- <xsl:value-of select="$firstParaLeftMargin + $spaceBefore"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$spaceBefore"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
+ <xsl:choose>
+ <xsl:when test="$firstParaLeftMargin &gt; 0">
+ <xsl:value-of select="$firstParaLeftMargin + $spaceBefore"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$spaceBefore"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
<!-- ****************** -->
<!-- *** list item *** -->
@@ -1714,105 +1750,105 @@
only used, when text does not fit in text:min-label-width (ignored)
-->
- <xsl:template match="text:list-item | text:list-header" mode="listItemSibling">
- <xsl:param name="globalData"/>
- <xsl:param name="firstitemLabelWidth"/>
- <xsl:param name="isEmptyList" select="not(*[name() = 'text:h' or name() = 'text:p' or name() = 'text:name'])"/>
- <xsl:param name="isListNumberingReset"/>
- <xsl:param name="isNextLevelNumberingReset"/>
- <xsl:param name="itemNumber"/>
- <xsl:param name="itemLabel"/>
- <xsl:param name="listLevel"/>
- <xsl:param name="listLevelStyle"/>
- <xsl:param name="listRestart"/>
- <xsl:param name="listStyle"/>
- <xsl:param name="listStyleName"/>
- <xsl:param name="minLabelDist"/>
- <xsl:param name="minLabelWidth"/>
- <xsl:param name="listIndent" />
-
-
- <xsl:variable name="listIndentNew">
- <xsl:choose>
- <xsl:when test="$listIndent">
- <xsl:value-of select="$listIndent"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="getListIndent">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- <xsl:with-param name="firstPara" select="*[name() = 'text:p' or name() = 'text:h'][1]" />
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:variable name="itemNumberNew">
- <xsl:if test="$listStyle/text:list-style/text:list-level-style-number">
- <xsl:choose>
- <xsl:when test="$isEmptyList">
+ <xsl:template match="text:list-item | text:list-header" mode="listItemSibling">
+ <xsl:param name="globalData"/>
+ <xsl:param name="firstitemLabelWidth"/>
+ <xsl:param name="isEmptyList" select="not(*[name() = 'text:h' or name() = 'text:p' or name() = 'text:name'])"/>
+ <xsl:param name="isListNumberingReset"/>
+ <xsl:param name="isNextLevelNumberingReset"/>
+ <xsl:param name="itemNumber"/>
+ <xsl:param name="itemLabel"/>
+ <xsl:param name="listLevel"/>
+ <xsl:param name="listLevelStyle"/>
+ <xsl:param name="listRestart"/>
+ <xsl:param name="listStyle"/>
+ <xsl:param name="listStyleName"/>
+ <xsl:param name="minLabelDist"/>
+ <xsl:param name="minLabelWidth"/>
+ <xsl:param name="listIndent" />
+
+
+ <xsl:variable name="listIndentNew">
+ <xsl:choose>
+ <xsl:when test="$listIndent">
+ <xsl:value-of select="$listIndent"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="getListIndent">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
+ <xsl:with-param name="firstPara" select="*[name() = 'text:p' or name() = 'text:h'][1]" />
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:variable name="itemNumberNew">
+ <xsl:if test="$listStyle/text:list-style/text:list-level-style-number">
+ <xsl:choose>
+ <xsl:when test="$isEmptyList">
<!-- An empty list item (no text:h/text:p as child), will not count as item and does not increment the count. -->
- <xsl:variable name="tempItemNumber">
- <xsl:choose>
+ <xsl:variable name="tempItemNumber">
+ <xsl:choose>
<!-- siblings will be incremented by one -->
- <xsl:when test="$itemNumber">
- <xsl:value-of select="$itemNumber + 1"/>
- </xsl:when>
+ <xsl:when test="$itemNumber">
+ <xsl:value-of select="$itemNumber + 1"/>
+ </xsl:when>
<!-- if a higher list level had content the numbering starts with 1 -->
- <xsl:when test="$isListNumberingReset and $listLevel &gt; 1">
- <xsl:value-of select="1"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="getItemNumber">
- <xsl:with-param name="listStyleName" select="$listStyleName"/>
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- <xsl:with-param name="listStyle" select="$listStyle"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:choose>
+ <xsl:when test="$isListNumberingReset and $listLevel &gt; 1">
+ <xsl:value-of select="1"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="getItemNumber">
+ <xsl:with-param name="listStyleName" select="$listStyleName"/>
+ <xsl:with-param name="listLevel" select="$listLevel"/>
+ <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
+ <xsl:with-param name="listStyle" select="$listStyle"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:choose>
<!-- in case the empty list-item is the first list-item in document -->
- <xsl:when test="$tempItemNumber = 1">
- <xsl:value-of select="1"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$tempItemNumber - 1"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>
- <xsl:choose>
- <xsl:when test="@text:start-value">
- <xsl:value-of select="@text:start-value"/>
- </xsl:when>
+ <xsl:when test="$tempItemNumber = 1">
+ <xsl:value-of select="1"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$tempItemNumber - 1"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:choose>
+ <xsl:when test="@text:start-value">
+ <xsl:value-of select="@text:start-value"/>
+ </xsl:when>
<!-- text:start-value from list level style will only be taken on the first list-item of a list -->
- <xsl:when test="$listLevelStyle/@text:start-value and count(preceding-sibling::text:list-item) = 0">
- <xsl:value-of select="$listLevelStyle/@text:start-value"/>
- </xsl:when>
+ <xsl:when test="$listLevelStyle/@text:start-value and count(preceding-sibling::text:list-item) = 0">
+ <xsl:value-of select="$listLevelStyle/@text:start-value"/>
+ </xsl:when>
<!-- siblings will be incremented by one -->
- <xsl:when test="$itemNumber">
- <xsl:value-of select="$itemNumber + 1"/>
- </xsl:when>
+ <xsl:when test="$itemNumber">
+ <xsl:value-of select="$itemNumber + 1"/>
+ </xsl:when>
<!-- if a higher list level had content the numbering starts with 1 -->
- <xsl:when test="$isListNumberingReset and $listLevel &gt; 1">
- <xsl:value-of select="1"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:call-template name="getItemNumber">
- <xsl:with-param name="listStyleName" select="$listStyleName"/>
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- <xsl:with-param name="listStyle" select="$listStyle"/>
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:if>
- </xsl:variable>
- <xsl:variable name="itemLabelNew">
- <xsl:if test="$listStyle/text:list-style/text:list-level-style-number">
+ <xsl:when test="$isListNumberingReset and $listLevel &gt; 1">
+ <xsl:value-of select="1"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:call-template name="getItemNumber">
+ <xsl:with-param name="listStyleName" select="$listStyleName"/>
+ <xsl:with-param name="listLevel" select="$listLevel"/>
+ <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
+ <xsl:with-param name="listStyle" select="$listStyle"/>
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:if>
+ </xsl:variable>
+ <xsl:variable name="itemLabelNew">
+ <xsl:if test="$listStyle/text:list-style/text:list-level-style-number">
<!--
A numbered label (e.g. 2.C.III) is created for every text:list-item/header.
Above list levels are listed in the label, if the list-style requires this. Levels are separated by a '.'
@@ -1821,1017 +1857,1016 @@
The prefix/suffix (as well list level dependent) comes before and after the complete label (after truncation)
-->
<!-- Numbered label will be generated -->
- <xsl:call-template name="createItemLabel">
- <xsl:with-param name="itemNumber" select="$itemNumberNew"/>
- <xsl:with-param name="itemLabel" select="$itemLabel"/>
- <xsl:with-param name="listLevelsToDisplay">
- <xsl:variable name="display" select="$listLevelStyle/@text:display-levels"/>
- <xsl:choose>
- <xsl:when test="$display">
- <xsl:value-of select="$display"/>
- </xsl:when>
- <xsl:otherwise>1</xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- </xsl:call-template>
- </xsl:if>
- </xsl:variable>
- <xsl:element name="li">
- <xsl:choose>
- <xsl:when test="$isEmptyList">
- <xsl:apply-templates>
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="itemLabel" select="$itemLabelNew"/>
- <xsl:with-param name="listLevel" select="$listLevel + 1"/>
- <xsl:with-param name="listStyleName" select="$listStyleName"/>
- </xsl:apply-templates>
- </xsl:when>
- <xsl:otherwise>
+ <xsl:call-template name="createItemLabel">
+ <xsl:with-param name="itemNumber" select="$itemNumberNew"/>
+ <xsl:with-param name="itemLabel" select="$itemLabel"/>
+ <xsl:with-param name="listLevelsToDisplay">
+ <xsl:variable name="display" select="$listLevelStyle/@text:display-levels"/>
+ <xsl:choose>
+ <xsl:when test="$display">
+ <xsl:value-of select="$display"/>
+ </xsl:when>
+ <xsl:otherwise>1</xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ <xsl:with-param name="listLevel" select="$listLevel"/>
+ <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
+ </xsl:call-template>
+ </xsl:if>
+ </xsl:variable>
+ <xsl:element name="li">
+ <xsl:choose>
+ <xsl:when test="$isEmptyList">
+ <xsl:apply-templates>
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="itemLabel" select="$itemLabelNew"/>
+ <xsl:with-param name="listLevel" select="$listLevel + 1"/>
+ <xsl:with-param name="listStyleName" select="$listStyleName"/>
+ </xsl:apply-templates>
+ </xsl:when>
+ <xsl:otherwise>
<!-- Possible following children are text:h, text:p, list:text, text:soft-page-break -->
- <xsl:apply-templates mode="list-item-children" select="*[1]">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="isEmptyList" select="$isEmptyList"/>
- <xsl:with-param name="isNextLevelNumberingReset" select="$isNextLevelNumberingReset"/>
+ <xsl:apply-templates mode="list-item-children" select="*[1]">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="isEmptyList" select="$isEmptyList"/>
+ <xsl:with-param name="isNextLevelNumberingReset" select="$isNextLevelNumberingReset"/>
<!-- The new created label is given to the children -->
- <xsl:with-param name="itemLabel" select="$itemLabelNew"/>
- <xsl:with-param name="listLabelElement">
- <xsl:choose>
- <xsl:when test="name() = 'text:list-header'"/>
- <xsl:otherwise>
- <xsl:variable name="listLabelWidth">
- <xsl:choose>
- <xsl:when test="$minLabelWidth &gt; $minLabelDist">
- <xsl:value-of select="$minLabelWidth"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$minLabelDist"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
+ <xsl:with-param name="itemLabel" select="$itemLabelNew"/>
+ <xsl:with-param name="listLabelElement">
+ <xsl:choose>
+ <xsl:when test="name() = 'text:list-header'"/>
+ <xsl:otherwise>
+ <xsl:variable name="listLabelWidth">
+ <xsl:choose>
+ <xsl:when test="$minLabelWidth &gt; $minLabelDist">
+ <xsl:value-of select="$minLabelWidth"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$minLabelDist"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
<!-- Numbering is being done by this transformation creating a HTML span representing the number label
The html:span represents the list item/header label (e.g. 1.A.III)
As the html:span is usually a inline element is formated by CSS as block element to use width upon it,
to disable the caridge return float:left is used and later neglected -->
- <xsl:element name="span">
- <xsl:if test="$listLevelStyle/@text:style-name">
- <xsl:attribute name="class">
- <xsl:value-of select="$listLevelStyle/@text:style-name"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:attribute name="style">
- <xsl:text>display:block;float:</xsl:text>
+ <xsl:element name="span">
+ <xsl:if test="$listLevelStyle/@text:style-name">
+ <xsl:attribute name="class">
+ <xsl:value-of select="$listLevelStyle/@text:style-name"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:attribute name="style">
+ <xsl:text>display:block;float:</xsl:text>
<!-- 2DO: Svante - copy this functionality for other used margin:left (in western country 'left') -->
- <xsl:call-template name="getOppositeWritingDirection">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="paraStyleName" select="descendant-or-self::*/@text:style-name"/>
- </xsl:call-template>
- <xsl:text>;min-width:</xsl:text>
- <xsl:value-of select="$listLabelWidth"/>
- <xsl:text>cm</xsl:text>
- </xsl:attribute>
- <xsl:variable name="labelContent">
- <xsl:choose>
- <xsl:when test="text:number">
- <xsl:apply-templates select="text:number" mode="listnumber"/>
- </xsl:when>
- <xsl:when test="name($listLevelStyle) = 'text:list-level-style-bullet'">
- <xsl:value-of select="$listLevelStyle/@style:num-prefix"/>
- <xsl:value-of select="$listLevelStyle/@text:bullet-char"/>
- <xsl:value-of select="$listLevelStyle/@style:num-suffix"/>
- </xsl:when>
- <xsl:when test="name($listLevelStyle) = 'text:list-level-style-number'">
- <xsl:value-of select="$listLevelStyle/@style:num-prefix"/>
- <xsl:value-of select="$itemLabelNew"/>
- <xsl:value-of select="$listLevelStyle/@style:num-suffix"/>
- </xsl:when>
- <xsl:otherwise>
+ <xsl:call-template name="getOppositeWritingDirection">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="paraStyleName" select="descendant-or-self::*/@text:style-name"/>
+ </xsl:call-template>
+ <xsl:text>;min-width:</xsl:text>
+ <xsl:value-of select="$listLabelWidth"/>
+ <xsl:text>cm</xsl:text>
+ </xsl:attribute>
+ <xsl:variable name="labelContent">
+ <xsl:choose>
+ <xsl:when test="text:number">
+ <xsl:apply-templates select="text:number" mode="listnumber"/>
+ </xsl:when>
+ <xsl:when test="name($listLevelStyle) = 'text:list-level-style-bullet'">
+ <xsl:value-of select="$listLevelStyle/@style:num-prefix"/>
+ <xsl:value-of select="$listLevelStyle/@text:bullet-char"/>
+ <xsl:value-of select="$listLevelStyle/@style:num-suffix"/>
+ </xsl:when>
+ <xsl:when test="name($listLevelStyle) = 'text:list-level-style-number'">
+ <xsl:value-of select="$listLevelStyle/@style:num-prefix"/>
+ <xsl:value-of select="$itemLabelNew"/>
+ <xsl:value-of select="$listLevelStyle/@style:num-suffix"/>
+ </xsl:when>
+ <xsl:otherwise>
<!-- Listing with image as bullets, taken from the list style's href -->
- <xsl:value-of select="$listLevelStyle/@xlink:href"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <!-- Some browsers have problem with stand-alone elements (e.g. <span/>)
- Therefore a comment is being inserted into an empty label -->
- <xsl:choose>
- <xsl:when test="$labelContent != ''">
- <xsl:value-of select="$labelContent"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:comment>&#160;</xsl:comment>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:with-param>
- <xsl:with-param name="listLabelEmptyElement">
- <xsl:variable name="listLabelWidth">
- <xsl:choose>
- <xsl:when test="$minLabelWidth &gt; $minLabelDist">
- <xsl:value-of select="$minLabelWidth"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$minLabelDist"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <xsl:element name="span">
- <xsl:if test="$listLevelStyle/@text:style-name">
- <xsl:attribute name="class">
- <xsl:value-of select="$listLevelStyle/@text:style-name"/>
- </xsl:attribute>
- </xsl:if>
- <xsl:attribute name="style">
- <xsl:text>display:block;float:</xsl:text>
- <xsl:call-template name="getOppositeWritingDirection">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="paraStyleName" select="descendant-or-self::*/@text:style-name"/>
- </xsl:call-template>
- <xsl:text>;min-width:</xsl:text>
- <xsl:value-of select="$listLabelWidth"/>
- <xsl:text>cm</xsl:text>
- </xsl:attribute>
- <xsl:comment>&#160;</xsl:comment>
- </xsl:element>
- </xsl:with-param>
- <xsl:with-param name="listLevel" select="$listLevel + 1"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- <xsl:with-param name="listRestart" select="$listRestart"/>
- <xsl:with-param name="listStyle" select="$listStyle"/>
- <xsl:with-param name="listStyleName" select="$listStyleName"/>
- <xsl:with-param name="listIndent" select="$listIndentNew"/>
- <xsl:with-param name="minLabelWidth" select="$minLabelWidth"/>
- </xsl:apply-templates>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:element>
- <xsl:apply-templates select="following-sibling::*[1]" mode="listItemSibling">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="isListNumberingReset" select="$isListNumberingReset"/>
- <xsl:with-param name="isNextLevelNumberingReset" select="$isNextLevelNumberingReset"/>
- <xsl:with-param name="itemNumber" select="$itemNumberNew"/>
- <xsl:with-param name="listIndent">
- <xsl:choose>
- <xsl:when test="not($isEmptyList)">
- <xsl:value-of select="$listIndentNew"/>
- </xsl:when>
- </xsl:choose>
- </xsl:with-param>
+ <xsl:value-of select="$listLevelStyle/@xlink:href"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <!-- Some browsers have problem with stand-alone elements (e.g. <span/>)
+ Therefore a comment is being inserted into an empty label -->
+ <xsl:choose>
+ <xsl:when test="$labelContent != ''">
+ <xsl:value-of select="$labelContent"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:comment>&#160;</xsl:comment>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:element>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:with-param>
+ <xsl:with-param name="listLabelEmptyElement">
+ <xsl:variable name="listLabelWidth">
+ <xsl:choose>
+ <xsl:when test="$minLabelWidth &gt; $minLabelDist">
+ <xsl:value-of select="$minLabelWidth"/>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsl:value-of select="$minLabelDist"/>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:variable>
+ <xsl:element name="span">
+ <xsl:if test="$listLevelStyle/@text:style-name">
+ <xsl:attribute name="class">
+ <xsl:value-of select="$listLevelStyle/@text:style-name"/>
+ </xsl:attribute>
+ </xsl:if>
+ <xsl:attribute name="style">
+ <xsl:text>display:block;float:</xsl:text>
+ <xsl:call-template name="getOppositeWritingDirection">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="paraStyleName" select="descendant-or-self::*/@text:style-name"/>
+ </xsl:call-template>
+ <xsl:text>;min-width:</xsl:text>
+ <xsl:value-of select="$listLabelWidth"/>
+ <xsl:text>cm</xsl:text>
+ </xsl:attribute>
+ <xsl:comment>&#160;</xsl:comment>
+ </xsl:element>
+ </xsl:with-param>
+ <xsl:with-param name="listLevel" select="$listLevel + 1"/>
+ <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
+ <xsl:with-param name="listRestart" select="$listRestart"/>
+ <xsl:with-param name="listStyle" select="$listStyle"/>
+ <xsl:with-param name="listStyleName" select="$listStyleName"/>
+ <xsl:with-param name="listIndent" select="$listIndentNew"/>
+ <xsl:with-param name="minLabelWidth" select="$minLabelWidth"/>
+ </xsl:apply-templates>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:element>
+ <xsl:apply-templates select="following-sibling::*[1]" mode="listItemSibling">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="isListNumberingReset" select="$isListNumberingReset"/>
+ <xsl:with-param name="isNextLevelNumberingReset" select="$isNextLevelNumberingReset"/>
+ <xsl:with-param name="itemNumber" select="$itemNumberNew"/>
+ <xsl:with-param name="listIndent">
+ <xsl:choose>
+ <xsl:when test="not($isEmptyList)">
+ <xsl:value-of select="$listIndentNew"/>
+ </xsl:when>
+ </xsl:choose>
+ </xsl:with-param>
<!-- Receives the same parent label -->
- <xsl:with-param name="itemLabel" select="$itemLabel"/>
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- <xsl:with-param name="listStyle" select="$listStyle"/>
- <xsl:with-param name="listStyleName" select="$listStyleName"/>
- <xsl:with-param name="minLabelDist" select="$minLabelDist"/>
- <xsl:with-param name="minLabelWidth" select="$minLabelWidth"/>
- </xsl:apply-templates>
- </xsl:template>
-
- <xsl:template name="getOppositeWritingDirection">
- <xsl:param name="globalData"/>
- <xsl:param name="paraStyleName"/>
-
- <xsl:variable name="imageParagraphStyle" select="$globalData/all-styles/style[@style:name = $paraStyleName]/final-properties"/>
-
- <xsl:choose>
- <xsl:when test="contains($imageParagraphStyle, 'writing-mode:')">
- <xsl:choose>
- <xsl:when test="contains(substring-before(substring-after($imageParagraphStyle, 'writing-mode:'), ';'), 'rl')">right</xsl:when>
- <xsl:otherwise>left</xsl:otherwise>
- </xsl:choose>
- </xsl:when>
- <xsl:otherwise>left</xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- <xsl:template match="text:number" mode="listnumber">
- <xsl:apply-templates/>
- </xsl:template>
-
- <xsl:template match="text:number" mode="list-item-children">
- <xsl:param name="globalData"/>
- <xsl:param name="listLabelElement"/>
- <xsl:param name="listLabelEmptyElement"/>
- <xsl:param name="isEmptyList"/>
- <xsl:param name="isListNumberingReset"/>
- <xsl:param name="isNextLevelNumberingReset"/>
- <xsl:param name="itemLabel"/>
- <xsl:param name="itemNumber"/>
- <xsl:param name="listIndent"/>
- <xsl:param name="listLevel"/>
- <xsl:param name="listLevelStyle" />
- <xsl:param name="listRestart"/>
- <xsl:param name="listStyle"/>
- <xsl:param name="listStyleName"/>
- <xsl:param name="minLabelWidth"/>
-
- <xsl:apply-templates mode="list-item-children" select="following-sibling::*[1]">
- <xsl:with-param name="globalData" select="$globalData"/>
- <xsl:with-param name="isEmptyList" select="$isEmptyList"/>
- <xsl:with-param name="isNextLevelNumberingReset" select="$isNextLevelNumberingReset"/>
- <xsl:with-param name="itemLabel" select="$itemLabel"/>
- <xsl:with-param name="listLabelElement" select="$listLabelElement"/>
- <xsl:with-param name="listLabelEmptyElement" select="$listLabelEmptyElement"/>
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- <xsl:with-param name="listRestart" select="$listRestart"/>
- <xsl:with-param name="listStyle" select="$listStyle"/>
- <xsl:with-param name="listStyleName" select="$listStyleName"/>
- <xsl:with-param name="listIndent" select="$listIndent"/>
- <xsl:with-param name="minLabelWidth" select="$minLabelWidth"/>
- </xsl:apply-templates>
- </xsl:template>
+ <xsl:with-param name="itemLabel" select="$itemLabel"/>
+ <xsl:with-param name="listLevel" select="$listLevel"/>
+ <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
+ <xsl:with-param name="listStyle" select="$listStyle"/>
+ <xsl:with-param name="listStyleName" select="$listStyleName"/>
+ <xsl:with-param name="minLabelDist" select="$minLabelDist"/>
+ <xsl:with-param name="minLabelWidth" select="$minLabelWidth"/>
+ </xsl:apply-templates>
+ </xsl:template>
+
+ <xsl:template name="getOppositeWritingDirection">
+ <xsl:param name="globalData"/>
+ <xsl:param name="paraStyleName"/>
+
+ <xsl:variable name="imageParagraphStyle" select="$globalData/all-styles/style[@style:name = $paraStyleName]/final-properties"/>
+
+ <xsl:choose>
+ <xsl:when test="contains($imageParagraphStyle, 'writing-mode:')">
+ <xsl:choose>
+ <xsl:when test="contains(substring-before(substring-after($imageParagraphStyle, 'writing-mode:'), ';'), 'rl')">right</xsl:when>
+ <xsl:otherwise>left</xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
+ <xsl:otherwise>left</xsl:otherwise>
+ </xsl:choose>
+ </xsl:template>
+
+ <xsl:template match="text:number" mode="listnumber">
+ <xsl:apply-templates/>
+ </xsl:template>
+
+ <xsl:template match="text:number" mode="list-item-children">
+ <xsl:param name="globalData"/>
+ <xsl:param name="listLabelElement"/>
+ <xsl:param name="listLabelEmptyElement"/>
+ <xsl:param name="isEmptyList"/>
+ <xsl:param name="isListNumberingReset"/>
+ <xsl:param name="isNextLevelNumberingReset"/>
+ <xsl:param name="itemLabel"/>
+ <xsl:param name="itemNumber"/>
+ <xsl:param name="listIndent"/>
+ <xsl:param name="listLevel"/>
+ <xsl:param name="listLevelStyle" />
+ <xsl:param name="listRestart"/>
+ <xsl:param name="listStyle"/>
+ <xsl:param name="listStyleName"/>
+ <xsl:param name="minLabelWidth"/>
+
+ <xsl:apply-templates mode="list-item-children" select="following-sibling::*[1]">
+ <xsl:with-param name="globalData" select="$globalData"/>
+ <xsl:with-param name="isEmptyList" select="$isEmptyList"/>
+ <xsl:with-param name="isNextLevelNumberingReset" select="$isNextLevelNumberingReset"/>
+ <xsl:with-param name="itemLabel" select="$itemLabel"/>
+ <xsl:with-param name="listLabelElement" select="$listLabelElement"/>
+ <xsl:with-param name="listLabelEmptyElement" select="$listLabelEmptyElement"/>
+ <xsl:with-param name="listLevel" select="$listLevel"/>
+ <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
+ <xsl:with-param name="listRestart" select="$listRestart"/>
+ <xsl:with-param name="listStyle" select="$listStyle"/>
+ <xsl:with-param name="listStyleName" select="$listStyleName"/>
+ <xsl:with-param name="listIndent" select="$listIndent"/>
+ <xsl:with-param name="minLabelWidth" select="$minLabelWidth"/>
+ </xsl:apply-templates>
+ </xsl:template>
<!-- Each key element holds the set of all text:list-item/text:list-header of a certain level and a certain style -->
- <xsl:key name="getListItemsByLevelAndStyle" use="concat(count(ancestor::text:list), ancestor::text:list/@text:style-name)" match="text:list-item | text:list-header"/>
+ <xsl:key name="getListItemsByLevelAndStyle" use="concat(count(ancestor::text:list), ancestor::text:list/@text:style-name)" match="text:list-item | text:list-header"/>
<!-- Each key element holds the set of all text:list-item/text:list-header of a certain style -->
- <xsl:key name="getListItemsByStyle" use="ancestor::text:list/@text:style-name" match="text:list-item | text:list-header"/>
+ <xsl:key name="getListItemsByStyle" use="ancestor::text:list/@text:style-name" match="text:list-item | text:list-header"/>
<!-- The Numbering start value (or offset from regular counteing) is used at the first item of offset,
but have to be reused on following item/headers with no text:start-value -->
- <xsl:template name="getItemNumber">
- <xsl:param name="listLevel"/>
- <xsl:param name="listLevelStyle"/>
- <xsl:param name="listStyleName"/>
- <xsl:param name="listStyle"/>
-
- <xsl:call-template name="countListItemTillStartValue">
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- <xsl:with-param name="listStyleName" select="$listStyleName"/>
- <xsl:with-param name="listStyle" select="$listStyle"/>
- <xsl:with-param name="precedingListItemsOfSameLevelAndStyle" select="preceding::text:list-item[generate-id(key('getListItemsByLevelAndStyle', concat($listLevel, $listStyleName))) = generate-id(key('getListItemsByLevelAndStyle', concat(count(ancestor::text:list), ancestor::text:list/@text:style-name)))]"/>
-
- <xsl:with-param name="precedingListItemsOfSameStyle" select="preceding::text:list-item[generate-id(key('getListItemsByStyle', $listStyleName)) = generate-id(key('getListItemsByStyle', ancestor::text:list/@text:style-name))]"/>
- </xsl:call-template>
- </xsl:template>
+ <xsl:template name="getItemNumber">
+ <xsl:param name="listLevel"/>
+ <xsl:param name="listLevelStyle"/>
+ <xsl:param name="listStyleName"/>
+ <xsl:param name="listStyle"/>
+
+ <xsl:call-template name="countListItemTillStartValue">
+ <xsl:with-param name="listLevel" select="$listLevel"/>
+ <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
+ <xsl:with-param name="listStyleName" select="$listStyleName"/>
+ <xsl:with-param name="listStyle" select="$listStyle"/>
+ <xsl:with-param name="precedingListItemsOfSameLevelAndStyle" select="preceding::text:list-item[generate-id(key('getListItemsByLevelAndStyle', concat($listLevel, $listStyleName))) = generate-id(key('getListItemsByLevelAndStyle', concat(count(ancestor::text:list), ancestor::text:list/@text:style-name)))]"/>
+
+ <xsl:with-param name="precedingListItemsOfSameStyle" select="preceding::text:list-item[generate-id(key('getListItemsByStyle', $listStyleName)) = generate-id(key('getListItemsByStyle', ancestor::text:list/@text:style-name))]"/>
+ </xsl:call-template>
+ </xsl:template>
<!-- When there is a text:start-value the last have to be found and added to the number -->
- <xsl:template name="countListItemTillStartValue">
- <xsl:param name="IteratorSameLevelAndStyle" select="1"/>
- <xsl:param name="IteratorSameStyle" select="1"/>
- <xsl:param name="itemNumber" select="1"/>
- <xsl:param name="listLevel"/>
- <xsl:param name="listLevelStyle"/>
- <xsl:param name="listStyle"/>
- <xsl:param name="listStyleName"/>
- <xsl:param name="precedingListItemsOfSameLevelAndStyle" />
- <xsl:param name="precedingListItemsOfSameLevelAndStyleCount" select="count($precedingListItemsOfSameLevelAndStyle)"/>
- <xsl:param name="precedingListItemsOfSameStyle" />
- <xsl:param name="precedingListItemsOfSameStyleCount" select="count($precedingListItemsOfSameStyle)"/>
+ <xsl:template name="countListItemTillStartValue">
+ <xsl:param name="IteratorSameLevelAndStyle" select="1"/>
+ <xsl:param name="IteratorSameStyle" select="1"/>
+ <xsl:param name="itemNumber" select="1"/>
+ <xsl:param name="listLevel"/>
+ <xsl:param name="listLevelStyle"/>
+ <xsl:param name="listStyle"/>
+ <xsl:param name="listStyleName"/>
+ <xsl:param name="precedingListItemsOfSameLevelAndStyle" />
+ <xsl:param name="precedingListItemsOfSameLevelAndStyleCount" select="count($precedingListItemsOfSameLevelAndStyle)"/>
+ <xsl:param name="precedingListItemsOfSameStyle" />
+ <xsl:param name="precedingListItemsOfSameStyleCount" select="count($precedingListItemsOfSameStyle)"/>
<!-- E.g.: If a list level 2 number is searched, a level 3 with content found with only a level 1 parent with content,
the level 3 gets a 'pseudoLevel' -->
- <xsl:param name="pseudoLevel" select="0" />
+ <xsl:param name="pseudoLevel" select="0" />
<!-- set the next of preceding list items. Starting from the current to the next previous text:list-item -->
- <xsl:variable name="precedingListItemOfSameLevelAndStyle" select="$precedingListItemsOfSameLevelAndStyle[$precedingListItemsOfSameLevelAndStyleCount - $IteratorSameLevelAndStyle + 1]"/>
- <xsl:variable name="precedingListItemOfSameStyle" select="$precedingListItemsOfSameStyle[$precedingListItemsOfSameStyleCount - $IteratorSameStyle + 1]"/>
- <xsl:choose>
- <xsl:when test="($precedingListItemOfSameStyle and $precedingListItemOfSameLevelAndStyle) or ($precedingListItemOfSameStyle and $listStyle/text:list-style/@text:consecutive-numbering)">
- <xsl:for-each select="$precedingListItemOfSameStyle">
- <xsl:choose>
+ <xsl:variable name="precedingListItemOfSameLevelAndStyle" select="$precedingListItemsOfSameLevelAndStyle[$precedingListItemsOfSameLevelAndStyleCount - $IteratorSameLevelAndStyle + 1]"/>
+ <xsl:variable name="precedingListItemOfSameStyle" select="$precedingListItemsOfSameStyle[$precedingListItemsOfSameStyleCount - $IteratorSameStyle + 1]"/>
+ <xsl:choose>
+ <xsl:when test="($precedingListItemOfSameStyle and $precedingListItemOfSameLevelAndStyle) or ($precedingListItemOfSameStyle and $listStyle/text:list-style/@text:consecutive-numbering)">
+ <xsl:for-each select="$precedingListItemOfSameStyle">
+ <xsl:choose>
<!-- if it is a higher list level element -->
- <xsl:when test="$listStyle/text:list-style/@text:consecutive-numbering">
-
- <xsl:call-template name="countListItem">
- <xsl:with-param name="IteratorSameLevelAndStyle" select="$IteratorSameLevelAndStyle" />
- <xsl:with-param name="IteratorSameStyle" select="$IteratorSameStyle"/>
- <xsl:with-param name="itemNumber" select="$itemNumber"/>
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- <xsl:with-param name="listStyle" select="$listStyle"/>
- <xsl:with-param name="precedingListItemsOfSameLevelAndStyle" select="$precedingListItemsOfSameLevelAndStyle"/>
- <xsl:with-param name="precedingListItemsOfSameLevelAndStyleCount" select="$precedingListItemsOfSameLevelAndStyleCount"/>
- <xsl:with-param name="precedingListItemsOfSameStyle" select="$precedingListItemsOfSameStyle"/>
- <xsl:with-param name="precedingListItemsOfSameStyleCount" select="$precedingListItemsOfSameStyleCount"/>
- <xsl:with-param name="pseudoLevel" select="$pseudoLevel" />
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
+ <xsl:when test="$listStyle/text:list-style/@text:consecutive-numbering">
+
+ <xsl:call-template name="countListItem">
+ <xsl:with-param name="IteratorSameLevelAndStyle" select="$IteratorSameLevelAndStyle" />
+ <xsl:with-param name="IteratorSameStyle" select="$IteratorSameStyle"/>
+ <xsl:with-param name="itemNumber" select="$itemNumber"/>
+ <xsl:with-param name="listLevel" select="$listLevel"/>
+ <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
+ <xsl:with-param name="listStyle" select="$listStyle"/>
+ <xsl:with-param name="precedingListItemsOfSameLevelAndStyle" select="$precedingListItemsOfSameLevelAndStyle"/>
+ <xsl:with-param name="precedingListItemsOfSameLevelAndStyleCount" select="$precedingListItemsOfSameLevelAndStyleCount"/>
+ <xsl:with-param name="precedingListItemsOfSameStyle" select="$precedingListItemsOfSameStyle"/>
+ <xsl:with-param name="precedingListItemsOfSameStyleCount" select="$precedingListItemsOfSameStyleCount"/>
+ <xsl:with-param name="pseudoLevel" select="$pseudoLevel" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
<!-- NOT CONSECUTIVE NUMBERING -->
- <xsl:variable name="currentListLevel" select="count(ancestor::text:list)"/>
- <xsl:choose>
+ <xsl:variable name="currentListLevel" select="count(ancestor::text:list)"/>
+ <xsl:choose>
<!-- IF IT IS A HIGHER LIST LEVEL ELEMENT -->
- <xsl:when test="$currentListLevel &lt; $listLevel">
- <xsl:choose>
+ <xsl:when test="$currentListLevel &lt; $listLevel">
+ <xsl:choose>
<!-- if it has content the counting is ended -->
- <xsl:when test="*[name() = 'text:h' or name() = 'text:p']">
+ <xsl:when test="*[name() = 'text:h' or name() = 'text:p']">
<!-- 2DO: Perhaps the children still have to be processed -->
- <xsl:value-of select="$itemNumber + $pseudoLevel"/>
- </xsl:when>
- <xsl:otherwise>
+ <xsl:value-of select="$itemNumber + $pseudoLevel"/>
+ </xsl:when>
+ <xsl:otherwise>
<!-- if it is empty the counting continues -->
- <xsl:call-template name="countListItemTillStartValue">
- <xsl:with-param name="IteratorSameLevelAndStyle" select="$IteratorSameLevelAndStyle" />
- <xsl:with-param name="IteratorSameStyle" select="$IteratorSameStyle + 1"/>
- <xsl:with-param name="itemNumber" select="$itemNumber"/>
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- <xsl:with-param name="listStyle" select="$listStyle"/>
- <xsl:with-param name="precedingListItemsOfSameLevelAndStyle" select="$precedingListItemsOfSameLevelAndStyle"/>
- <xsl:with-param name="precedingListItemsOfSameLevelAndStyleCount" select="$precedingListItemsOfSameLevelAndStyleCount"/>
- <xsl:with-param name="precedingListItemsOfSameStyle" select="$precedingListItemsOfSameStyle"/>
- <xsl:with-param name="precedingListItemsOfSameStyleCount" select="$precedingListItemsOfSameStyleCount"/>
- <xsl:with-param name="pseudoLevel" select="$pseudoLevel" />
- </xsl:call-template>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:when>
+ <xsl:call-template name="countListItemTillStartValue">
+ <xsl:with-param name="IteratorSameLevelAndStyle" select="$IteratorSameLevelAndStyle" />
+ <xsl:with-param name="IteratorSameStyle" select="$IteratorSameStyle + 1"/>
+ <xsl:with-param name="itemNumber" select="$itemNumber"/>
+ <xsl:with-param name="listLevel" select="$listLevel"/>
+ <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
+ <xsl:with-param name="listStyle" select="$listStyle"/>
+ <xsl:with-param name="precedingListItemsOfSameLevelAndStyle" select="$precedingListItemsOfSameLevelAndStyle"/>
+ <xsl:with-param name="precedingListItemsOfSameLevelAndStyleCount" select="$precedingListItemsOfSameLevelAndStyleCount"/>
+ <xsl:with-param name="precedingListItemsOfSameStyle" select="$precedingListItemsOfSameStyle"/>
+ <xsl:with-param name="precedingListItemsOfSameStyleCount" select="$precedingListItemsOfSameStyleCount"/>
+ <xsl:with-param name="pseudoLevel" select="$pseudoLevel" />
+ </xsl:call-template>
+ </xsl:otherwise>
+ </xsl:choose>
+ </xsl:when>
<!-- IF IT IS A LIST LEVEL ELEMENT OF THE COUNTING LEVEL -->
- <xsl:when test="$currentListLevel = $listLevel">
- <xsl:call-template name="countListItem">
- <xsl:with-param name="IteratorSameLevelAndStyle" select="$IteratorSameLevelAndStyle" />
- <xsl:with-param name="IteratorSameStyle" select="$IteratorSameStyle"/>
- <xsl:with-param name="itemNumber" select="$itemNumber"/>
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- <xsl:with-param name="listStyle" select="$listStyle"/>
- <xsl:with-param name="precedingListItemsOfSameLevelAndStyle" select="$precedingListItemsOfSameLevelAndStyle"/>
- <xsl:with-param name="precedingListItemsOfSameLevelAndStyleCount" select="$precedingListItemsOfSameLevelAndStyleCount"/>
- <xsl:with-param name="precedingListItemsOfSameStyle" select="$precedingListItemsOfSameStyle"/>
- <xsl:with-param name="precedingListItemsOfSameStyleCount" select="$precedingListItemsOfSameStyleCount"/>
- <xsl:with-param name="pseudoLevel" select="$pseudoLevel" />
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
+ <xsl:when test="$currentListLevel = $listLevel">
+ <xsl:call-template name="countListItem">
+ <xsl:with-param name="IteratorSameLevelAndStyle" select="$IteratorSameLevelAndStyle" />
+ <xsl:with-param name="IteratorSameStyle" select="$IteratorSameStyle"/>
+ <xsl:with-param name="itemNumber" select="$itemNumber"/>
+ <xsl:with-param name="listLevel" select="$listLevel"/>
+ <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
+ <xsl:with-param name="listStyle" select="$listStyle"/>
+ <xsl:with-param name="precedingListItemsOfSameLevelAndStyle" select="$precedingListItemsOfSameLevelAndStyle"/>
+ <xsl:with-param name="precedingListItemsOfSameLevelAndStyleCount" select="$precedingListItemsOfSameLevelAndStyleCount"/>
+ <xsl:with-param name="precedingListItemsOfSameStyle" select="$precedingListItemsOfSameStyle"/>
+ <xsl:with-param name="precedingListItemsOfSameStyleCount" select="$precedingListItemsOfSameStyleCount"/>
+ <xsl:with-param name="pseudoLevel" select="$pseudoLevel" />
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
<!-- list item below the current level does not count -->
- <xsl:call-template name="countListItemTillStartValue">
- <xsl:with-param name="IteratorSameLevelAndStyle" select="$IteratorSameLevelAndStyle" />
- <xsl:with-param name="IteratorSameStyle" select="$IteratorSameStyle + 1"/>
- <xsl:with-param name="itemNumber" select="$itemNumber"/>
- <xsl:with-param name="listLevel" select="$listLevel"/>
- <xsl:with-param name="listLevelStyle" select="$listLevelStyle"/>
- <xsl:with-param name="listStyle" select="$listStyle"/>
- <xsl:with-param name="listStyleName" select="$listStyleName"/>
- <xsl:with-param name="precedingListItemsOfSameLevelAndStyle" select="$precedingListItemsOfSameLevelAndStyle"/>
- <xsl:with-param name="precedingListItemsOfSameLevelAndStyleCount" select="$precedingListItemsOfSameLevelAndStyleCount"/>
- <xsl:with-param name="precedingListItemsOfSameStyle" select="$precedingListItemsOfSameStyle"/>
- <xsl:with-param name="precedingListItemsOfSameStyleCount" select="$precedingListItemsOfSameStyleCount"/>
- <xsl:with-param name="pseudoLevel">
- <xsl:choose>
+ <xsl:call-template name="countListItemTillStartValue">
+ <xsl:with-param name="IteratorSameLevelAndStyle" select="$IteratorSameLevelAndStyle" />
+ <xsl:with-param name="IteratorSameStyle" select="$IteratorSa